gst-launch-1.0 - проблема с аудио / видео rtspsrc
Я пытаюсь объединить два потока 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
Если я изменю автозвук на фейковый, видео будет воспроизводиться. Если я удалю приемник видео (не проверял с помощью fakesink), звук воспроизводится. Но если я добавлю оба (как указано выше), видео покажет 1 кадр, а затем зависнет. [не уверен, что это важно, но у меня Windows]
Я действительно подозреваю, что (по какой-то причине) конвейер приостановлен, но я не понимаю, как отладить эту проблему.
Я пробовал с / без rtpjitterbuffer, я пробовал с / без очереди в разных местах. Я пробовал с комбинациями rtp... depay / parse. Хотя я так много пробовал за последние несколько часов (ох), что не уверен, что я что-то пропустил.
Также пробовал с различными параметрами для rtspsrc (синхронизация / и т. Д.).
Но конечный результат почти всегда один и тот же: воспроизведение аудио или видео работает нормально, воспроизведение обоих одновременно (или объединение их в один файл) не удается.
Запись каждого их собственный файл работает отлично, например:
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...
Почему-то я думаю, что это какая-то проблема с синхронизацией, но я не могу понять, как ее решить.
1 ответ
Поскольку этот вопрос задан более года назад, я надеюсь, что кому-то с такой же проблемой все еще нужна помощь (как и я, я потратил много часов, чтобы понять это, и спасибо плакату, который он дает мне подсказки)
Вам нужно отредактировать как это
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 name=mux ^
s_0. ! application/x-rtp,media=video ! rtpjitterbuffer ! decodebin ! videoconvert ! x264enc ! mux. ^
mux. ! filesink location=video.flv