GStreamer - RTSP 到 HLS / mp4

Posted

技术标签:

【中文标题】GStreamer - RTSP 到 HLS / mp4【英文标题】:GStreamer - RTSP to HLS / mp4 【发布时间】:2019-03-14 13:07:08 【问题描述】:

我尝试将 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/ch%05d.mp4" playlist-location="/home/user/list.m3u8" target-duration=15

因此,只有一个文件 ch00000.mp4,其中包含整个视频流(“目标持续时间”中的 3 分钟而不是 15 秒)。

如果我保存到 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/ch%05d.ts" \
playlist-location="/home/user/list.m3u8" target-duration=15

【讨论】:

感谢您的回复!对于我的问题,制作“.ts”文件的 hls 播放列表没有问题。主要目标是录制“.mp4”文件的播放列表。我在一个主题问题中给出的命令在一个文件中记录了一个视频,虽然没有警告/错误......因此我继续寻找解决方案.. 我不知道GStreamer是否支持Apple最新HLS规范的MP4功能。无论哪种方式,您都需要使用mp4mux 而不是matroskamux。再说一遍——我认为这个规范使用了碎片化的 MP4 文件。所以这些文件本身就有碎片。所以我没有看到额外播放列表的意义。或者是什么让这种模式与 MPEG-DASH 完全不同。【参考方案2】:

你必须使用 gstreamer 吗?否则我相信这个 ffmpeg 命令会做你想要的。

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

【讨论】:

感谢您的回复。我知道 ffmpeg 可以简单地解决这个任务。但我对从 gstreamer 获取 mp4 块的可能性很感兴趣。据我了解,它不能...

以上是关于GStreamer - RTSP 到 HLS / mp4的主要内容,如果未能解决你的问题,请参考以下文章

直播 - HLS + RTSP 使用 Video.js (Wowza 服务器)

带有 Gstreamer 流的 OpenCV 具有延迟、缓慢和伪影

如何使用 OpenCV Python 和 GStreamer 后端创建 x264 RTSP 服务器

gstreamer 接收rtsp存储为h264

将 opencv 帧写入 gstreamer rtsp 服务器管道

rtmp/rtsp/hls公网测试地址