Russian Qt Forum

Qt => Мультимедиа => Тема начата: Гурман от Октябрь 12, 2017, 16:46



Название: Так какой всё-таки mediaStatus() должен быть?
Отправлено: Гурман от Октябрь 12, 2017, 16:46
Проигрываю аудио-файл с помощью QMediaPlayer. Нужно знать, когда оно закончило играть. Ловлю stateChanged(QMediaPlayer::State state). Смотрю состояние плеера и статус медиа.

Код:
qDebug()<<"state changed"<<state<<player->mediaStatus();

В документации Qt про статус медиа написано:

Цитировать
QMediaPlayer::BufferedMedia   6   The player has fully buffered the current media. The player is in the PlayingState or PausedState.
QMediaPlayer::EndOfMedia   7   Playback has reached the end of the current media. The player is in the StoppedState.

То есть, когда трек доиграл, я поймаю StoppedState и EndOfMedia? Ага, щаз... когда трек доиграл, получаю вот это:

Цитировать
state changed QMediaPlayer::StoppedState QMediaPlayer::BufferedMedia

Какого?... Почему не EndOfMedia? И самое главное - как это отличить от случая, когда воспроизведение закончилось принудительно, а не по концу трека?
Кто-нибудь разбирался?


Название: Re: Так какой всё-таки mediaStatus() должен быть?
Отправлено: Гурман от Октябрь 12, 2017, 17:36
Похоже наоборот надо - ловить сигнал mediaStatusChanged(QMediaPlayer::MediaStatus) и в нём проверять состояние плеера. Этот сигнал при окончании трека выдаётся после stateChanged(QMediaPlayer::State). Если медиа статус EndOfMedia и состояние плеера StoppedState, значит трек закончился. В других случаях комбинации сигналов другие. Хрена с два где-нибудь это описано.