#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. И, как я понимаю, это невозможно…