如何在安卓设备中播放加密文件

4
我需要能够在Android上播放一个加密文件。
这个文件是AAC格式的。
我能想到的唯一方法是:
1. 解密文件到内部私有存储,并让播放器指向该文件进行播放。 2. 将文件解密并解码为PCM,然后将其提供给AudioTrack。
方式1不太好,因为这需要花费很长时间。
方式2也不太好,因为我不知道如何利用硬件解码器来实现。
有什么好的想法吗?
谢谢。
2个回答

4
如果您有一种可以在流上解密的加密格式,那么您可以在流源和媒体播放器之间插入代理并从那里读取。NPR Android新闻应用程序有一个示例插入了代理以允许早于2.2版本的设备正确处理Shoutcast流。请参阅源代码中的StreamProxy类以了解如何执行此操作,以及PlaybackService类的410-418行(截至最后更新)的实现。它基本上只是改变了URL以通过本地代理服务器运行。
if (stream && Build.VERSION.SDK_INT < 8) {
  if (proxy == null) {
    proxy = new StreamProxy();
    proxy.init();
    proxy.start();
  }
  playUrl = String.format("http://127.0.0.1:%d/%s",
      proxy.getPort(), url);
}

如果您的流来自本地文件而非互联网,则可以使用我编写的 HttpRawResourceServer作为测试工具,与媒体播放器进行接口交互。

1
@Sivakumar,感谢您的留言。我已更新链接并包含了一些相关的源代码。 - jwadsack

0

我认为安卓不支持.AAC格式。

 3GPP (.3gp) and MPEG-4 (.mp4, .m4a). No support for raw AAC (.aac)

但是您可以更改Android OpenCORE中的文件playerdriver.cpp中的以下行:

mDataSource->SetDataSourceFormatType(PVMF_FORMAT_UNKNOWN); 

mDataSource->SetDataSourceFormatType(PVMF_AACFF); 

那么你就可以播放你的AAC文件 =)


请注意,此解决方案需要创建自己的Android固件。 - CommonsWare
抱歉,我指的是一个 .M4A 文件,问题不在于播放未加密版本,而在于播放加密版本。我需要媒体播放器获取 InputStream。 - user306517
1
创建你自己的安卓固件 - 噢,真的吗?一定有办法可以做到...把文件重新加密成安卓系统识别的本地 DRM,这可行吗?安卓系统基本上不支持DRM了吗?这似乎是一个相当严重的限制啊... - user306517

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接