2010-04-14 54 views
4

我需要能够在Android中播放加密文件。如何在Android中播放加密文件

该文件是AAC。

我可以看到这样做的唯一方法可以是:

  1. 解密文件导入到内部专用存储,并在该文件播放点播放器,或
  2. 解密&解码文件为PCM并将其提供给AudioTrack。

1不是很好,因为它需要很长时间才能做到。
2不是很好,因为我不知道如何利用硬件解码器来做到这一点。

任何想法?

tia。

回答

0

嗯,我认为Android不支持.AAC格式。

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

,但你可以改变文件 playerdriver.cpp了Android的OpenCore内以下行::

mDataSource->SetDataSourceFormatType(PVMF_FORMAT_UNKNOWN); 

mDataSource->SetDataSourceFormatType(PVMF_AACFF); 

,那么你可以发挥你的AAC文件=)

+0

请注意,此解决方案需要创建自己的Android固件。 – CommonsWare 2010-04-14 20:51:49

+0

对不起,我的意思是一个.M4A文件,问题是没有播放未加密的版本,问题是播放加密版本。我需要媒体播放器采用InputStream。 – user306517 2010-04-14 21:41:11

+1

创建您自己的Android固件 - ug。当真?有一种方法可以做到这一点...怎么样将文件重新加密成android系统知道的本地DRM? DRM基本上是出于Android还是什么?似乎是一个非常严重的限制... – user306517 2010-04-15 00:28:22

4

如果您有一种可以在流上解密的加密格式,那么你可以在流源和媒体播放器之间插入一个代理并从那里读取它。

NPR Android新闻应用程序有一个插入代理示例,允许2.2之前的设备正确处理Shoutcast流。请参阅源代码中的StreamProxy class以了解如何完成此操作,请参阅lines 410-418 (as of last update) of the PlaybackService class以实现该操作。它本质上只是改变通过本地代理服务器来运行的网址:

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界面媒体播放器。

+0

没有一个链接的作品。 – Sivakumar 2015-08-07 05:48:26

+1

@Sivakumar感谢您的注意。我更新了链接并包含了一些相关的源代码。 – jwadsack 2015-08-07 21:13:09