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

时间:2011-12-02 21:25:49

标签: android http-live-streaming android-mediaplayer

我在Honeycomb上使用MediaPlayer并且无法在函数onPrepared()中获得任何HLS(http直播)视频的持续时间。

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

public void onPrepared(MediaPlayer mp) {
    // getduration returns 0
    mediaPlayer.start();
    Log.d(TAG, "duration: " + mediaPlayer.getDuration());
}

然而,视频开始播放。

如果在getDuration()中调用onVideoSizeChanged(),则会返回正确的值

public void onVideoSizeChanged(MediaPlayer mp, int width, int height) {
    // returns the correct value
    Log.d(TAG, "duration: " + mediaPlayer.getDuration());
}

为什么getDuration()可以在onVideoSizeChanged()中使用,但不能在onPrepared()中使用?

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

1 个答案:

答案 0 :(得分:1)

你无能为力。在读取流之前,将不知道流详细信息。根据格式,流前面附近可能有正确的信息,提示或什么也没有。

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

(即使这是一个错误,即使它已修复,也不会将这样的修补程序部署到数百万现有设备,因此您会遇到当前行为。)