Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/205.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android MediaPlayer:getDuration()在prepare()之后返回0_Android_Http Live Streaming_Android Mediaplayer - Fatal编程技术网

Android MediaPlayer:getDuration()在prepare()之后返回0

Android MediaPlayer:getDuration()在prepare()之后返回0,android,http-live-streaming,android-mediaplayer,Android,Http Live Streaming,Android Mediaplayer,我正在蜂窝上使用MediaPlayer,无法在函数onPrepared()中获取任何HLS(http直播)视频的持续时间 如果在prepare()之后调用getDuration(),则返回0: public void onPrepared(MediaPlayer mp) { // getduration returns 0 mediaPlayer.start(); Log.d(TAG, "duration: " + mediaPlayer.getDuration());

我正在蜂窝上使用MediaPlayer,无法在函数onPrepared()中获取任何HLS(http直播)视频的持续时间

如果在
prepare()
之后调用
getDuration()
,则返回0:

public void onPrepared(MediaPlayer mp) {
    // getduration returns 0
    mediaPlayer.start();
    Log.d(TAG, "duration: " + mediaPlayer.getDuration());
}
然而,视频开始播放

如果在
onvideosizechange()
中调用
getDuration()
,它将返回正确的值

public void onVideoSizeChanged(MediaPlayer mp, int width, int height) {
    // returns the correct value
    Log.d(TAG, "duration: " + mediaPlayer.getDuration());
}
为什么
getDuration()
onvideosizechange()
中工作,而在
onPrepared()中不工作


编辑:起初我认为getDuration()根本不起作用,但发现它在onVideoSizeChanged()中返回了正确的值。修改问题以反映这一点。

对此您无能为力。在读取流之前,不会知道流的详细信息。根据格式的不同,流前面可能有正确的信息、提示或什么都没有

由于始终调用视频大小更改侦听器,因此必须重新构造代码以获得持续时间(如果可用)


(即使这是一个bug,即使它已修复,这样的修复程序也不会部署到数百万现有设备上,因此您将无法适应当前的行为。)

感谢您的有益解释!如果在一个线程中调用mp.getDuration(),这个线程每100毫秒调用一次,会发生什么?我认为这个函数在某个时间点上不会返回零,但它是不正确的。为什么?