首页 > 解决方案 > 使用 GStreamer 的 RTSP 到 HLS

问题描述

我正在尝试使用 GStreamer 捕获 RTSP (H264 / AAC) 流并将其保存到 HLS。运行的命令是:

gst-launch-1.0 -v -e rtspsrc protocols=tcp \
    location=rtsp://${AXIS_CAMERA_ADDR}/axis-media/media.amp \
    ! queue ! rtph264depay ! h264parse ! mpegtsmux \
    ! hlssink location="%06d.ts" target-duration=5

乍一看一切都很好:生成了 *.ts 文件和播放列表。但是 *.ts 无效 - 没有播放器可以播放它们(VLC、Safari、MPV)。有趣的是,第一个 000000.ts 文件是可以的。

我还尝试使用 FFMPEG 执行相同的工作:

ffmpeg -rtsp_flags prefer_tcp \
    -i rtsp://${AXIS_CAMERA_ADDR}/axis-media/media.amp \
    -acodec copy -vcodec copy -f ssegment \
    -segment_list ffmpeg.m3u8 \
    -segment_list_flags +live \
    -segment_time 5 \
    ffmpeg%06d.ts

它按预期工作。

我的 GStreamer 命令有什么问题?我还注意到 GStreamer 和 FFMPEG 产生不同的 *.ts 文件头。

GStreamer TS 标头:4740 003a a600 ffff ffff ffff ffff ffff ffff ffff ffff ...

FFMPEG TS 标头:4740 1110 0042 f03b 0001 c100 00ff 01ff 0001 fc80 2a48 2801 0646 466d 7065 671f 5365 7373 696f 6e20 7374 7265 616d 6564 2077 6974 6820 4753 7472 6561 6d65 7251 f383 85ff ffff ffff ffff ffff ffff ffff ffff ffff ffff ffff

看起来 FFMPEG 会生成包含更多信息的标头。

顺便说一句,使用 GStreamer 从 RTSP 保存到 MKV(matroskamux)工作正常。

标签: video-streaminggstreamerrtsphttp-live-streaming

解决方案


推荐阅读