gst-launch-1.0 - rtspsr c аудио / видео проблема - PullRequest
1 голос
/ 30 апреля 2020

Я пытаюсь объединить два потока RTSP, используя gst-launch-1.0, но я уже застрял при попытке записать / воспроизвести один поток RTSP. Поток содержит как аудио, так и видео.

Используемая мной командная строка:

gst-launch-1.0 ^
               rtspsrc location=<location-omitted> protocols=GST_RTSP_LOWER_TRANS_TCP latency=5000 name=s_0 ^
               s_0. ! application/x-rtp,media=audio ! rtpjitterbuffer ! decodebin ! audioconvert ! autoaudiosink ^
               s_0. ! application/x-rtp,media=video ! rtpjitterbuffer ! decodebin ! videoconvert ! autovideosink 

Если я переключу autoaudiosink на fakesink, видео будет воспроизведено. Если я уберу сток видео (не проверял с помощью fakesink), звук воспроизводится. Но если я добавлю оба (как выше), видео показывает 1 кадр, а затем зависает. [не уверен, что это важно, но я в Windows]

Я действительно подозреваю, что (по какой-то причине) конвейер переходит в режим паузы, но я не знаю, как отладить эту проблему.

Я пробовал с / без rtpjitterbuffer, я пробовал с / без очередей в разных местах. Я пробовал с комбинациями rtp ... depay / parse. Хотя в последние несколько часов я так много пробовал (ооо), что не уверен, что что-то упустил.

Также пробовал с различными опциями для rtspsr c (sync / et c) .

Но конечный результат почти всегда один и тот же, воспроизведение аудио или видео работает нормально, воспроизведение обоих одновременно (или слияние их в один файл) не удается.

Запись каждого в свой собственный файл работает нормально, например:

gst-launch-1.0 ^
               rtspsrc location=<location-omitted> protocols=GST_RTSP_LOWER_TRANS_TCP latency=5000 name=s_0 ^
               s_0. ! application/x-rtp,media=audio ! rtpjitterbuffer ! decodebin ! audioconvert ! avenc_aac ! flvmux ! filesink location=audio.flv ^
               s_0. ! application/x-rtp,media=video ! rtpjitterbuffer ! decodebin ! videoconvert ! x264enc ! flvmux ! filesink location=video.flv

Если я объединю вышеперечисленное в один файл, то же самое происходит, что и при попытке воспроизведения файл (используя авто-приемник), выходной файл остается в 0 байт.

Вывод gst-launch-1.0 при попытке воспроизведения такой же, как и при записи в два файла:

Setting pipeline to PAUSED ...
Pipeline is live and does not need PREROLL ...
Progress: (open) Opening Stream
Progress: (connect) Connecting to <location-omitted>
Progress: (open) Retrieving server options
Progress: (open) Retrieving media info
Progress: (request) SETUP stream 0
Progress: (request) SETUP stream 1
Progress: (open) Opened Stream
Setting pipeline to PLAYING ...
New clock: GstSystemClock
Progress: (request) Sending PLAY request
Progress: (request) Sending PLAY request
Progress: (request) Sent PLAY request
Redistribute latency...
Redistribute latency...

Каким-то образом я думаю, что это какой-то тип синтаксиса c, но я не могу понять, как его решить.

...