rtsp推流

#coding:utf-8
import cv2

subprocess 模块允许我们启动一个新进程,并连接到它们的输入/输出/错误管道,从而获取返回值。

import subprocess

视频读取对象

cap = cv2.VideoCapture(0)

读取一帧

ret, frame = cap.read()

推流地址

rtmp = “rtmp://119.84.240.48:18000/live/1”

rtmp = “rtmp://172.16.41.133:1936/live/test1”

rtmp = “rtmp://119.84.240.48:1935/dd01850979be4db7957554505337abee”

rtmp = “rtmp://119.84.240.48:1935/test1”

rtmp = “rtmp://119.84.240.48:18000/dd01850979be4db7957554505337abee”

推流参数

command = [‘ffmpeg’,
‘-y’,
‘-f’, ‘rawvideo’,
‘-vcodec’,‘rawvideo’,
‘-pix_fmt’, ‘bgr24’,
‘-s’, ‘640x480’, # 根据输入视频尺寸填写
‘-r’, ‘25’,
‘-i’, ‘-’,
‘-c:v’, ‘h264’,
‘-pix_fmt’, ‘yuv420p’,
‘-preset’, ‘ultrafast’,
‘-f’, ‘flv’,
rtmp]

创建、管理子进程

pipe = subprocess.Popen(command, stdin=subprocess.PIPE)
size = (int(cap.get(cv2.CAP_PROP_FRAME_WIDTH)), int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT)))
print(size)

循环读取

while cap.isOpened():
# 读取一帧
ret, frame = cap.read()
if frame is None:
print(‘read frame err!’)
continue

# 显示一帧
cv2.imshow("frame", frame)

# 按键退出
if cv2.waitKey(1) & 0xFF == ord('q'):
    break

# 读取尺寸、推流
img=cv2.resize(frame,size)
pipe.stdin.write(img.tobytes()) 

关闭窗口

cv2.destroyAllWindows()

停止读取

cap.release()

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值