我正在实现一个从远程计算机播放流的媒体播放器.通过我的应用程序,我可以控制远程机器(例如寻求秒).像魅力一样工作,但是:
Android Media Player缓冲一些疯狂的10-15秒(!!),这意味着每次点击(‘搜索’)需要10-15秒才能生效,即使它不到一秒钟直到新的数据到了.
我的问题:有没有办法控制(限制)缓存?或者我只是做错了什么?我是唯一有此问题的人吗?
我的代码非常简单:
player = new MediaPlayer() player.setDataSource(url); player.setOnPreparedListener(new OnPreparedListener() { public void onPrepared(MediaPlayer mp) { mp.start(); } }); player.prepareAsync();
更新:
我使用本地自建的迷你HTTP服务器将我的字节流连接到Androids媒体播放器.在这种情况下,似乎Android DRM正在延迟/缓存.仍然不太清楚为什么(如果我连接到托管文件的IIS,为什么不).也不知道如何解决这个问题.
欢迎投入!
谢谢!
丹尼尔
解决方法
好的,同时我更接近解决方案.原来我的问题来源是Android DRM! (不,我没有播放受保护的文件.它的标准mp3).
DRM似乎已经在Android 3.1中引入(我在Galaxy Tab 10.1上进行了测试).它在仿真器上工作正常(可能没有在那里实现DRM?)
知道如何禁用或加速这个吗?似乎有一个10秒的计时器位于Android DRM impl的某个深处等待 – 无论如何,不知道.我的错误日志:
10-06 17:38:19.020: ERROR/MediaExtractor(226): **********MediaExtractor::Create 10-06 17:38:19.020: ERROR/IDrmManagerService(Native)(226): add uniqueid 10-06 17:38:19.020: ERROR/IDrmManagerService(Native)(225): Entering BnDrmManagerService::onTransact with code 1 10-06 17:38:19.020: ERROR/IDrmManagerService(Native)(225): BnDrmManagerService::onTransact :ADD_UNIQUEID 10-06 17:38:19.020: ERROR/IDrmManagerService(Native)(225): Entering BnDrmManagerService::onTransact with code 3 10-06 17:38:19.020: ERROR/IDrmManagerService(Native)(225): BnDrmManagerService::onTransact :ADD_CLIENT 10-06 17:38:19.020: ERROR/IDrmManagerService(Native)(226): Entering BpDrmManagerService::openDecryptSession 10-06 17:38:19.020: ERROR/IDrmManagerService(Native)(225): Entering BnDrmManagerService::onTransact with code 27 10-06 17:38:19.020: ERROR/IDrmManagerService(Native)(225): BnDrmManagerService::onTransact :OPEN_DECRYPT_SESSION_FROM_URI 10-06 17:38:19.020: ERROR/DrmManagerService(Native)(225): Entering DrmManagerService::openDecryptSession with uri 10 seconds wait 10-06 17:38:29.040: ERROR/DrmManager(Native)(225): DrmManager::openDecryptSession: no capable plug-in found 10-06 17:38:29.040: ERROR/IDrmManagerService(Native)(225): NULL decryptHandle is returned 10-06 17:38:29.040: ERROR/IDrmManagerService(Native)(226): no decryptHandle is generated in service side 10-06 17:38:29.040: ERROR/IDrmManagerService(Native)(226): remove uniqueid 10-06 17:38:29.040: ERROR/IDrmManagerService(Native)(225): Entering BnDrmManagerService::onTransact with code 2 10-06 17:38:29.040: ERROR/IDrmManagerService(Native)(225): BnDrmManagerService::onTransact :REMOVE_UNIQUEID 10-06 17:38:29.040: ERROR/IDrmManagerService(Native)(225): Entering BnDrmManagerService::onTransact with code 4 10-06 17:38:29.040: ERROR/IDrmManagerService(Native)(225): BnDrmManagerService::onTransact :REMOVE_CLIENT 10-06 17:38:29.040: ERROR/IDrmManagerService(Native)(226): setDrmServiceListener 10-06 17:38:29.040: ERROR/IDrmManagerService(Native)(225): Entering BnDrmManagerService::onTransact with code 5 10-06 17:38:29.040: ERROR/IDrmManagerService(Native)(225): BnDrmManagerService::onTransact :SET_DRM_SERVICE_LISTENER 10-06 17:38:29.040: ERROR/DrmManagerService(Native)(225): Entering setDrmServiceListener