You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 22:20:26