Как я могу использовать 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"