パイプラインを に設定する前に両方のキューがリンクされている場合、スクリプトはうまく機能しますが、PLAYING
Gstreamer の動的パイプラインとその実装を理解するのに苦労しています。また、gstreamer 1.0 python のドキュメントやサンプルがないことも役に立ちません。
これは、tee を使用してファイルに記録し、RTMP サーバーにストリーミングする作業スクリプトです。
import gi
import time
from gi.repository import GObject, Gst
gi.require_version('Gst', '1.0')
Gst.init(None)
Gst.debug_set_active(True)
Gst.debug_set_default_threshold(3)
pipeline = Gst.Pipeline()
rpicamsrc = Gst.ElementFactory.make("rpicamsrc", "rpicam")
rpicamsrc.set_property("bitrate", 500000)
rpicaps = Gst.caps_from_string('video/x-h264,width=360,height=240,framerate=10/1')
rCamCapsFilt = Gst.ElementFactory.make("capsfilter", "rCamCapsFilt")
rCamCapsFilt.set_property("caps", rpicaps)
h264parse = Gst.ElementFactory.make("h264parse", "h264")
h264parse2 = Gst.ElementFactory.make("h264parse", "enh2642")
flvmux = Gst.ElementFactory.make("flvmux", "flv")
mp4mux = Gst.ElementFactory.make("mp4mux", "mp4")
filesink = Gst.ElementFactory.make("filesink", "fsink")
filesink.set_property("location", "specific2.mp4")
rtmpsink = Gst.ElementFactory.make("rtmpsink", "rsink")
rtmpsink.set_property("location", "rtmp://<server>/live/test")
tee = Gst.ElementFactory.make("tee", "tee")
queueCloud = Gst.ElementFactory.make("queue", "cloud")
queueFile = Gst.ElementFactory.make("queue", "file")
pipeline.add(tee)
pipeline.add(queueCloud)
pipeline.add(queueFile)
pipeline.add(filesink)
pipeline.add(rtmpsink)
pipeline.add(rpicamsrc)
pipeline.add(rCamCapsFilt)
pipeline.add(h264parse)
pipeline.add(h264parse2)
pipeline.add(flvmux)
pipeline.add(mp4mux)
rpicamsrc.link(rCamCapsFilt)
rCamCapsFilt.link(tee)
queueCloud.link(h264parse)
h264parse.link(flvmux)
flvmux.link(rtmpsink)
queueFile.link(h264parse2)
h264parse2.link(mp4mux)
mp4mux.link(filesink)
tee.link(queueCloud)
tee.link(queueFile)
pipeline.set_state(Gst.State.PLAYING)
time.sleep(5)
#
# pipeline.set_state(Gst.State.NULL)
私がやろうとしていること:
- 最初は、ファイルに記録する 1 つのキュー ( queueFile ) から開始します (常に実行されます)。
- サーバーにストリーミングするキューをティー ( queueCloud ) にオンデマンドで動的に追加および削除する
gstreamer 1.0 と gi python に関するドキュメントはあまりありません。どんな助けも大歓迎です。