MediaPlayer не обновил файл Продолжительность - PullRequest
0 голосов
/ 17 июня 2011

Я открываю соединение для загрузки потока в файл на SD-карте после записи нескольких байтов. Я запускаю MediaPlayer для воспроизведения файла. Моя проблема в том, что MediaPlayer считывает только Duratio, рассчитанное на этапе подготовки

Ответы [ 2 ]

0 голосов
/ 23 июля 2011

Я решил эту проблему, временно открыв тот же файл в новом медиаплеере, получил продолжительность и снова выпустил ее.В целях экономии системных ресурсов это следует делать только периодически, скажем, каждые 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;
}
0 голосов
/ 17 июня 2011

Это правильное поведение.Когда вы используете MediaPlayer для воспроизведения локальных файлов, файл сканируется один раз, когда MediaPlayer инициализируется, и дальнейшее сканирование не запускается.MediaPlayer не знает, что вы добавите больше данных в файл.Одним из решений будет использование MediaPlayer для потоковой передачи файла напрямую по сети.

...