Генерация MP4 из HLS в gstreamer - PullRequest
0 голосов
/ 05 июля 2018

Я пытаюсь сгенерировать MP4 из потоков HLS с тегами разрыва. Поскольку видео из одного источника, FPS и WXH одинаковы.

Я протестировал с помощью следующего конвейера, чтобы демультиплексировать и воспроизвести его, и он отлично работает

gst-launch-1.0 -v souphttpsrc location=<HLS_URL> ! hlsdemux ! decodebin name=decoder \
! queue ! autovideosink decoder. ! queue ! autoaudiosink

К этому я добавил кодер x264 и кодировщик avenc_aac, чтобы сохранить его в файл, и он продолжает сбой "gstadaptivedemux.c(2651): _src_chain (): /GstPipeline:pipeline0/GstHLSDemux:hlsdemux0"

Неисправный трубопровод

gst-launch-1.0 -v  mp4mux name=mux faststart=true presentation-time=true ! filesink location=dipoza.mp4 \
souphttpsrc location=<HLS_URL> ! hlsdemux ! decodebin name=decoder ! queue name=q1 ! \
 videoconvert ! queue name=q2 ! x264enc name=encoder ! mux.  decoder. \
 ! queue name=q3 ! audioconvert ! queue name=q4 ! avenc_aac ! mux. 

Я действительно ценю любую помощь в этом.

1 Ответ

0 голосов
/ 10 июля 2018

После долгих отладок я обнаружил проблему с моим конвейером. Большое спасибо @FlorianZwoch за просьбу перейти на кодировщик voaacenc.

voaacenc по умолчанию не устанавливается в gst-plugins-bad для mac. Я так должен был использовать

brew reinstall gst-plugins-bad --with-libvo-aacenc

Следующий конвейер хорошо работал с моим приложением.

gst-launch-1.0 --gst-debug=3 mp4mux name=mux ! \
 filesink location=xxxx.mp4 souphttpsrc location=<hls url> ! decodebin name=decode  ! \
 videoconvert ! videorate ! video/x-raw, framerate=50/1 ! queue ! x264enc ! mux. decode. ! \
 audioconvert ! voaacenc ! mux.

Кроме того, в моих сегментах потокового видео HLS некоторые имели скорость 50 FPS, а некоторые - 59,97 FPS. Поэтому я использовал значение видео по умолчанию 50. Это может потребоваться изменить в зависимости от ваших сегментов

Для тех, кому нужен тот же код C ++, пожалуйста, закажите мою github страницу

...