3

ユーザーが開いているビデオをスクラブできるようにするアプリケーションを作成しています。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か? ビデオでスムーズなスクラブを実装するより良い方法はありますか?

ご協力いただきありがとうございます!

4

1 に答える 1

1

他の誰かが同様の問題を抱えている場合...

私の推測では、この問題は で使用されるコーデックの制限に起因するとQMediaPlayer考えられます。これが 2 つのプラットフォームの主な違いであると思われるからです。コーデックの問題に直接対処するのではなく、他のオプションを探しました。

MLT( http://www.mltframework.org/ ) は有望に思えましたが、コンパイルするのは大きな苦痛であり、主要な作成者は商用ユーザーのみに SDK サポートを提供することに決めたようです。

libVLC( https://wiki.videolan.org/LibVLC/ ) の方がはるかに見栄えがします。特に、私はvlc-qt( https://github.com/ntadej/vlc-qt ) を使用しています。後者には、 および のユーザーにとって非常になじみのあるインターフェイスがありQMediaPlayerますQVideoWidget。私自身のアプリケーションでは簡単に置き換えることができ、その結果、Windows と Mac の両方でビデオ スクラビングがはるかにスムーズになりました。

これが他の誰かに役立つことを願っています!

于 2014-11-25T23:23:20.983 に答える