Android MediaRecorder和FileDescriptor

时间:2017-01-15 20:44:36

标签: android streaming file-descriptor mediarecorder

我正在开发一个应用程序,允许用户将Android手机的屏幕直接投射到另一部手机。它基于libstreaming库并进行了一些修改。

我已经设置了MediaRecorder,但输出不是发送到文件而是发送到文件描述符。我有两个用ParcelFileDescriptor.createPipe();

创建的文件描述符
mMediaRecorder = new MediaRecorder();
...
FileDescriptor fd = mParcelWrite.getFileDescriptor();
mMediaRecorder.setOutputFile(fd);
... here I continue with prepare, start, etc.

然后在第二个文件描述符中读取输出。对流进行处理,以便可以跳过mp4文件中尚不存在的标题,但可以对视频进行流式处理。

InputStream is = new ParcelFileDescriptor.AutoCloseInputStream(mParcelRead);
try {
  byte buffer[] = new byte[4];
  // Skip all atoms preceding mdat atom
  while (!Thread.interrupted()) {
    while (is.read() != 'm') ;
    is.read(buffer, 0, 3);
    if (buffer[0] == 'd' && buffer[1] == 'a' && buffer[2] == 't') break;
  }
} catch (IOException e) {
  Log.e(TAG, "Couldn't skip mp4 header :/");
  stop();
  throw e;
}
(After this point the stream is sent over the network)

事情是,显然在API 23之后,android不允许不可搜索的文件描述符。 我怎么能克服这个问题?

感谢。

0 个答案:

没有答案