推流操作如下
- 利用python和opencv-python读取视频
- 利用rtsp-simper-server作为服务器
- 利用pipe管道,ffmpeg命令推送opencv-python读取到的视频流
取流
- vlc能正常取流并播放
- gstreamer能正常取流并播放
存在的问题
显示屏设备需硬件解码,通过wireshark抓包发现是因为没有sps和pps,是ffmpeg命令的问题?还是需要手动给opencv读到的视频流加上sps和pps?
主要代码如下
# ffmpeg推流命令
command = ['ffmpeg',
'-re',
'-y',
'-f', 'rawvideo',
'-vcodec', 'rawvideo',
'-pix_fmt', 'bgr24',
'-s', "{}x{}".format(width, height),
'-r', str(fps),
'-i', '-',
'-c:v', 'libx264',
'-preset', 'ultrafast',
'-f', 'rtsp',
'-rtsp_transport', 'tcp',
'-muxdelay', '0.1',
rtsp_url]
p = sp.Popen(command, stdin=sp.PIPE)
while (cap.isOpened()):
ret, frame = cap.read()
if not ret:
cap = cv2.VideoCapture(video_path)
continue
#p.stdin.write(frame.tostring())
p.stdin.write(frame.tobytes())