我如何在音频播放器Android应用中播放一组加密音频文件?
我有一个应用项目,我会在用户设备上存储一组加密的音频内容。在这种情况下,单个音频内容(例如:播客)将包含多个加密文件。该应用程序充当音频播放器,用户通过该播放器收听此音频内容。 为了获得良好的用户体验,整个内容(播客)应该从一个文件无缝播放到另一个文件。这适用于使用Android的MediaPlayer类的普通音频文件。
对于安全措施,用户设备存储上不应存在任何解密文件,用户可以通过我的应用程序(甚至在root设备上)以任何其他方式访问此文件。
要使用的加密类型尚未修复,因此我对任何最适合此情况的算法持开放态度。
我想在播放之前解密每个文件。文件大小最大为25MB,此类文件的AES加密/解密大约需要300毫秒,因此不会对用户体验造成太大影响。
我在这里看到两个不同的解密方法:
答案 0 :(得分:4)
简单的方法,IMO,是使用ExoPlayer
,这是一个由谷歌开发的开源媒体播放器。他们用很多边缘案件来处理这个项目,并且它是一个漂亮可靠的玩家。
最重要的是,您的需求很容易实现开箱即用。
您只需使用AesCipherDataSource
包裹FileDataSource
来加载播放器。
因此,您的文件使用AesCihper进行本地加密,并在运行时自动解密,然后由玩家自己进行分块。
以下是他们的开发指南的链接:https://google.github.io/ExoPlayer/guide.html 和AesCipher http://google.github.io/ExoPlayer/doc/reference/com/google/android/exoplayer2/upstream/crypto/AesCipherDataSource.html
答案 1 :(得分:1)
有许多方法可以实现您的目标,其中一些方法如下:
MediaPlayer.setDataSource(Context, Uri)
HttpURLConnection.getInputStream()
获取本地InputStream
创建FileInputStream
并使用MediaPlayer.setDataSource(FileInputStream.getFD())
。FileInputStream
并使用MediaPlayer.setDataSource(FileInputStream.getFD())
。更新:还有一种替代MediaPlayer的方法可能对您的需求有用*: https://github.com/google/ExoPlayer
答案 2 :(得分:0)
由于您正在处理加密数据,如果您不希望以最佳方式公开任何内容,请自行实施MediaPlayer ... 所以基本上你就是那个解码它的人。可能值得一看Android的一些开源媒体播放器
不使用内存,而是使用不同的方法作为localhost进行流式传输。设置一个小型HTTP服务器。这样,您一次可以在设备上保留最少量的解密数据。