【问题标题】:MediaPlayer didnt update file DurationMediaPlayer 没有更新文件
【发布时间】:2011-09-17 05:00:45
【问题描述】:

在写入一些字节后,我打开一个连接以将流下载到 sdcard 上的文件我启动 MediaPlayer 来播放文件 我的问题是 MediaPlayer 只读取了在阶段计算的持续时间 准备

【问题讨论】:

  • 你能添加一些代码来告诉我们它是如何工作的吗? MediaPlayer 有时是一个棘手的野兽,查看实际代码通常会有所帮助。谢谢!

标签: android stream media-player radio duration


【解决方案1】:

这是正确的行为。使用 MediaPlayer 播放本地文件时,MediaPlayer 初始化时会扫描一次文件,不会再开始扫描。 MediaPlayer 不知道您会将更多数据附加到文件中。一种解决方案是使用 MediaPlayer 直接通过网络流式传输文件。

【讨论】:

  • 感谢您的回答我将流下载到文件以便稍后记录其中的一部分。有没有办法让 MediaPlayer 更新文件的新持续时间? Iphone 播放器每秒更新时长
【解决方案2】:

我已经通过在新媒体播放器中临时打开同一个文件、获取持续时间并再次释放它来解决这个问题。为了节省系统资源,只能定期执行此操作,例如每 5 秒一次,并且仅在文件实际发生更改时执行。

public boolean fileSizeHasChanged() {
    long currentFileSize = new File(mCurrentMediaFile).length();
    if (currentFileSize == mLastFileSize)
        return false;
    mLastFileSize = currentFileSize;
    return true;
}

public int getDuration() {
    long currentDurationCheck = System.currentTimeMillis();
    if (currentDurationCheck - mLastDurationCheck < 5000)
        return mDuration;
    mLastDurationCheck = currentDurationCheck;

    if (!fileSizeHasChanged())
        return mDuration;

    // mp is the main media player actual playing, mp2 is the auxillary one
    MediaPlayer mp2 = new MediaPlayer();
    try {
        mp2.setDataSource(mCurrentMediaFile);
        mp2.prepare();
        mDuration = mp2.getDuration();
        mp2.release();
    } catch (Exception e) {
        e.printStackTrace();
    }
    return mDuration;
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-11
    • 2011-11-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多