Android MediaPlayer перестает работать через некоторое время - PullRequest
1 голос
/ 02 августа 2020

Я проигрываю звук с помощью этого метода:

public async Task<bool> PlaySound(string fileName)
{
    bool done = false;

    Stopwatch sw = new Stopwatch();

    MediaPlayer mp = new MediaPlayer();


    sw.Start();

    var fd = Assets.OpenFd(fileName);

    mp.Prepared += (sender, e) =>
    {
        mp.Start();
    };

    mp.Error += (sender, e) =>
    {
        done = true;
    };

    mp.Completion += (sender, e) =>
    {
        done = true;
    };


    mp.SetDataSource(fd.FileDescriptor, fd.StartOffset, fd.DeclaredLength);

    mp.Prepare();

    while (done == false && sw.ElapsedMilliseconds < 10000)
        await Task.Delay(100);

    return true;
}

private async void BtnSave_Click(object sender, EventArgs e)
{
    if (recorder.recording == true)
    {
        await PlaySound("saving_video.mp3");
        recorder.SavePerm();
    }
    else
        await PlaySound("the_camera_is_not_currently_recording.mp3");
}

У меня также есть экземпляр SpeechRecognizer запущен и MediaRecorder для записи с камеры.

Через некоторое время отдавая ту же голосовую команду распознавателю речи.

Каждый раз, когда он начинает воспроизводить звук, создавая новый экземпляр MediaPlayer с

MediaPlayer mp = new MediaPlayer();

, я получаю следующее java ошибка в журнале отладки:

08-01 22:38:42.151 E/ExtMediaPlayer-JNI(22934): env->IsInstanceOf fails
08-01 22:38:42.151 E/MediaPlayer-JNI(22934): JNIMediaPlayerFactory: bIsQCMediaPlayerPresent 0
08-01 22:38:42.151 E/ExtMediaPlayer-JNI(22934): env->IsInstanceOf fails
08-01 22:38:42.151 E/MediaPlayer-JNI(22934): JNIMediaPlayerFactory: bIsQCMediaPlayerPresent 0

Каждый раз, когда он пытается воспроизвести звук.

Исключение не генерируется, и программа продолжает выполняться, но звук не воспроизводится снова до тех пор, пока служба перезапущен.

Как решить эту проблему?

...