一个LocalSocket(Unix域)的客户端 - 服务器的数据流问题的MediaRecorder Android中(JAVA) [英] a LocalSocket (Unix domain) client-server data flow issue for MediaRecorder in Android (Java)

查看:820
本文介绍了一个LocalSocket(Unix域)的客户端 - 服务器的数据流问题的MediaRecorder Android中(JAVA)的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我不明白的是Unix域套接字之间的数据流。

What I don't get is data flow among the Unix Domain Sockets .

据我了解Unix域套接字数据流量

I understand Unix Domain Socket data flow is

LocalSocket客户.connect() - > LocalServerSocket服务器。接受()

客户端发送数据到服务器,不够直,我明白了。

The client sends data to the server, straight enough that I understand.

然而,对于视频流/于Android的MediaRecorder音频,大量的调查研究后,我已经看到了每一个例子来使用,而不是为MediaRecorder一个文件LocalSocket在原则如下:

However, for Streaming video/audio from MediaRecorder of Android, after a lot of research, I've seen every example to use a LocalSocket instead of a file for MediaRecorder is in principle as below:

https://static.foxdogstudios.com/static/$p$psentations/keeping-it-real-time.html#/9

LocalServerSocket server = new LocalServerSocket("some name");

receiver = new LocalSocket();
receiver.connect(server.getLocalSocketAddress()); 

LocalSocket sender = server.accept();//LocalSocket not LocalServerSocket as in Source link

// ...

// Give the MediaRecorder our fake file
recorder.setOutputFile(sender.getFileDescriptor());

这code如下:

MediaRecorder - > LocalSocket发件人 - >

MediaRecorder --> LocalSocket sender -->

LocalServerSocket服务器。接受() - > LocalSocket接收.connect()

这是怎么回事?

Appearently,插座数据相反的方向流动,因此,我不明白为什么这code正常工作。

Appearently, the sockets data flows in the opposite direction, therefore, I don't get why this code works as expected.

你能请告知。谢谢你。

推荐答案

看来基本上,我的想法是正确的。
这些例子我见过,至少,发件人,接收机结构是有些不妥。

It appears that basically, my thought is correct. The examples I've seen, at least, sender-receiver structure is something wrong.

下面是我变得更简单的模型:

Here's more straightforward model I made:

package com.example.app;

import android.app.Activity;
import android.media.MediaRecorder;
import android.net.LocalServerSocket;
import android.net.LocalSocket;
import android.net.LocalSocketAddress;
import android.os.Bundle;

import java.io.IOException;

public class MainActivity extends Activity
{
    private final String SOCKET_ADDRESS = "socket1";
    private MediaRecorder mRecorder = new MediaRecorder();
    @Override
    protected void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        class IOThread extends Thread
        {
            @Override
            public void run()
            {
                System.out.println("--------IO Thread------ ");
                LocalSocket receiver;
                LocalServerSocket server;

                try
                {
                    server = new LocalServerSocket(SOCKET_ADDRESS);

                    localServerCreated();
                    receiver = server.accept();

                    System.out.println("---------server.accept();------------- ");

                    int ret = 0;
                    while ((ret = receiver.getInputStream().read()) != -1)
                    {
                        System.out.println( "ret =" + ret);
                    }

                    System.out.println("ret =" + ret);

                }
                catch (IOException e)
                {
                }

            }
        }
        IOThread io1 = new IOThread();
        io1.start();


    }

    private void localServerCreated()
    {
        LocalSocket sender;
        try
        {
            sender = new LocalSocket();
            sender.connect(new LocalSocketAddress(SOCKET_ADDRESS));

            mRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
            mRecorder.setOutputFormat(MediaRecorder.OutputFormat.AAC_ADTS);
            mRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AAC);
            mRecorder.setOutputFile(sender.getFileDescriptor());

        }
        catch (IOException e)
        {
            e.printStackTrace();
        }
        System.out.println("------mRecorder configured--------");
        try
        {
            mRecorder.prepare();
            mRecorder.start();
            System.out.println("------mRecorder.start()--------");
        }
        catch (IllegalStateException e)
        {
            e.printStackTrace();
        }
        catch (IOException e)
        {
            e.printStackTrace();
        }

    }


}

这篇关于一个LocalSocket(Unix域)的客户端 - 服务器的数据流问题的MediaRecorder Android中(JAVA)的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆