После QMediaPlayer поиск /setPosition больше не обновляет экран для QGraphicsVideoItem

Я получил пример QT5.6 "Видеоплеер". Работает с локальными файлами. Я изменяю функцию "Открыть файл", чтобы использовать интернет-URL вместо локального файла. На самом деле я использую URL YouTube. Как это:

void VideoPlayer::openFile()
{
//QString fileName = QFileDialog::getOpenFileName(this, tr("Open Movie"),QDir::homePath());
QString fileName = "https://r4---sn-n8v7znls.googlevideo.com/videoplayback?initcwndbps=1427500&dur=3369.354&sver=3&sparams=dur%2Cid%2Cinitcwndbps%2Cip%2Cipbits%2Citag%2Clmt%2Cmime%2Cmm%2Cmn%2Cms%2Cmv%2Cpl%2Cratebypass%2Crequiressl%2Csource%2Cupn%2Cexpire&lmt=1416581653227418&requiressl=yes&ip=80.68.2.81&mime=video%2Fmp4&source=youtube&mm=31&mn=sn-n8v7znls&pl=23&id=o-AODorl7SvqZSnDSvxck5hqt4t3DHXmuquI-oLniRvtIu&ms=au&mt=1464897333&mv=m&expire=1464919182&upn=vf3wyJFr-XM&key=yt6&ipbits=0&ratebypass=yes&itag=18&fexp=9412859%2C9414702%2C9416126%2C9416891%2C9419451%2C9422596%2C9423965%2C9425351%2C9426985%2C9428398%2C9431012%2C9432822%2C9433096%2C9433221%2C9433946%2C9434790%2C9435527%2C9435876%2C9436917%2C9437067%2C9437180%2C9437553&signature=A22462E28C81BAFEA1D411B53F4AA7624179608D.BB0B47C09F09A93C3751D49EEE61AF6059A635FB";
if (!fileName.isEmpty()) {
    mediaPlayer.setMedia(QUrl(fileName));
    playButton->setEnabled(true);
    mediaPlayer.play();
    qDebug() << "playback started!!";
}

}

Приложение запускается нормально и может воспроизводить видео, НО! Когда я использую длинное видео, я действительно ищу положение вперед и после этого больше нет обновлений экрана для видео. Vedio кадры не отображаются.

Этот пример QT демонстрирует QGraphicsVideoItem на QGraphicsScene - мне нужны оба в моем приложении. Но что делать с поиском позиции? Он не работает должным образом для http URL-видео! Кроме того, mediaPlayer::isSeekable() возвращает true. После поиска позиции игрок ведет себя так, как будто он действительно играет с новой точки позиции, потому что сигналы уведомления, такие как positionChanged(), вызываются периодически. QMediaStatus - это QMediaPlayer::BufferedMedia. Но никаких обновлений экрана!

У меня есть обработчик позиции:

void VideoPlayer::positionChanged(qint64 position)
{
positionSlider->setValue(position);
qDebug()
        << " pos " << position
        << " sta " << mediaPlayer.mediaStatus();
}

После того, как пользователь ищет позицию, я вижу выходные данные отладки:

pos  2363199  sta  QMediaPlayer::BufferedMedia
pos  2364049  sta  QMediaPlayer::BufferedMedia
pos  2364049  sta  QMediaPlayer::BufferedMedia
pos  2365050  sta  QMediaPlayer::BufferedMedia
pos  2365983  sta  QMediaPlayer::BufferedMedia
pos  2365983  sta  QMediaPlayer::BufferedMedia

Кажется, это играет? но нет видео выхода, нет аудио выхода.. ничего. Как обрабатывать поиск /setPosition для QMediaPlayer в случае интернет-источника mp4 URL?

0 ответов

Другие вопросы по тегам