Как демультиплексировать аудио и видео из rtspsrc, а затем сохранить в файл с помощью Matroska MUX?
Я работал над приложением, в котором я использую rtspsrc для сбора аудио и видео с одной сетевой камеры на другую. Однако я не могу смотреть поток с камеры и, следовательно, не могу проверить, что поток работает, как предполагалось. Чтобы убедиться в правильности потока, я хочу записать его на SD-карту, а затем воспроизвести файл на компьютере. Проблема заключается в том, что я хочу, чтобы камера выполняла как можно больше операций синтаксического анализа, декодирования и удаления данных, поскольку это является целью приложения.
Таким образом, я должен разделить аудио- и видеопотоки демультиплексором, выполнить синтаксический анализ, декодирование и т. Д., А затем преобразовать их обратно в файл matroska.
Видеодекодер был опущен, поскольку он еще не сделан для этой камеры.
Демукс в прямом эфире воспроизведения (работает)
gst-launch-0.10 -v rtspsrc location="rtsp://host:pass@192.168.0.91/XXX/XXXX?resolution=1280x720&audio=1&audiocodec=g711&audiosamplerate=8000&audiobitrate=64000" latency=0 name=d d. ! rtppcmudepay ! mulawdec ! audioresample ! audioconvert ! autoaudiosink d. ! rtph264depay ! ffdec_h264 ! queue ! ffmpegcolorspace ! autovideosink
Несколько RTSPSRC в Matroska (работает)
gst-launch-1.0 -v rtspsrc location="rtsp://host:pass@192.168.0.91/XXX/XXXX?audio=1&audiocodec=g711&audiosamplerate=8000&audiobitrate=64000" latency=0 ! rtppcmudepay ! mulawdec ! audioresample ! audioconvert ! queue ! matroskamux name=mux ! filesink location=/var/spool/storage/SD_DISK/testmovie.mkv rtspsrc location="rtsp://root:pass@192.168.0.91/axis-media/media.amp?resolution=1280x720" latency=0 ! rtph264depay ! h264parse ! mux.
Одиночный rtspsrc для matroska (не удается)
gst-launch-1.0 -v rtspsrc location="rtsp://host:pass@192.168.0.91/XXX/XXXX?resolution=1280x720&audio=1&audiocodec=g711&audiosamplerate=8000&audiobitrate=64000" latency=0 name=d d. ! queue ! rtppcmudepay ! mulawdec ! audioresample ! audioconvert ! queue ! matroskamux name=mux d. ! queue ! rtph264depay ! h264parse ! queue ! mux. ! filesink location=/var/spool/storage/SD_DISK/testmoviesinglertsp.mkv
Последний пример завершается с сообщением об ошибке
WARNING: erroneous pipeline: link without source element
Я неправильно понял использование matroska mux и почему 2 приведенных выше примера работают, но не последний?
1 ответ
Проблема здесь:
queue ! mux. ! filesink
Вам нужно сделать
queue ! mux. mux. ! filesink
Мультиплексор. означает, что gst-launch должен автоматически выбирать пэд из mux. и связать это. Вы также можете указать имя вручную, например, mux.src. Таким образом, синтаксически вам не хватает другого элемента / панели там, чтобы связать с другим элементом.