Android MediaPlayer:getDuration()在prepare()之后返回0
我正在蜂窝上使用MediaPlayer,无法在函数onPrepared()中获取任何HLS(http直播)视频的持续时间 如果在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());
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毫秒调用一次,会发生什么?我认为这个函数在某个时间点上不会返回零,但它是不正确的。为什么?