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 \ 以下略
at_ohsawa
2022年5月16日 13時20分
> お世話になっております。
> gstreamerを起動したまま、任意のタイミングでframerateやサイズを変更したいです。
> 以下に示すもの以外に、考えられる方法はありますでしょうか?
いずれも対応できないはずです。
HWコーデック制御の都合上、一旦デバイスのcloseして再度open時に解像度パラメーターの
設定が必要になりますが、デバイスのcloseのためにはgstreamerの仕組みの上ではstreamを
NULL stateにする必要があります。つまり、パイプラインは完全に停止する必要があります。
なので、プログラム的にはNULLにしてから設定を変更して再度パイプラインをPLAYINGに
するしか無いはずです。(gst-launchであれば、プロセスを終了するしかないです)
(gstreamer パイプライン ステートの説明)
https://gstreamer.freedesktop.org/documentation/additional/design/state…