【问题标题】:Anyone Have MediaRecorder Working with ParcelFileDescriptor.fromDatagramSocket?任何人都有使用 ParcelFileDescriptor.fromDatagramSocket 的 MediaRecorder?
【发布时间】:2023-04-11 12:48:01
【问题描述】:

我正在尝试制作一个使用MediaRecorder 录制音频的示例,该示例录制的数据通过Android 上的UDP 套接字传递(>=4.0)。

阅读文章: Broadcasting video with Android - without writing to local files, 我雇用了ParcelFileDescriptor.fromDatagramSocket

这是我目前正在处理的简化伪代码:

  //private DatagramSocket ds;
  //private MediaRecorder mRecorder;
  ParcelFileDescriptor pfd = ParcelFileDescriptor.fromDatagramSocket(ds);

  mRecorder = new MediaRecorder();
  mRecorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4);
  mRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AAC);
  mRecorder.setOutputFile(pfd.getFileDescriptor());
  mRecorder.prepare();
  mRecorder.start(); 

这里只是一个简单的DatagramSocket(UDP) Listener线程循环观察DatagramSocket ds

    //...
    private DatagramSocket ds;
    private int localPort = 39000;
    private MediaRecorder mRecorder;

    @Override
    protected void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        try
        {
            ds = new DatagramSocket(localPort);
        }
        catch (SocketException e)
        {
            System.out.println(e);
        }
        class IOThread extends Thread
        {
            @Override
            public void run()
            {
                byte []buf = new byte[1024];
                DatagramPacket packet= new DatagramPacket(buf, buf.length);
                while (true)
                {
                    try
                    {
                        ds.receive(packet);
                        SocketAddress sockAddress = packet.getSocketAddress();
                        int len = packet.getLength();
                        String msg = new String(buf, 0, len);
                        System.out.println(msg + ":" + len + "byte receive by "+ sockAddress.toString());
                    }
                    catch (IOException e)
                    {
                        System.out.println(e);
                    }
                }
            }
        }
        IOThread io1 = new IOThread();
        io1.start();
    //..........

原则上,我希望MediaRecorder 记录的缓冲区通过 UDP FileDescriptor 传递,并且我可以通过某种方式管理套接字,但到目前为止,我没有观察到任何事情发生。

我确认 UDP 侦听器单元与其他 UDP 输入一起工作正常,MediaRecorder 单元应该没问题,因为它适用于 localFiles 而不是 UDP 套接字 FileDescriptor。

有什么建议吗?

提前致谢!

【问题讨论】:

    标签: java android sockets udp file-descriptor


    【解决方案1】:

    大概,最好通过MediaRecorder -> LocalSocket,

    这是我随后的问答

    a LocalSocket (Unix domain) client-server data flow issue for MediaRecorder in Android (Java)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-10-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-09-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多