【问题标题】:Playing encrypted MP4播放加密的 MP4
【发布时间】:2016-10-06 10:37:46
【问题描述】:

我正在制作一个(本地 - 多平台)视频保护应用程序,但我不知道首先“加密->保存在 HDD”然后 的正确解决方案是什么>“从 HDD 加载->解密->播放” 加密视频。

我阅读了有关 MPEG-DASH 和一些 DRM 的信息,发现了这个 Bento4 命令:

mp4dash --encryption-key=000102030405060708090a0b0c0d0e0f:00112233445566778899aabbccddeeff --encryption-args="--property 1:ClearLeadFragments:10 --property 2:ClearLeadFragments:10" movie.mp4

但我不确定 MPEG-DASH 是否可以成为解决方案的一部分。

我该如何解决这个问题?

【问题讨论】:

  • 您似乎缺少基础知识。否则我无法理解为什么您会选择使用针对互联网流媒体优化的格式(您似乎想在本地环境中工作)。基于 ffmpeg 的解决方案应该很容易实现,它可以从 aes 加密的流中播放。谷歌了一下。警告:当您假设攻击者可以访问您的内存时,您的任务可能会变得复杂。我不确定在实践中如何应对此类攻击,但即使是像 keepass 这样的优秀密码管理器也需要大量额外代码才能更安全!
  • @sascha 我对逆向工程有足够的了解,而且我知道可以通过转储进程来获取内存内容。但是,如果您在多帧中解密并加载内容(而不是将完整的明文文件放入内存中),则转储和合并它会变得非常困难。那么,您可以提供哪种文件格式(而不是 mpeg)或解决方案?
  • 您可以使用任何格式(应该可能支持流式传输),只需使用 ffmpeg 进行加密。自己用谷歌搜索有什么难的?获得第一步最多需要 1 分钟。

标签: encryption mp4 mpeg-dash


【解决方案1】:

在google上多次搜索后,我在这里找到了@erti-chris-eelmaa的答案:

Playing encrypted video

我使用 openGL+FFMPEG 编写了自己的 Videoplayer,它可以播放 mp4 和 使用着色器解密 GPU 中的每一帧。我也尝试过 另一种可能的解决方案,例如使用来自网络服务器的流式传输 VLC。 (VLC 在处理时提供了某种加密/解密 流)和yada yada yada。

还有一种解决方案是使用 4 个媒体元素 (WPF) 和实际视频 实际上被分成 4 个区域,每个区域都被旋转,所以 视频不可见。一旦你将视频加载到 4 媒体元素,您可以绘制出您想要展示的部分并 也将其旋转回来。但老实说,MediaElement 很糟糕。

但是,我最终完全按照 RomanR 所说的来结束。我建立了 DirectShow 使用 mp4splitter、ffdshow、videorenderer 和我修改的图形 mp4splitter 源过滤器。阅读发生在 BaseSplitter/AsyncReader.cpp(只需修改 SyncRead 函数) mp4splitter 使用。

如果您想自己实现,只需使用 MPC-HC 项目 并根据需要修改过滤器。我花了一些时间才四处走动 DirectShow 的概念,但是一旦你理解了它,它就会变得很棒 武器。

【讨论】:

    【解决方案2】:

    HLS + S3 + CloudFront + MediaConvert + VideoJS。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-12-26
      • 2016-02-11
      • 1970-01-01
      • 2013-07-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多