我在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()中返回正确的值。修改后的问题反映了这一点。
答案 0 :(得分:1)
你无能为力。在读取流之前,将不知道流详细信息。根据格式,流前面附近可能有正确的信息,提示或什么也没有。
由于视频大小更改侦听器始终被调用,因此您必须重新构建代码以获取持续时间(如果可用)。
(即使这是一个错误,即使它已修复,也不会将这样的修补程序部署到数百万现有设备,因此您会遇到当前行为。)