2016-10-12 16 views
2

ウェブカメラとしてAndroidを使用しようとしています。私のコードはAPI < = 22で完璧に動作しています。私はParcelFileDescriptorcreatePipe()メソッドを使って読み書き用のパイプを作成しています。要するにMediaRecorder Android 6.0(API 23)で使用する「Seekable」ファイルディスクリプタ

は、パイプへの私の文章は次のようになります。

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を作成し、MediaRecorderがシーク可能でないファイル記述子で動作するのを防いだ。

ParcelFileDescriptorcreatePipe()と一緒に使用するとシーク可能ではないようです。

私の質問は、どうすればそれをシークアブルにすることができますか?それに代わるものはありますか?おかげさまで

+0

私もこの種の問題があります。私はLocalSocketsとソケットを使用しようとしましたが、FileDescriptorsを使用することはできません。 – neilQ5

答えて

0

私はこれを1週間調査しています。設定可能な出力フォーマットには隠しフォーマットがあります。

mMediaRecorder.setOutputFormat(8);ドキュメントから

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

のpublic static final int型OUTPUT_FORMAT_MPEG2TS = 8;それはまだマシュマロやヌガー上では動作しません。しかし**

。私はキットカットのためにそれを作った。これが役に立ったら教えてください。

関連する問題