如何用Python从本地MP4文件模拟RTSP流适配GCP架构?
用Python将MP4模拟为RTSP流并部署在GCP环境
实现思路
完全可以实现。无需依赖Vertex AI Vision,通过轻量RTSP服务器 + Python推流脚本的组合,就能把MP4文件模拟成持续的RTSP流,且可部署在GCP任意允许的区域,完全适配原有分析架构。
具体步骤
1. 部署轻量RTSP服务器
选用rtsp-simple-server(开源轻量RTSP服务器,无系统依赖),部署在GCP Compute Engine实例:
- 选择你项目允许的区域创建实例,实例类型选e2-micro即可满足需求
- 下载对应Linux amd64版本的
rtsp-simple-server二进制文件,解压后得到可执行文件 - 启动服务器(后台持续运行):
nohup ./rtsp-simple-server & - 配置GCP防火墙规则,允许外部访问该实例的554端口(TCP和UDP协议都需开放)
2. 编写Python推流脚本
使用pyav(FFmpeg的Python绑定库)读取MP4文件,循环推流到RTSP服务器,模拟摄像头的持续输出:
- 先安装依赖包:
pip install av - 编写脚本
mp4_to_rtsp.py:import av import time # 配置参数,替换为实际路径和实例IP MP4_FILE_PATH = "/path/to/your/sample.mp4" RTSP_STREAM_URL = "rtsp://<你的GCE实例公网IP>:554/camera-stream" def loop_stream_mp4(): # 打开MP4文件 input_container = av.open(MP4_FILE_PATH) video_stream = input_container.streams.video[0] # 初始化RTSP输出流 output_container = av.open(RTSP_STREAM_URL, mode='w', format='rtsp') output_stream = output_container.add_stream(template=video_stream) while True: # 逐帧读取并推送 for frame in input_container.decode(video_stream): # 重置帧时间戳,适配循环推送 frame.pts = None packet = output_stream.encode(frame) if packet: output_container.mux(packet) # 按原视频帧率控制推送速度,避免流卡顿 time.sleep(1 / video_stream.rate) # 视频播放完毕后重置到开头,实现循环推流 input_container.seek(0) print("视频循环重启,继续推流") if __name__ == "__main__": try: loop_stream_mp4() except KeyboardInterrupt: print("推流已停止")
3. GCP环境部署与运行
- 将MP4样例文件上传到Compute Engine实例(可直接上传到本地磁盘,或挂载Cloud Storage桶读取),修改脚本中的
MP4_FILE_PATH为实际路径 - 后台运行Python脚本,确保断开SSH连接后仍持续推流:
nohup python3 mp4_to_rtsp.py &
验证
在GCP环境内(比如你的视频分析服务所在实例),使用配置的RTSP_STREAM_URL即可访问模拟的RTSP流,访问方式与真实IP摄像头的RTSP流完全一致,无需改动原有分析架构。
内容的提问来源于stack exchange,提问作者Samara Prass
相关产品推荐
相关产品推荐

