如何用Python监听并解码RTMP视频流?遇参数报错求解决
解决Python av库监听RTMP流时的
listen参数错误问题 错误原因
av.open()方法本身并不支持listen这个关键字参数,你想要设置的-listen 1是FFmpeg的全局选项,需要通过av库提供的options参数传递给底层FFmpeg。
修正后的代码
import av # 通过options字典传递FFmpeg的listen选项 container = av.open('rtmp://localhost:1935/live/app', options={'listen': '1'}) try: for frame in container.decode(video=0): # 转换为BGR格式的numpy数组 frame_bgr = frame.to_ndarray(format='bgr24') # 在这里添加你的帧处理逻辑 print(f"获取到视频帧,尺寸:{frame_bgr.shape}") except KeyboardInterrupt: print("停止监听RTMP流") finally: container.close()
关键说明
options参数是av库用来传递FFmpeg全局配置的入口,所有FFmpeg命令行中的全局选项都可以以键值对的形式传入,值需要是字符串类型(比如'1'而不是数字1)- 建议添加异常捕获和资源释放逻辑,避免流中断时出现资源泄漏
- 如果运行仍然报错,先执行
pip install -U av更新到最新版本的av库,旧版本可能对RTMP监听的支持不完善
内容的提问来源于stack exchange,提问作者Li-GanMa
相关产品推荐
相关产品推荐

