所以我尝试使用我的 Android 作为网络摄像头。我的代码对于 API ParcelFileDescriptor's 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 中,他们做了一个change https://android.googlesource.com/platform/frameworks/av/+/2aa74dc097fe860abc84769abf2b6e0962718471%5E%21/media/libstagefright/MPEG4Writer.cpp这阻止了MediaRecorder
使用不可查找的文件描述符。
ParcelFileDescriptor
当与createPipe()
似乎不可寻找。
我的问题是,如何才能使其可搜索?有什么替代方案吗?
谢谢。
我已经调查这个问题一周了。您可以设置输出格式中有一个隐藏格式,即
mMediaRecorder.setOutputFormat(8);
从文档中
**@hide H.264/AAC data encapsulated in MPEG2/TS
公共静态最终 int OUTPUT_FORMAT_MPEG2TS = 8;**
然而,它仍然不适用于棉花糖或牛轧糖。我让它对奇巧有用。让我知道这是否有帮助。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)