用于MediaRecorder Android 6.0(API 23)的“可搜索”文件描述符

时间:2016-10-12 08:50:51

标签: java android mediarecorder parcelfiledescriptor

所以我试图将我的Android用作网络摄像头。我的代码适用于API< = 22.我正在使用ParcelFileDescriptor的{​​{1}}方法来创建用于读写的管道。

简而言之,我对管道的写作如下:

createPipe()

当我运行它时,我得到以下异常,

ParcelFileDescriptor[] parcelFileDescriptors = ParcelFileDescriptor.createPipe();

ParcelFileDescriptor mParcelWrite =new ParcelFileDescriptor(mParcelFileDescriptors[1]);

MediaRecorder mMediaRecorder = new MediaRecorder();
mMediaRecorder.setOutputFile(mParcelWrite.getFileDescriptor());
..
..// Other settings.
mMediaRecorder.start();

我知道,在API 23中,他们制作了一个change,阻止E/MediaRecorder: start failed: -2147483648 W/System.err: java.lang.RuntimeException: start failed. W/System.err: at android.media.MediaRecorder.start(Native Method) W/System.err: at com.ksy.recordlib.service.recoder.RecoderVideoSource.prepare(RecoderVideoSource.java:105) W/System.err: at com.ksy.recordlib.service.recoder.RecoderVideoSource.run(RecoderVideoSource.java:173) W/System.err: at java.lang.Thread.run(Thread.java:818) 使用不可搜索的文件描述符。

MediaRecorder一起使用时

ParcelFileDescriptor似乎不可寻找。

我的问题是,我怎样才能让它成为可追寻者?有什么替代品吗? 感谢。

1 个答案:

答案 0 :(得分:0)

我一直在研究这个问题。您可以设置的输出格式中有一种隐藏格式,即

<强> mMediaRecorder.setOutputFormat(8);

来自文档

**@hide H.264/AAC data encapsulated in MPEG2/TS 

public static final int OUTPUT_FORMAT_MPEG2TS = 8; **

然而,它仍不适用于棉花糖或牛轧糖。我让它适用于套件kat。如果这有帮助,请告诉我。