如何用GStreamer将MJPEG格式RTSP流分割为分段MP4文件?
MJPEG格式RTSP流分段保存的GStreamer实现方案
核心gst-launch命令
直接使用以下命令即可实现和你FFmpeg命令等效的分段保存功能(按600秒分割):
gst-launch-1.0 rtspsrc location=rtsp://10.42.0.1:8554/test rtsp-transport=tcp ! rtpjpegdepay ! jpegparse ! splitmuxsink location=/home/miles/Documents/line_1_%d.mp4 max-size-time=600000000000
命令元素说明
rtspsrc rtsp-transport=tcp:指定RTSP流地址并使用TCP传输,和你FFmpeg中的-rtsp_transport tcp对应,保证传输稳定性rtpjpegdepay:将RTP封装的MJPEG流解封装为原始MJPEG数据jpegparse:解析MJPEG流的格式元数据,确保后续的封装器能正确识别流信息splitmuxsink:实现分段保存逻辑,location指定输出文件路径模板,max-size-time设置分段时长(单位为纳秒,600秒对应600000000000)
如果需要优化MP4文件的兼容性(比如让文件可以边写边播放),可以指定mp4mux的fast-start参数:
gst-launch-1.0 rtspsrc location=rtsp://10.42.0.1:8554/test rtsp-transport=tcp ! rtpjpegdepay ! jpegparse ! splitmuxsink location=/home/miles/Documents/line_1_%d.mp4 max-size-time=600000000000 muxer="mp4mux fast-start=true"
Python调用GStreamer实现方案
如果需要用Python集成该流水线,可使用以下代码:
import gi gi.require_version('Gst', '1.0') from gi.repository import Gst, GObject # 初始化GStreamer Gst.init(None) # 构建流水线 pipeline_str = """ rtspsrc location=rtsp://10.42.0.1:8554/test rtsp-transport=tcp ! rtpjpegdepay ! jpegparse ! splitmuxsink location=/home/miles/Documents/line_1_%d.mp4 max-size-time=600000000000 """ pipeline = Gst.parse_launch(pipeline_str) # 监听总线消息处理错误和EOS事件 bus = pipeline.get_bus() bus.add_signal_watch() def handle_message(bus, message): msg_type = message.type if msg_type == Gst.MessageType.EOS: pipeline.set_state(Gst.State.NULL) elif msg_type == Gst.MessageType.ERROR: err, debug_info = message.parse_error() print(f"流水线错误: {err.message}, 调试信息: {debug_info}") pipeline.set_state(Gst.State.NULL) bus.connect("message", handle_message) # 启动流水线 pipeline.set_state(Gst.State.PLAYING) # 运行主循环 loop = GObject.MainLoop() try: loop.run() except KeyboardInterrupt: print("用户终止程序") finally: pipeline.set_state(Gst.State.NULL)
注意事项
- 若Python运行报错,先检查GStreamer插件是否齐全:使用
gst-inspect-1.0 rtpjpegdepay、gst-inspect-1.0 jpegparse等命令验证插件是否存在 - 调整分段时长只需修改
max-size-time的数值,单位为纳秒(例如30秒对应30000000000)
内容的提问来源于stack exchange,提问作者Milesk1990
相关产品推荐
相关产品推荐

