Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/391.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android(Java)中MediaRecorder的LocalSocket(Unix域)客户端服务器数据流问题_Java_Android_Sockets_Stream_Unix Socket - Fatal编程技术网

Android(Java)中MediaRecorder的LocalSocket(Unix域)客户端服务器数据流问题

Android(Java)中MediaRecorder的LocalSocket(Unix域)客户端服务器数据流问题,java,android,sockets,stream,unix-socket,Java,Android,Sockets,Stream,Unix Socket,我没有得到的是Unix域套接字之间的数据流 我知道Unix域套接字数据流是 LocalSocket客户端.connect()-->LocalServerSocket服务器.accept() 客户端将数据发送到服务器,这一点我可以理解 然而,对于Android MediaRecorder的流式视频/音频,经过大量研究,我看到了每一个使用LocalSocket而不是MediaRecorder文件的示例,原则上如下所示: 此代码看起来像: MediaRecorder-->LocalSocket发送器

我没有得到的是Unix域套接字之间的数据流

我知道Unix域套接字数据流是

LocalSocket客户端.connect()
-->
LocalServerSocket服务器.accept()

客户端将数据发送到服务器,这一点我可以理解

然而,对于Android MediaRecorder的流式视频/音频,经过大量研究,我看到了每一个使用LocalSocket而不是MediaRecorder文件的示例,原则上如下所示:

此代码看起来像:

MediaRecorder
-->
LocalSocket发送器
-->

localserversocketserver.accept()
-->
LocalSocket receiver.connect()

发生了什么事

显然,套接字数据的流动方向相反,因此,我不明白为什么这段代码会像预期的那样工作


你能给我提个建议吗。谢谢。

看来我的想法基本上是正确的。 我看到的例子,至少,发送方-接收方结构是错误的

下面是我制作的更简单的模型:

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();
        }

    }


}

这篇文章很有帮助。我也在用头撞砖墙,想弄明白这一点!
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();
        }

    }


}