Как я могу использовать gstreamer для мультиплексирования видео без перекодирования?

Я пытаюсь использовать gstreamer для демультиплексирования видеопотока h264 и обтекания видеопотока с помощью mp4mux. Следующий пример работает, но проходит дополнительный этап перекодирования существующего видео h264 в h264. (Примечание: это живой поток без конца, через несколько секунд завершите процесс, чтобы увидеть полученный файл).

gst-launch-1.0 souphttpsrc location=http://170.93.143.144:1935/rtplive/8b00ad8b0064001f0053fa36c4235c0a/playlist.m3u8 ! \
    hlsdemux ! \
    decodebin ! \
    x264enc ! \
    queue2 ! \
    mp4mux fragment-duration=10 ! \
    filesink location=/tmp/video.mp4

Ниже приведен модифицированный конвейер, который заменяет decodebin & x264enc на h264parse (это не работает):

gst-launch-1.0 souphttpsrc location=http://170.93.143.144:1935/rtplive/8b00ad8b0064001f0053fa36c4235c0a/playlist.m3u8 ! \
    hlsdemux ! \
    h264parse ! \
    queue2 ! \
    mp4mux fragment-duration=10 ! \
    filesink location=/tmp/video.mp4

При запуске измененного конвейера я получаю следующую ошибку:

Setting pipeline to PAUSED ...
Pipeline is PREROLLING ...
ERROR: from element /GstPipeline:pipeline0/GstHLSDemux:hlsdemux0: GStreamer encountered a general stream error.
Additional debug info:
gsthlsdemux.c(946): _src_chain (): /GstPipeline:pipeline0/GstHLSDemux:hlsdemux0:
stream stopped, reason not-negotiated
ERROR: pipeline doesn't want to preroll.
Setting pipeline to NULL ...
Freeing pipeline ...

1 ответ

Вы пытались использовать GST_DEBUG_DUMP_DOT_DIR="папку, в которой будут находиться файлы точек после запуска конвейера"

такие как: (если вы в Linux)

GST_DEBUG_DUMP_DOT_DIR=$PWD \
gst-launch-1.0 souphttpsrc location=http://170.93.143.144:1935/rtplive/8b00ad8b0064001f0053fa36c4235c0a/playlist.m3u8 ! \
    hlsdemux ! \
    decodebin ! \
    x264enc ! \
    queue2 ! \
    mp4mux fragment-duration=10 ! \
    filesink location=/tmp/video.mp4

и в другой папке

GST_DEBUG_DUMP_DOT_DIR=$PWD \
gst-launch-1.0 souphttpsrc location=http://170.93.143.144:1935/rtplive/8b00ad8b0064001f0053fa36c4235c0a/playlist.m3u8 ! \
   hlsdemux ! \
   h264parse ! \
   queue2 ! \
   mp4mux fragment-duration=10 ! \
   filesink location=/tmp/video.mp4

И сравните оба файла:

Для графического сравнения вы можете перевести точечные файлы в png:

dot -Tpng "file.dot" -o "file_something.png"
Другие вопросы по тегам