2012-07-24 7 views
7

アンドロイドカメラのキャプチャしたビデオをオンザフライで暗号化したい。ですから、私はMediaRecorderにビデオストリームを書き込むためにアンドロイドに私のCipherOutputStreamに伝える必要があります。問題はMediaRecorder.setOutputFile()メソッドが受け入れるのはFileDescriptorであり、CipherOutputStreamからファイルディスクリプタを暗号化する方法はありません。アンドロイドカメラからオンザフライでビデオを暗号化する

私はFileDescriptorをエミュレートしてデータの書き込みを受け取り、手動で暗号化するか、何らかの理由でMediaRecorderCipherOutputStreamにストリームするように納得させることができます。

+1

私はこれが可能ではないと思う:http://stackoverflow.com/questions/9257364/modifying-fileinputstream-for-mediaplayer-setdatasource –

答えて

4

LocalServerSocketとLocalSocketを使用して、必要なものを実装できます。

LocalServerSocket.getFileDescriptor介しのFileDescriptorを提供LocalServerSocket()

  1. はLocalServerSocketを開始します。
  2. LocalSocketオブジェクトを開始し、LocalServerSocketに接続します。
  3. LocalServerSocket.accept()を呼び出して、LocalSocketからの接続を受け入れます。
  4. 接続が確立されると、LocalServerSocketからFileDescriptorを取得できます。
  5. CameraがLocalServerSocketに書き込むすべてのバイトをLocalSocket.getInputStream()から取得できます。forループを使用してバイトストリームを取得し、CipherOutputStreamに書き込むことができます。

すべてのステップを新しいスレッドに入れてください。

私はこれらのAPIを使用して、カメラをストリームソースとしてオンザフライストリームプロセッサーを作成しました。

こちらがお役に立てば幸いです。

+0

これは実際には動作するメディア形式はありますか?例えば、MP4の場合、MediaRecorderはFileDescriptorへのランダムアクセスを期待しています。ファイルの先頭にmoovアトムを書き込もうとしています。これは、1)ソケット由来のFileDescriptorで動作しない、2)CipherOutputStreamで動作しない。 – Mark

+0

moov/mdatのランダムな位置のためにMP4が動作しません。私はM2TSのようなストリーミングファイルフォーマットをテストしました。他のストリーミングファイルフォーマットも同様に動作するはずです。 – yrulee

関連する問題