为了账号安全,请及时绑定邮箱和手机立即绑定

使用 Web 代理 (nanoHTTPD) 即时流式传输 [随机访问] 加密 视频

使用 Web 代理 (nanoHTTPD) 即时流式传输 [随机访问] 加密 视频

喵喵时光机 2022-12-15 14:41:17
我有一个加密的 (128-AES-CTR-NoPadding) 视频驻留在服务器上,我需要在下载时对其进行解密,以便用户可以流式传输它(在普通播放器/网络中)。我了解此解决方案的组成部分以及应如何将它们组合在一起以使其发挥作用。它部分有效,但对于其余部分,我无法正确实现流式传输。在过去的一周里,我一直在阅读和学习示例(其中大部分是在磁盘上播放文件,这里不是这种情况),并得出结论这超出了我的范围,我需要一些帮助。细节我使用轻量级网络服务器 ( nanoHttpd ) 作为代理从远程服务器下载加密数据并提供解密数据。下面是我的 NanoHTTPD.serve 方法中的主要代码。//create urlConnection to encrypted video file with proper headers (ie range headers) as request received by the proxy serverInputStream inputStream = new CipherInputStream(cipher, urlConnection.getInputStream());return newChunkedResponse(status, contentType,inputStream);所以现在如果我转到我的 NanoHttpd 网络服务器 ( http://localhost:9000 ),文件将开始下载,下载完成后,文件将按预期完全解密和播放。因此,这确保了从服务器获取加密数据和提供解密数据的工作正常。但是当要求任何视频播放器(html5、vlc)从该 url 流式传输视频时,它根本不起作用。如果将 NanoHTTPD.serve 中的上述代码更改为//create urlConnection to cleardata video file with proper headers (ie range headers) as request received by the proxy server    InputStream inputStream = urlConnection.getInputStream();    return newChunkedResponse(status, contentType,inputStream);然后尝试从上述播放器流式传输,它会工作得很好。因此,这可确保 Web 代理正确检索和提供数据。潜在问题 为了支持来自视频播放器的范围请求,我们需要正确地跳到块边界,该块边界是密码块大小的倍数。因此,当视频播放器请求带有标头(范围:字节 34-44)的数据时,CipherInputStream 可能无法解密数据,因为输入流具有来自 34-44 的数据。但是我不知道如何使用 urlConnection.getInputStream() 和 CipherInputStream 来做到这一点。但即使没有这个,它至少应该开始播放前几秒,因为视频播放器发送的第一个请求是(范围:0-),这意味着 inputStream 从索引 0 开始,因此 CipherInputStream 应该能够解密并提供这些初始字节和视频应继续播放。我完全不知所措,因为我不知道如何调试它。欢迎任何想法,示例代码,我会尝试并在此处发布结果。
查看完整描述

1 回答

?
小怪兽爱吃肉

TA贡献1852条经验 获得超1个赞

我已经弄清楚了。我会在这里为其他人发布解决方案。

这里的问题是远程请求。如果代理没有对这些范围请求发送正确的响应,播放将失败。由于多种原因,这可能会失败。

  1. 您对远程服务器的请求缺少正确的范围标头。

  2. 您对远程服务器的请求返回了正确的范围数据,但您没有正确解密它。这是我的情况。当然,这个解密过程会因密码而异。对我来说,我使用了 (AES/CRT/NOPADDING),我为偏移量提供了正确的 iv。此处描述了如何计算偏移量 iv 。

就代码示例而言,我之前只需要添加一行

InputStream inputStream = new CipherInputStream(cipher, urlConnection.getInputStream());
return newChunkedResponse(status, contentType,inputStream);

这是

jumpToOffset(cipher,....);

此后一切正常,包括寻找视频。


查看完整回答
反对 回复 2022-12-15
  • 1 回答
  • 0 关注
  • 271 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信