GStreamer udpsr c + rtpjitterbuffer, потоковая передача последовательности файлов MP4 вызывает проблемы с отметкой времени - PullRequest
0 голосов
/ 30 марта 2020

Я передаю список файлов MP4 различной длины один за другим по многоадресной рассылке UDP RTP, хотя поток работает нормально, часто глючит или зависает на несколько секунд. В журнале отладки я вижу много сообщений, таких как:

0:04:38.242157332  2925   0x867200 INFO         rtpjitterbuffer rtpjitterbuffer.c:778:rtp_jitter_buffer_calculate_pts: resync to time 0:04:35.422790090, rtptime 8:20:50.504988888
0:04:47.189221356  2925   0x867260 INFO               GST_EVENT gstevent.c:814:gst_event_new_caps: creating caps event video/x-h264, stream-format=(string)avc, alignment=(string)au, codec_data=(buffer)0164001effe1001f6764001eacd940d82fe788ffc0588058c4000003000400000300c03c58b65801000668ebe08cb22c, level=(string)3, profile=(string)high
0:04:47.202930858  2925   0x867200 WARN         rtpjitterbuffer rtpjitterbuffer.c:570:calculate_skew: delta - skew: 0:00:08.889867842 too big, reset skew

А иногда также много сообщений о decreasing timestamp

Это мой потоковый конвейер:

gst-launch-1.0 filesrc location="$file" ! qtdemux ! h264parse config-interval=-1 ! video/x-h264,stream-type=byte-stream ! rtph264pay pt=96 config-interval=-1 ! udpsink host=238.0.0.1 multicast-iface=eth0 force-ipv4=true port=1234

Принимающая сторона сделана на C ++, поэтому у меня есть немного больше контроля над ней, конвейер для воспроизведения:

udpsrc uri=udp://238.0.0.1:1234 caps="application/x-rtp" ! rtpjitterbuffer ! rtph264depay ! queue !  decodebin ! waylandsink

Я думаю, что проблема заключается в переключении файлов в потоке, это в основном происходит в тот момент, когда предыдущий файл останавливается, и я начинаю потоковую передачу следующего. Есть ли способ, которым я мог бы достичь этого без объединения всех файлов в один? Они играются в динамическом порядке c, поэтому я не могу этого сделать. Могу ли я каким-то образом принудительно перезапустить получающую сторону при запуске нового файла?

Удаление типа элемента rtpjitterbuffer решает эту проблему, но поток прерывистый ...

...