【问题标题】:a LocalSocket (Unix domain) client-server data flow issue for MediaRecorder in Android (Java)Android (Java) 中 MediaRecorder 的 LocalSocket(Unix 域)客户端-服务器数据流问题
【发布时间】:2014-01-31 02:31:39
【问题描述】:

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

我理解 Unix Domain Socket 数据流是

LocalSocket client .connect() --> LocalServerSocket server .accept()

客户端向服务器发送数据,直截了当,我理解。

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

https://static.foxdogstudios.com/static/presentations/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());

这段代码看起来像:

MediaRecorder --> LocalSocket sender -->

LocalServerSocket server .accept() --> LocalSocket receiver .connect()

发生了什么事??

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

您能不能给点建议。谢谢。

【问题讨论】:

    标签: java android sockets stream unix-socket


    【解决方案1】:

    看来,我的想法基本上是正确的。 我见过的例子,至少,发送者-接收者结构是有问题的。

    这是我制作的更简单的模型:

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

    【讨论】:

    • 这篇文章很有帮助。我也在试图解决这个问题!
    猜你喜欢
    • 1970-01-01
    • 2020-02-05
    • 1970-01-01
    • 2018-10-20
    • 1970-01-01
    • 1970-01-01
    • 2016-10-08
    • 2016-11-07
    • 2021-11-10
    相关资源
    最近更新 更多