问:15秒延迟/缓存在Android的媒体播放器播放的流时, [英] How to avoid 15 second delay/caching in Android Media Player when playing stream
问题描述
我在执行一个媒体播放器,可以播放从远程机器的流。通过我的应用程序,我可以控制远程计算机(如寻求秒)。作品般的魅力,但是:Android的媒体播放器缓冲了一些疯狂的10-15秒(!),这意味着每一次点击('寻求')需要10-15秒才能生效,即使它是不到一秒钟,直到新数据到达。
I am implementing a media player that plays a stream from a remote machine. Via my app I can control the remote machine (e.g. seek to second). Works like charm, but: The Android Media Player buffers some insane 10-15 seconds(!!), which means each click ('seek') takes 10-15 seconds to take effect even though it is less than a second until the new data arrives.
我的问题:有没有什么办法来控制(限制)的缓存?或者,我只是做错了什么?我是不是唯一一个有这个问题?
My Question: Is there any way to control (limit) that caching? Or am I simply doing something wrong? Am I the only one having this issue?
我的code是很简单的:
My code is very simple:
player = new MediaPlayer()
player.setDataSource(url);
player.setOnPreparedListener(new OnPreparedListener() {
public void onPrepared(MediaPlayer mp) {
mp.start();
}
});
player.prepareAsync();
更新: 我使用的是本地自建微型HTTP服务器连接我的字节流机器人的媒体播放器。这似乎是Android的DRM被推迟/缓存在这种情况下。还是不太清楚为什么(为什么不,如果我连接到我的IIS托管的文件)。另外不知道如何解决这个。
UPDATE: I am using a local self built mini HTTP server to connect my byte stream to Androids media player. It seems like Android DRM is delaying / caching in this case. Still not quite clear why (and why not if I connect to my IIS that hosts a file). Also no idea how to workaround this.
输入欢迎!
谢谢! 丹尼尔·
推荐答案
好吧,同时我更接近的解决方案。原来我的问题的根源是Android的DRM! (不,我不是在玩一个受保护的文件。它的标准MP3)。
Ok, meanwhile I got closer to the solution. Turned out the source of my problem is Android DRM! (No, I am not playing a protected file. Its standard mp3).
DRM似乎已经在Android的3.1引入了(我在测试上的Galaxy Tab 10.1)。它工作正常,在模拟器(也许DRM没有实现呢?)
DRM seems to have been introduced in Android 3.1 (I was testing on a Galaxy Tab 10.1). It works fine on the Emulator (maybe DRM is not implemented there?)
任何想法如何,我可以禁用或加速吗?似乎有10秒作为一个定时器某处深在Android DRM IMPL的等待 - 什么,不知道。我的错误日志:
Any idea how I can disable or accelerate this? There seems to be a 10 seconds timer somewhere deep in the Android DRM impl that waits for - whatever, no idea. My error log:
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
这篇关于问:15秒延迟/缓存在Android的媒体播放器播放的流时,的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!