GStreamer — RTSP для HLS / mp4

#gstreamer #mp4 #rtsp #http-live-streaming

#gstreamer #МР4 #rtsp #http-прямая трансляция

Вопрос:

Я пытаюсь сохранить поток RTSP h.264 в файлы HLS mp4:

 gst-launch-1.0 rtspsrc location="rtsp://....." ! rtph264depay ! h264parse ! matroskamux ! hlssink max-files=0 playlist-length=0 location="/home/user/chd.mp4" playlist-location="/home/user/list.m3u8" target-duration=15
  

В результате — имеется только один файл ch00000.mp4, который включает в себя весь видеопоток (3 минуты вместо 15 секунд в «target-duration»).

Если я сохраню файлы в формате mpegtsmux / ts — все в порядке для той же команды.

Что не так? Заранее благодарю.

Ответ №1:

HLS состоит из сегментов транспортного потока MPEG. Итак, во-первых: matroskamux здесь не имеет смысла. Вместо этого вам понадобится mpegtsmux . Чтобы указать, что это на самом деле, вы обычно называете файлы с .ts расширением. Это все еще может работать для GStreamer, поскольку это всего лишь имя файла — проигрыватели могут отказаться от его воспроизведения, поскольку ожидается другой формат файла.

Например.

 gst-launch-1.0 rtspsrc location="rtsp://....." ! rtph264depay ! h264parse ! 
mpegtsmux ! hlssink max-files=0 playlist-length=0 location="/home/user/chd.ts" 
playlist-location="/home/user/list.m3u8" target-duration=15
  

Комментарии:

1. Спасибо за ответ! Что касается моего вопроса, нет проблем с созданием списка воспроизведения hls из файлов «.ts». Основная цель — записать список воспроизведения файлов «.mp4». И команда, которую я дал в вопросе темы, записывает видео в ОДИН файл, хотя предупреждений / ошибок нет… Поэтому я продолжаю искать решение..

2. Я не знаю, поддерживает ли GStreamer функцию MP4 в последней спецификации HLS от Apple. В любом случае вам нужно будет использовать mp4mux вместо matroskamux . Опять же, я думаю, что в этой спецификации используются фрагментированные файлы MP4. Итак, в этих файлах сами по себе есть фрагменты. Так что я не вижу смысла в дополнительном плейлисте. Или чем этот режим вообще отличается от MPEG-DASH.

Ответ №2:

Обязательно ли использовать gstreamer? В противном случае, я полагаю, что эта команда ffmpeg выполняет то, что вы хотите.

 ffmpeg -i rtsp://... -c copy -hls_list_size 10 -hls_segment_type fmp4 output.m3u8
  

Комментарии:

1. Спасибо за ответ. Я знаю, что ffmpeg может решить эту задачу просто. Но меня интересует возможность получения mp4-фрагментов из gstreamer. И, как я понимаю, это невозможно…