Я пишу видеоплеер с Qt5::QMediaPlayer для случайного воспроизведения некоторых видео в течение случайной продолжительности, как это:
int main(int argc, char *argv[]) {
QApplication a(argc, argv);
QMediaPlaylist* playlist = new QMediaPlaylist(&a);
playlist->addMedia(QUrl::fromLocalFile("./Resources/fractal-files/A-060405V4651.WMV"));
playlist->addMedia(QUrl::fromLocalFile("./Resources/fractal-files/E-102604.WMV"));
playlist->addMedia(QUrl::fromLocalFile("./Resources/fractal-files/C-102304.WMV"));
QMediaPlayer* player = new QMediaPlayer(&a);
player->setPlaylist(playlist);
QVideoWidget* videoWidget = new QVideoWidget;
player->setVideoOutput(videoWidget);
player->play();
videoWidget->show();
QTimer* t = new QTimer;
QObject::connect(t, &QTimer::timeout, [&](){
playlist->setCurrentIndex(playlist->nextIndex());
player->play();
videoWidget->setWindowTitle(playlist->currentMedia().canonicalUrl().fileName());
t->start((qrand()%5 + 5)*1000);
});
t->start((qrand()%5 + 5)*1000);
QTimer* t2 = new QTimer;
QObject::connect(t2, &QTimer::timeout, [&](){
player->setPosition(qrand() % player->duration());
videoWidget->setWindowTitle(playlist->currentMedia().canonicalUrl().fileName());
t2->start((qrand()%2 + 2)*1000);
});
t2->start((qrand()%2 + 2)*1000);
return a.exec();
}
Есть две проблемы:
1. При изменении позиции
player->setPosition(qrand() % player->duration());
есть небольшая задержка (мой клиент может принять это, но лучше плавно)
2. Когда источник видео изменился с помощью:
playlist->setCurrentIndex(playlist->nextIndex());
player->play();
есть черный экран небольшой продолжительности, который не нужен клиенту. Он хочет, чтобы эффект был как минимум таким же, как при смене позиции:
player->setPosition(qrand() % player->duration());
Можем ли мы убрать этот черный экран при смене источника видео с помощью Qt5 в Windows? Или мы можем сделать это с другими библиотеками/фреймворками (воспроизвести список видео без пробелов в черном экране при смене источника видео)? (На MacOs переключение плавное)
Большое спасибо!