Как воспроизводить потоковое аудио с помощью QMediaPlayer?

У меня есть аудиопоток с сервера, с которым я хочу играть QMediaPlayer в моей программе. Все работает, когда я впервые загружаю файл в QBuffer а затем позвоните setMedia а также play метод от игрока. Но если я хочу воспроизводить музыку, пока потоковая передача еще работает, медиаплеер воспроизводит звук только до setMedia метод был вызван, а затем остановился.
Есть ли возможные способы заставить его работать так, как я хочу? Спасибо.

2

Решение

Я не вижу причин, по которым это не сработает, если вы правильно инициализируете плеер.

Поскольку вы не поделились написанным кодом (также, поскольку я не буду доступен до конца дня, чтобы увидеть ваш ответ, если я оставлю комментарий), я оставлю здесь пример кода.
Посмотрите, работает ли приведенный ниже код для вас.

QMediaPlayer* player = new QMediaPlayer(this, QMediaPlayer::StreamPlayback);
player->setMedia(QUrl("http://vpr.streamguys.net/vpr64.mp3"));
player->setVolume(80);
player->play();

Если это так, попробуйте то же самое, изменив ссылку на ваш поток.

РЕДАКТИРОВАТЬ: я предполагаю, что игрок исчерпал буфер, прежде чем вы обновите его. Попробуйте следить за bufferStatus а также QMediaPlayer::MediaStatus,
Я цитирую документация:

bufferStatus : const int

This property holds the percentage of the temporary buffer filled before playback begins or resumes, from (empty) to (full).
When the player object is buffering; this property holds the percentage of the temporary buffer that is filled. The buffer will need to reach 100% filled before playback can start or resume, at which time mediaStatus() will return BufferedMedia or BufferingMedia. If the value is anything lower than 100, mediaStatus() will return StalledMedia.

2

Другие решения

Через QAudioOutput:

    QByteArray* yourSoundData = blah blah...;
QBuffer* buffer = new QBuffer;
buffer->setData(yourSoundData);
buffer->open(QBuffer::ReadOnly);

QAudioFormat format; // According to your sound format (e.g. wav)
format.setSampleRate(22050);
format.setChannelCount(1);
format.setSampleSize(16);
format.setCodec("audio/wav");
format.setByteOrder(QAudioFormat::LittleEndian);
format.setSampleType(QAudioFormat::SignedInt);

QAudioDeviceInfo info(QAudioDeviceInfo::defaultOutputDevice());
if (!info.isFormatSupported(format)) {
qWarning() << "Raw audio format not supported by backend, cannot play audio.";
return;
}

QAudioOutput* audio = new QAudioOutput(format, this);
audio->start(buffer);

Больше информации: http://doc.qt.io/qt-5/qaudiooutput.html

0

По вопросам рекламы [email protected]