video-streaming - 使用 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)工作正常。
解决方案
推荐阅读
- mongodb - 如何搜索mongodb集合映射JSON
- asp.net - Azure Functions 是否启动可使用 OpenTelemetry .NET 检测的活动?
- javascript - 切换i18n语言的按钮
- properties - 如何让 log4j.properties 读取环境变量
- database - 如何拆分多对多表实现松耦合微服务
- css - 在材质ui中单击时如何更改iconbutton的背景颜色
- python - 在python中加载Excel仪表板不成功
- python - 我的 Instagram 机器人不喜欢任何帖子并以 KeyError: 0 结束会话
- jmeter - 在jmeter中处理相关性的困难
- r - 使用 data.table 计算 R 中项目的顺序