【问题标题】:Android MediaPlayer: getDuration() returns 0 after prepare()Android MediaPlayer:getDuration() 在 prepare() 之后返回 0
【发布时间】:2012-02-06 13:03:25
【问题描述】:

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

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

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

但是,视频开始播放。

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

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

为什么getDuration()onVideoSizeChanged() 中有效,而在onPrepared() 中无效?

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

【问题讨论】:

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


    【解决方案1】:

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

    由于总是调用视频大小更改侦听器,因此您必须重组代码以获取持续时间(如果可用)。

    (即使这是一个错误并且即使它已被修复,这样的修复也不会部署到数百万现有设备上,因此您会被当前行为所困扰。)

    【讨论】:

    • 感谢您的帮助!
    • 如果 mp.getDuration() 在线程中调用,该线程每 100 毫秒调用一次,会发生什么?我认为这个函数返回不为零,但它不正确。为什么?
    猜你喜欢
    • 1970-01-01
    • 2014-08-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-15
    • 1970-01-01
    相关资源
    最近更新 更多