我正在实施一个必须播放加密视频文件的视频播放器。该文件必须在运行时在缓冲区中解密(例如ByteArrayOutputStream),然后必须将流馈送到视频播放器中以播放电影。
大多数人建议在本地托管一个流媒体服务器的实例,并将该网址提供给播放器。但这种方法安全吗?如果有人使用网络探查器应用程序(如Windows的fiddler)并捕获所有本地网络呼叫,该怎么办?当用户在流媒体服务器和播放器之间流动时,用户将能够获得解密的字节,并将其本地保存在文件中
答案 0 :(得分:4)
假设您想使用android.media.MediaPlayer来完成任务。
然后查看MediaPlayer.setDataSource您有哪些选项:
1)Java文件不会帮助你。
2)Uri with http://是你提到的localhost上的流媒体服务器。我测试在我的应用程序中播放这样的文件并使用WireShark for Android捕获网络流量,我没有捕获任何内容,可能是因为无法捕获localhost上的流量。因此,这可能足以安全地通过本地http服务器进行流式传输。
3)Uri with content:// scheme从ContentProvider获取数据,ContentProvider可能是您自己的非导出提供程序,您可以在其中实现openAssetFile,并使用ParcelFileDescriptor.createPipe()和一个读取/解密数据的线程将它们写入您在openAssetFile上返回的AssetFileDescriptor的管道中。 这也是安全的选项,因为您的ContentProvider未导出。
所以你决定2)或3)中的哪一个更容易实现。