本文共 1496 字,大约阅读时间需要 4 分钟。
本文将介绍一个基于 ffmpeg 的实时视频流处理系统,详细阐述系统的配置方法及核心实现逻辑。
# 查看帮助信息ffmpeg -help# 查看视频流信息ffmpeg -log info input_file# 查看输出格式支持情况ffmpeg -formats
ffmpeg -i rtsp://admin:hik12345@192.168.3.175/cam/realmonitor?channel=1&subtype=1
ffmpeg -i -y -f rawvideo -vcodec rawvideo -pix_fmt bgr24 -s 704*576 -f flv rtmp://192.168.3.56:1935/MyRed5/test
import osimport sysimport numpy as npimport subprocess as sp# ffmpeg 执行器ffmpeg_bin = "E:/ffmpeg-20180227-fa0c9d6-win64-static/bin/ffmpeg.exe"# 命令行参数command_in = [ ffmpeg_bin, '-i', input_file, '-f', 'rawvideo', '-s', f'{width}*{height}', '-pix_fmt', 'bgr24', '-']# 创建 ffmpeg 进程pipe_in = sp.Popen(command_in, stdout=sp.PIPE) def process_image(img): cv2.imshow('实时视频', img)# 读取视频流while True: raw_image = pipe_in.stdout.read(width * height * 3) if len(raw_image) == 0: break # 转换为图像数组 image = np.fromstring(raw_image, dtype='uint8') image = image.reshape((height, width, 3)).copy() # 处理当前帧 process_image(image) # 写入输出流 pipe_out.stdin.write(image.tobytes()) pipe_out.stdin.flush() # 等待键盘输入 k = cv2.waitKey(25) if k & 0xff == ord('q'): break 整个系统通过 ffmpeg 实现视频流的实时读取与处理,兼顾了高效性与实用性。
转载地址:http://ehafk.baihongyu.com/