我正在开发一个应用程序,允许用户将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不允许不可搜索的文件描述符。 我怎么能克服这个问题?
感谢。