目标追踪结果单张图像推流

137 阅读1分钟

背景

摄像头 rtsp 流作为输入,经过目标追踪等处理,保存为 flv 文件,web 端想进行文件的实时查看

技术方案

之前的工作已经保存了 flv 文件,前两天一直想的是将实时的 flv 文件进行推流到 nginx,这既要开启追踪、又要推流,涉及到多线程的东西,有没有更简便的方式呢?

有的,不保存为 flv 了,直接处理完一帧就推流一帧

单张图像推流代码

下面的代码中,rtmpUrl 是推流到的地址, 根据 nginx 的配置自行修改;-s 是图像的宽高,-r 是帧率,根据实际情况修改。

rtmpUrl = 'rtmp://localhost:1935/live/test'
command = ['ffmpeg',
    '-y',
    '-c', 'copy',
    '-f', 'rawvideo',
    '-vcodec','rawvideo',
    '-pix_fmt', 'bgr24',
    '-max_delay', str(100),
    '-s', f'{int(width)}x{int(height)}',
    '-r', str(15),
    '-i', '-',
    '-c:v', 'libx264',
    '-pix_fmt', 'yuv420p',
    '-preset', 'ultrafast',
    '-f', 'flv',
    '-g', '5',
    '-b', '7000000',
rtmpUrl]
pushPip = subprocess.Popen(command, stdin=subprocess.PIPE, shell=False)

调用 pushPip.stdin.write(xxx) 向管道写入图像,完成推流,下载 flv.min.js,即可通过 html web 页面访问拉流地址,获取实时画面

推流的时候报 Input/output error 错误

经过排查,是 nginx 服务器没有正常运行,在上一篇文章我通过两种方法安装了 nginx,但是第一种方法安装后开启的 nginx 进程还没有杀掉,通过下面的命令,查找 nginx 相关进程,并强制杀掉,然后再启动 nginx,直到访问 nginx ip 能够显示 welcome to nginx 页面即可正常推流。

linux 相关命令

  • 启动 nginx sudo nginx
  • 查找 nginx 进程 ps -ef|grep nginx
  • 按进程号强制杀掉进程 kill -9 xxx