Потоковое аудио в QtMediaPlayer по сети - PullRequest
0 голосов
/ 31 октября 2019

У меня есть источник звука в прямом эфире, который я хочу воспроизвести напрямую через QMediaPlayer . Я уже могу получать пакеты от QNetworkReply как QByteArray , который я добавляю к другому QByteArray, который затем я передаю QBuffer . Теперь QBuffer действует какИсточник мультимедиа. Проблема заключается в том, что при установке источника мультимедиа в этот буфер содержимое буфера не загружается проигрывателем автоматически.

QByteArray *bytes = new QByteArray();
QBuffer *buffer = new QBuffer(bytes);
buffer->open(QIODevice::ReadOnly);
QMediaPlayer *player = new QMediaPlayer(0, QMediaPlayer::StreamPlayback);
player->setMedia(QMediaContent(), buffer); //set buffer as source of media

Слот для обновления кадров.

void updateFrame(int frameId, QByteArray frame){
    if(frameId == 1){
        bytes->clear(); //clear current buffer on new feed
        bytes->append(frame, frame.length());
        player->play(); //start playing the stream on first frame
    }else{
        bytes->append(frame, frame.length()); //add all other frames to the bytes array
    }
}

У меня вопрос, как получается, что содержимое буфера обновляется при каждом обновлении кадра, но он воспроизводит только первый кадр и издает сигнал остановки. Я также попытался открыть QBuffer без QByteArray и записать напрямую в него, но все равно он ведет себя так же.

...