2014-01-15 18 views
6

QMLビデオを停止し、再生が終了したら最後のフレームを表示しようとしています。誰もこれを行う方法を知っていますか? (申し訳ありませんが、これは聞こえるほど些細なことではないようです...)QMLで最後のフレームのビデオを一時停止する方法は?

現時点では、私の問題は、再生が行われた後、単にビデオ要素が目に見えない/隠れてしまうことです。 (onVisibleChangedが呼び出されることはありません。)

私は私のコードでonStatusChangedにハックを使用すると、ビデオが終了した後一瞬消え、その後、動画の終わりを示しています。私がやっている何

は単純です:

Video { 
    anchors.fill: parent 
    fillMode: VideoOutput.PreserveAspectFit; 
    source: "path/to/file" 
    autoPlay: true 

    onStatusChanged: { 
     console.warn("StatusChanged:"+status+"|"+MediaPlayer.Loaded) 
     if (status == MediaPlayer.EndOfMedia) 
     { 
     // seek a bit before the end of the video since the last frames 
     // are the same here, anyway 
      seek(metaData.duration-200) 
      play() 
      pause() 
     } 
    } 
    onVisibleChanged: 
    { 
     console.log(visible) 
    } 
} 

それは私が何かが欠けていている可能性がありますが、私はドキュメントで、このトピックに何かを見つけることができませんでした。また、別のMediaPlayerVideoOutputを使用しても動作は変わりません。

私はWindows上で最新のQt 5.2(msvc2010 + OpenGL-build)を使用しています。

答えて

3

私はまだこれに対するより良い解決策を探しています。私が思いついたことは、動画が1秒以上前に一時停止することです。

MediaPlayer { 
    autoLoad: true 
    id: video 

    onPositionChanged: { 
     if (video.position > 1000 && video.duration - video.position < 1000) { 
      video.pause(); 
     } 
    } 
} 

なぜ1秒ですか?私のマシンでは、最後の約500ms前に一時停止しようとすると、ビデオは完了して実行され、pause()コールを登録しなくても表示されなくなります。したがって、1秒は私にとっては安全な値である。

確かに、ビデオの終わりに何をするかをMediaPlayerに伝えるより明示的な方法があれば、私は好きです。 QtがLinuxやMacで使用しているGStreamerは、ビデオがほぼ終わったときにあなたに通知するので、次に何をするかを決めることができます。ビデオを一時停止するか、シームレスにループします。

3

私はあなたの痛みを共有します(主に同じ問題が発生するOSXとiOSに興味があります)。私が持っている唯一の解決策は、最終的なフレームのpng画像で、各動画(少なくとも動的に配信されるコンテンツではなく「缶詰め」のアプリリソース)をペア設定することです。動画が開始されると、その画像の表示を有効にします(実際には表示されません)。ビデオが突然終了すると、イメージは表示されたままになります。

これはiOSの上で完璧に動作しますが、(?いくつかの)Macであったビデオと画像の間のわずかな明るさのジャンプ(推測:OSXの表示設定画面のキャリブレーションがビデオに影響を及ぼしていないとは何かを?)かもしれ

最後のフレームでフリーズするMediaPlayerまたはVideoOutput要素タイプのオプションは、実際にはるかに簡単です。

考えてみましたが試したことのない可能性は、2つの動画を重ねることです。一番上のものがメインプレーヤーですが、その下のものは、たとえばビデオの最後のミリ秒を探して一時停止します。その後、メインビデオが終了して消えると、そこに表示されるビデオの最終フレームと同じくらい良いことがあります。これは基本的にイメージベースのソリューションと同じですが、ビデオプレーヤーを使用して動的にイメージを作成しています。私はモバイルHWのビデオとQtの包みが気分が悪い(Qt5の初期にはもっと後ろ向きである)ことを発見しました。

+0

これは私たちが使用した回避策です。あなたの答えを受け入れるかどうかは、回避策であり実際の解決策ではないので、私は確信していません。 – anderas

+0

個人的には、本当の解決策が出てくることを希望して私はそれを開いたままにしておきます!私はこの問題を探しているこのページを簡単に見つけました。 Qt Jiraのウィッシュリスト項目を作成しておくと便利な動作が得られる場合もあります。 – timday

関連する問題