Селектор ввода gstreamer 1.0 - PullRequest
0 голосов
/ 22 февраля 2019

Я хочу переключаться между потоком RTSP и тестовым потоком.Я использую селектор ввода и этот конвейер:

input-selector name=selector ! rtph264depay ! h264parse ! matroskamux \
streamable=false min-index-interval=100000 ! \
filesink location=test.mkv videotestsrc ! \
video/x-raw, width=1024, height=768, framerate=30/1, clock-rate=90000 ! \
x264enc ! rtph264pay ! selector.sink_0 rtspsrc name=rtspsrc \
location=rtsp://admin:admin@192.168.88.231:554/h264 retry=100 \
udp-buffer-size=30000000 latency=200 caps="application/x-rtp, \
media=(string)video, clock-rate=(int)90000, encoding-name=(string)H264" !  \
selector.sink_1

Я написал код Python, который переключает источник каждые 5 секунд.Но только тестовый поток записывается в файл.Также я вижу предупреждения в логах

0:00:00.353575129 13560      0x23f5540 WARN                 basesrc gstbasesrc.c:2948:gst_base_src_loop:<udpsrc3> error: Internal data flow error.
0:00:00.353602076 13560      0x23f5540 WARN                 basesrc gstbasesrc.c:2948:gst_base_src_loop:<udpsrc3> error: streaming task paused, reason not-linked (-1)
0:00:02.177975961 13560      0x23f2ed0 WARN                 x264enc :0::<x264enc0> VBV underflow (frame 298, -14405 bits)

0:00:02.338993437 13560      0x23f2ed0 WARN                 x264enc :0::<x264enc0> VBV underflow (frame 328, -4872 bits)

Как это исправить?

Когда я заменяю selector.sink_0 на fakesink, поток RTSP записывается нормально.Видимо проблема вызвана переключением потоков.

...