所以我试着用我的Android作为一个网络摄像头。我的代码是完美的API工作<= 22。我使用ParcelFileDescriptor
的createPipe()
方法来创建用于读写的管道。
简而言之,我对管道的书写如下:
ParcelFileDescriptor[] parcelFileDescriptors = ParcelFileDescriptor.createPipe();
ParcelFileDescriptor mParcelWrite =new ParcelFileDescriptor(mParcelFileDescriptors[1]);
MediaRecorder mMediaRecorder = new MediaRecorder();
mMediaRecorder.setOutputFile(mParcelWrite.getFileDescriptor());
..
..// Other settings.
mMediaRecorder.start();
当我运行这个时,我得到以下异常,
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)
我知道,在API 23中,他们做了一个改变,阻止MediaRecorder
与不可搜索的文件描述符一起工作。
ParcelFileDescriptor
当与createPipe()
一起使用时似乎无法搜索。
我的问题是,我怎样才能使它可搜索?还有别的选择吗?谢谢。
我已经调查了一个星期了。在你可以设置的输出格式中有一个隐藏的格式
mMediaRecorder.setOutputFormat (8);
从文档
**@hide H.264/AAC data encapsulated in MPEG2/TS
public static final int OUTPUT_FORMAT_MPEG2TS = 8;**
然而,它仍然不能用于棉花糖或牛轧糖。我为奇巧成功了。如果有帮助,请告诉我。