Armadilloフォーラム

gstreamerでの動画/静止画のシームレスな再生方法

minomi-s

2022年8月23日 13時10分

お世話になっております。

掲題の件、gstreamerを用いて複数のコンテンツ(静止画/動画)を連続で再生しようとしています。
駅のサイネージなどのように複数のコンテンツを連続で再生していくようなイメージです。

1つのコンテンツの再生が終了して次のコンテンツを再生するにあたり、画面上一瞬だけブランクが発生してしまうのですが、これをなるべく無くす方法について知りたく、もしご存じの内容などありましたらご教授お願い致します。
※動画の場合は難しいのかもですが、最低限、静止画⇒静止画への切り替えはシームレスにしたいと考えています

なお、動画の再生方法はマニュアルの「9.3.4.1 H.264/AVC動画を再生する」に記載の方法、静止画の再生方法は別スレッドで確認させて頂いた方法(※)で実装しております。
https://armadillo.atmark-techno.com/forum/armadillo/12324

コメント

溝渕です。

> 1つのコンテンツの再生が終了して次のコンテンツを再生するにあたり、画面上一瞬だけブランクが発生してしまうのですが、これをなるべく無くす方法について知りたく、もしご存じの内容などありましたらご教授お願い致します。

gst-launch-1.0を利用するとプロセスの生成/終了を繰り返すことになるので、一瞬ブランクしてしまうと思います。

プログラムを作成して、動画の最後に来たら先頭にseekするようにするとシームレスになると思います。

> ※動画の場合は難しいのかもですが、最低限、静止画⇒静止画への切り替えはシームレスにしたいと考えています

静止画でも同様で、恐らくプログラムの作成が必要になると思います。

gstreamerを利用する必要が無いのであれば、次のようにslideshowを作ることができました。

コンテナは次のように作成しました。
https://manual.atmark-techno.com/armadillo-iot-g4/armadillo-iotg-g4_pro…

次の手順を参考にしました。
https://superuser.com/questions/211561/loop-pictures-from-a-folder-and-…

[armadillo]# apt install eog xorg
[armadillo]# X vt7 -retro &
[armadillo]# ls images/
1.png  2.png  3.png
[armadillo]# DISPLAY=:0 eog --slide-show images/

回答ありがとうございます。

> gst-launch-1.0を利用するとプロセスの生成/終了を繰り返すことになるので、一瞬ブランクしてしまうと思います。
> プログラムを作成して、動画の最後に来たら先頭にseekするようにするとシームレスになると思います。
>
先頭にseekするプログラムのイメージがつかめておらず恐縮なのですが、何か参考となるようなURL/資料等ありますでしょうか?
なお、コンテンツを連続で再生していく機能は現在pythonで作成しております
(python内でgst-launch-1.0をコンテンツごとに繰り返し呼び出す方式です)

溝渕です。

> 先頭にseekするプログラムのイメージがつかめておらず恐縮なのですが、何か参考となるようなURL/資料等ありますでしょうか?

例えばこれは参考になりますか?

https://gist.github.com/tylercubell/725960663424e3520d7b46c22f4f3ecf

"python gstreamer video player loop"
でWEB検索すると出てきました。

> なお、コンテンツを連続で再生していく機能は現在pythonで作成しております
> (python内でgst-launch-1.0をコンテンツごとに繰り返し呼び出す方式です)

これだと先に述べましたように、動画再生プロセスの生成/終了を繰り返すことになるので、終了してから再生するまでの間に、動画を再生していない時間が生じると思います。

なので、動画を再生し続ける為には動画再生プロセスを終了させないという方針で作成すると良いと思います。

溝渕さん
回答ありがとうございます。

> これだと先に述べましたように、動画再生プロセスの生成/終了を繰り返すことになるので、終了してから再生するまでの間に、動画を再生していない時間が生じると思います。
> なので、動画を再生し続ける為には動画再生プロセスを終了させないという方針で作成すると良いと思います。
>
基本的にgstreamerのプロセスを終了させないようにして連続した再生を行う必要があるという事ですね。
頂いたサイトを参考に、方式については自分の方でも調べてみたいと思います。

シームレスという表現とは厳密には違うのですが…1つ思いついたことがあり、もしご存じでしたら確認させてください
静止画に関してweston+gstreamerで画面表示する際に、gstreamerのプロセスを終了しても画面の表示はリセットされない(画像が表示されっぱなしとなる)ような出力設定はできますでしょうか?
※例えばですがフレームバッファへの出力だと、一度出力すると別の出力が実行されるまで画面がそのままになると思います
 そのイメージをwestonでも実行可能かどうかを確認したく

上記と関連して、五月雨での質問となり恐縮ですが…
フレームバッファ(/dev/fb0)への描画の場合、gstreamerでの動画の再生方法(音声あり/音声無し)についてもご存じの内容ありましたら教えていただけますと幸いです