ユーザーが開いているビデオをスクラブできるようにするアプリケーションを作成しています。Qt 5.3 を使用して Windows 7/8 で開発し、サンプル プロジェクトを使用QMediaPlayerしてQVideoWidgetフォローしてきました。がアイドル時間中にのみ更新されるように見えるqvideowidgetことを除けば、結果はかなり良好です。QVideoWidgetそれでも、それは良いスタートであり、使用可能です.
ただし、Mac OS 10.10 (Qt 5.3 を使用) でビルドすると、スクラブは、ビデオに 1 秒あたり 1 フレームしかないかのように動作します。「位置」スライダーをドラッグすると、ビデオは 1 つのフレームから 1 秒後のフレームにジャンプし、その後 1 秒後にジャンプしますが、QMediaPlayer::setPositionこれらの 2 つのフレーム間の位置で何度か呼び出しています。
videowidgetこの問題は、Qt 5.3 に同梱されている例を使用して再現できQt\Examples\Qt-5.3\multimediawidgets\videowidgetます: スライダーが Windows マシンでドラッグされると、QVideoWidgetかなり接近したフレーム間で が移動します。スライダーが Mac (少なくとも私の場合) でドラッグされると、QVideoWidgetフレーム間のジャンプは約 1 秒間隔で行われます。「中間」フレームがレンダリングされるのをどれだけ待っても、「再生」ボタンを押さない限りレンダリングされません。
次々と呼び出して更新を強制しようとQMediaPlayer::play()しましたが、これは機能していないようです-非同期で機能するため、更新が有効になる時間がありません.QMediaPlayer::pause()QMediaPlayer
の値を確認するとQMediaPlayer::position、これらのジャンプ間で実際には変化しないことがわかります。を呼び出すとQMediaPlayer::setPosition、実際には位置が Mac では 1 秒単位で丸められ、Windows マシンではさらに細かい単位で丸められているようです。
理想的には、ビデオの特定の位置にジャンプして、そのフレームをすぐにレンダリングしたいと考えていQVideoWidgetます。強制的QMediaPlayerに位置を正確に設定し、関連するを更新する方法はありますQVideoWidgetか? ビデオでスムーズなスクラブを実装するより良い方法はありますか?
ご協力いただきありがとうございます!