Заставить QMediaPlayer точно обновить положение для приложения очистки видео?

Я пишу приложение, которое позволит пользователю просматривать открытое видео. Разрабатывая на Windows 7/8 с Qt 5.3, я использую QMediaPlayer а также QVideoWidget следуя qvideowidget пример проекта. Результат был довольно хорошим, за исключением того, что QVideoWidget Кажется, только для обновления во время простоя. Тем не менее, это хорошее начало и его можно использовать.

Однако, когда я собираюсь на Mac OS 10.10 (снова с Qt 5.3), очистка ведет себя так, как будто в видео был только один кадр в секунду. Когда я перетаскиваю ползунок «Положение», видео переходит от одного кадра к кадру спустя одну секунду, затем одну секунду после этого, хотя я звоню QMediaPlayer::setPosition несколько раз с позициями между этими двумя кадрами.

Проблема может быть воспроизведена с помощью videowidget пример, который поставляется с Qt 5.3 здесь: Qt\Examples\Qt-5.3\multimediawidgets\videowidget, Когда слайдер перетаскивается на компьютере с Windows, QVideoWidget перемещается между кадрами, которые расположены достаточно близко друг к другу. Когда ползунок перетаскивается на Mac (по крайней мере, на моем), QVideoWidget скачки между кадрами, разнесенными примерно на одну секунду. Независимо от того, как долго я жду рендеринга «промежуточного» кадра, этого не произойдет, пока я не нажму кнопку «Play».

Я пробовал звонить QMediaPlayer::play() а также QMediaPlayer::pause() одно за другим, чтобы заставить обновление, но это не похоже на работу—QMediaPlayer работает асинхронно, поэтому обновление не успевает вступить в силу.

Если я проверю значение QMediaPlayer::positionЯ обнаружил, что между этими прыжками ничего не меняется. Похоже, что когда я звоню QMediaPlayer::setPositionНа самом деле это округление позиции с шагом в одну секунду на Mac и более точным шагом на машине с Windows.

В идеале я хотел бы перейти к определенной позиции в видео и визуализировать этот кадр сразу же на QVideoWidget, Есть ли способ заставить QMediaPlayer точно установить положение и обновить связанный QVideoWidget? Есть ли лучший способ реализовать плавную очистку в видео?

Спасибо за вашу помощь!

3

Решение

В случае, если у кого-то еще есть подобная проблема …

Я думаю, что проблема связана с ограничениями в кодеке, используемом QMediaPlayer, так как это, кажется, основное различие между двумя платформами. Вместо того, чтобы решать проблемы с кодеками напрямую, я искал другие варианты.

MLT (http://www.mltframework.org/) казалось многообещающим, но компилировать его очень сложно, и основной автор, похоже, решил предложить поддержку SDK только коммерческим пользователям.

libVLC (https://wiki.videolan.org/LibVLC/) выглядит намного лучше. В частности, я использую vlc-qt (https://github.com/ntadej/vlc-qt). Последний имеет интерфейс, который будет выглядеть довольно привычным для пользователей QMediaPlayer а также QVideoWidget, Это была простая замена в моем собственном приложении, и в результате была значительно более плавная очистка видео как на Windows, так и на Mac.

Надеюсь, это поможет кому-то еще!

0

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


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