【问题标题】:Encrypt video on the fly from android camera从 android 相机动态加密视频
【发布时间】:2012-07-23 05:16:09
【问题描述】:

我想对 Android 相机捕获的动态视频进行加密。所以我需要告诉android MediaRecorder 将它的视频流写入我的CipherOutputStream。问题是 MediaRecorder.setOutputFile() 方法只接受 FileDescriptor 并且无法从 CipherOutputStream 获取加密文件描述符。

所以我的问题是如何模拟 FileDescriptor 来接收数据写入并手动进行加密,或者以某种方式说服 MediaRecorder 将视频流式传输到 CipherOutputStream

【问题讨论】:

标签: java android encryption android-camera file-descriptor


【解决方案1】:

你可以使用 LocalServerSocket 和 LocalSocket 来实现你想要的。

LocalServerSocket 通过 LocalServerSocket.getFileDescriptor() 提供 FileDescriptor

  1. 启动 LocalServerSocket。
  2. 启动 LocalSocket 对象并连接到 LocalServerSocket。
  3. 调用 LocalServerSocket.accept() 以接受来自 LocalSocket 的连接。
  4. 连接建立后,可以从LocalServerSocket获取FileDescriptor。
  5. Camera 写入 LocalServerSocket 的每个字节都可以从 LocalSocket.getInputStream() 中检索,您可以使用 for 循环获取字节流并写入 CipherOutputStream。

记得把所有步骤放到一个新的线程中。

我使用这些 API 来创建以相机为流源的动态流处理器。

我希望这会有所帮助。

【讨论】:

  • 是否有一种媒体格式可以实际使用?例如 MP4,MediaRecorder 期望随机访问 FileDescriptor - 它希望在文件开头写入 moov atom,这 1) 不适用于套接字派生的 FileDescriptor,2) 也不适用于 CipherOutputStream .
  • 由于 moov/mdat 的随机位置,MP4 无法正常工作。我测试了 M2TS 等流文件格式可以正常工作,我认为其他流文件格式应该也可以工作。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-02-18
  • 1970-01-01
  • 2023-03-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-04-04
相关资源
最近更新 更多