我正在尝试通过ExoPlayer播放AES / GCM / NoPadding加密文件。由于代码相当大,我已经在Github Gist中提供了它。该应用程序允许用户观看他们可以节省的视频流以节省带宽。由于内容是专有的,因此保存的视频经过加密以保护知识产权。
我正在使用基于this教程的this(Github Gist)DataSource实现。在某些设备上(Android版本范围从4.1.1到5.1.1),DataSpec.position
返回的数字远远超出实际文件的大小,导致设备卡在forceSkip
方法中。
删除forceSkip调用似乎也不起作用,因为设备会在open
和read
次调用的无限循环中陷入困境。
我的加密逻辑是正确的,因为首先尝试解密整个文件并将其保存到临时文件,然后从中播放可以在所有这些设备上正常工作。但是这种方法不可行,因为解密对于我正在处理的视频大小(20-30mb)需要很长时间(分钟)。
由于我无法控制玩家如何初始化DataSpec
并调用DataSource
方法,因此我开始怀疑这可能是一个平台错误。理解或解决问题的任何帮助都表示赞赏。