Armadilloフォーラム

gstreamerを起動したままの設定変更

sirakawa

2022年5月16日 11時42分

お世話になっております。
gstreamerを起動したまま、任意のタイミングでframerateやサイズを変更したいです。
以下に示すもの以外に、考えられる方法はありますでしょうか?

現在、以下の2つをトライしています。
・output-selector
 →サンプルソース[1]を参考にトライしたが、複数のacmh264encを用意すると"Error: Resource not found."のエラーが出力されたため、断念(acmh264encを使用中に別なgstreamerからacmh264encを使用しようとした時と同じ結果になった)
・Dynamically changing the pipeline
 →サンプルソース[2]を参考にトライ中

[1]:https://github.com/GStreamer/gst-plugins-base/blob/master/tests/icles/o…
[2]:https://gstreamer.freedesktop.org/documentation/application-development…

パイプラインとしては以下のようなイメージです。★部分を任意のタイミングで切り替えたいです。

gst-launch-1.0 -e v4l2src device=/dev/video1 \
! video/x-raw,width=1280,height=960,framerate=30/1 \
! videoconvert \
! videoscale \
! video/x-raw,width=★,height=★ !
! videorate \
! video/x-raw,framerate=★ \
! acmh264enc max-gop-length=★ \
! video/x-h264 \
以下略
コメント

> お世話になっております。
> gstreamerを起動したまま、任意のタイミングでframerateやサイズを変更したいです。
> 以下に示すもの以外に、考えられる方法はありますでしょうか?

いずれも対応できないはずです。

HWコーデック制御の都合上、一旦デバイスのcloseして再度open時に解像度パラメーターの
設定が必要になりますが、デバイスのcloseのためにはgstreamerの仕組みの上ではstreamを
NULL stateにする必要があります。つまり、パイプラインは完全に停止する必要があります。

なので、プログラム的にはNULLにしてから設定を変更して再度パイプラインをPLAYINGに
するしか無いはずです。(gst-launchであれば、プロセスを終了するしかないです)

(gstreamer パイプライン ステートの説明)
https://gstreamer.freedesktop.org/documentation/additional/design/state…