GStreamer - RTSP 转 HLS / mp4

4

我想将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分钟而不是“target-duration”的15秒)。
如果我保存为mpegtsmux / ts文件-对于相同的命令一切都正常。
出了什么问题?提前致谢。
提示:Original Answer的意思是“最初的回答”。
2个回答

5

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”文件组成的播放列表。而我在一个主题问题中提供的命令只会将视频记录在一个文件中,虽然没有警告/错误...因此我继续寻找解决方案... - undefined
我不知道GStreamer是否支持Apple最新HLS规范的MP4功能。无论如何,您需要使用mp4mux而不是matroskamux。再说一遍 - 我认为此规范使用分段的MP4文件。因此这些文件本身就包含片段。所以我看不出额外播放列表的意义。或者这种模式有什么不同于MPEG-DASH的地方。 - undefined

1
你必须使用gstreamer吗?否则我相信这个ffmpeg命令可以实现你想要的。
ffmpeg -i rtsp://... -c copy -hls_list_size 10 -hls_segment_type fmp4 output.m3u8

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接