------------python算法处理后再进行推流-------------------------------
1、先搭建流媒体服务器
方式一:见Windows+nginx+rtmp+OBS文档,或用linux+nginx+rtmp
方式二:见SRS4.0.85流媒体服务器搭建
2、安装ffmpeg并添加到环境变量(以windows为例)
Download FFmpeg
将文件bin目录路径添加到环境变量中,在cmd/终端中输入ffmpeg,出现以下内容说明已添加好
(windows)
(linux)
3、python通过管道控制ffmpeg推流
经过无数次配置命令行验证,目前以下两种有效。目前经测试,使用ffmpeg推流命令复杂且视频画面不稳,容易出现各种各样问题,没有OBS好使
import subprocess as sp
import cv2
rtmpUrl = 'rtmp://192.168.3.39:1935/live/livestream'
#下面这个可以通过srs服务器推webRTC流
command = ['ffmpeg',
'-y', '-an',
'-f', 'rawvideo',
'-vcodec', 'rawvideo',
'-pix_fmt', 'bgr24',
'-s', '1280x720',
'-r', '25',
'-i', '-',
'-c:v', 'libx264',
'-pix_fmt', 'yuv420p',
'-preset', 'ultrafast',
'-flvflags', 'no_duration_filesize',
'-f', 'flv',
rtmpUrl]
#这个可通过nginx+rtmp服务器推流
command = ['ffmpeg',
'-y',
'-f', 'rawvideo',
'-vcodec', 'rawvideo',
'-pix_fmt', 'bgr24',
'-s', "1280x720",
'-i', '-',
'-c:v', 'libx264',
'-preset', 'faster',
'-f', 'flv',
rtmpUrl]
# 下面这个可以通过srs推流webRTC
command = ['ffmpeg',
'-re',
'-i', rtmp_url,
'-vcodec', 'copy',
'-acodec', 'copy',
'-f','flv',
'-flvflags','no_duration_filesize',
rtmpUrl]
pipe = sp.Popen(command,stdin=sp.PIPE)
while (cap.isOpened()):
ret, frame = cap.read()
if ret:
pipe.stdin.write(frame.tostring())
else:
break
cap.release()
pipe.terminate()
---------------ffmpeg推流本系统usb摄像头直接命令--------------
引用博客:地址
1、Linux
1、ls -ltrh /dev/video* #获取摄像头名称
Linux下用 FFMPEG 采集 usb摄像头视频 和 摄像头内置麦克风音频 到RTMP服务
ffmpeg -f video4linux2 -qscale 10 -r 12 -s 640x480 -i /dev/video0 -f alsa -i hw:1 -ab 16 -ar 22050 -ac 1 -f mp3 -f flv rtmp://127.0.0.1/rtmpsvr/rtmp1
./ffmpeg -f video4linux2 -s 640x480 -i /dev/video0 -f flv rtmp://127.0.0.1:1935/live/live
首先说一下推流,主要使用ffmpeg命令进行本地摄像头的推流,为了实现首屏秒开使用-g设置gop大小,同时使用-b降低网络负载,保证流畅度。
2、ffmpeg -r 30 -i /dev/video0 -vcodec h264 -max_delay 100 -f flv -g 5 -b 700000 rtmp://219.216.87.170/live/test1
2、windows
1、ffmpeg -list_devices true -f dshow -i dummy#获取摄像头名称
2、
ffmpeg -f dshow -i video="摄像头名称" -vcodec libx264 -acodec copy -preset:v ultrafast -tune:v zerolatency -f flv rtmp://116.xxx.xxx.xxx:1935/ros/ros_video
ffmpeg -r 30 -f vfwcap -i 0 -vcodec h264 -max_delay 100 -f flv -g 5 -b 700000 rtmp://219.216.87.170/live/test1
ffmpeg -r 30 -f dshow -i video="1.3M HD WebCam" -vcodec h264 -max_delay 100 -f flv -g 5 -b 700000 rtmp://219.216.87.170/live/tes