2012-07-24 62 views
7

我想加密安卓攝像頭捕獲的視頻。所以我需要告訴android MediaRecorder將它的視頻流寫入我的CipherOutputStream。問題是MediaRecorder.setOutputFile()方法只接受FileDescriptor並且無法從CipherOutputStream獲取加密文件描述符。從安卓攝像頭即時加密視頻

所以我的問題是如何模擬FileDescriptor來接收數據寫入和手動加密或以某種方式說服MediaRecorder流視頻到CipherOutputStream

+1

我不認爲這是可能的:http://stackoverflow.com/questions/9257364/modifying-fileinputstream-for-mediaplayer-setdatasource – 2012-07-24 20:06:49

回答

4

你可以使用LocalServerSocket和LocalSocket來實現你想要的。

LocalServerSocket經由LocalServerSocket.getFileDescriptor提供的FileDescriptor()

  1. 啓動一個LocalServerSocket。
  2. 啓動一個LocalSocket對象並連接到LocalServerSocket。
  3. 調用LocalServerSocket.accept()接受來自LocalSocket的連接。
  4. 建立連接後,您可以從LocalServerSocket獲取FileDescriptor。
  5. 攝像機寫入LocalServerSocket的每個字節都可以從LocalSocket.getInputStream()中獲取,您可以使用for-loop獲取字節流並寫入CipherOutputStream。

請記住將所有步驟放入一個新的線程。

我使用這些API來創建動態流處理器,並將相機作爲流源。

我希望這會有所幫助。

+0

有沒有媒體格式,這實際上與?例如,MP4 MediaRecorder需要對FileDescriptor進行隨機訪問 - 它希望在文件的開始處寫入moov原子,該文件1)不能與套接字派生的FileDescriptor一起使用,以及2)不能與CipherOutputStream一起使用。 – Mark 2014-11-17 21:15:38

+0

由於moov/mdat的隨機位置,MP4不工作。我測試了流媒體文件格式,如M2TS正在工作,我認爲其他流文件格式也應該起作用。 – yrulee 2015-04-17 14:57:20