代码:
# 导入opencv
import cv2 as cv
import subprocess as sp
rtspUrl = 'rtsp://localhost/test' #将处理后的帧传入管道推流到该地址
def face_detect_demo(img):
gray = cv.cvtColor(img, cv.COLOR_BGR2GRAY)
face_detect = cv.CascadeClassifier('haarcascade_frontalface_alt2.xml')
# 主要是调整参数
face = face_detect.detectMultiScale(gray)
for x, y, w, h in face:
cv.rectangle(img, (x, y), (x+w, y+h), color=(0, 0, 255), thickness=2)
# 读取实时流
cap = cv.VideoCapture('rtsp://192.168.1.118/190647.sdp') #此处写easypusher在easydarwin的播放地址
# 视频属性
size = (int(cap.get(cv.CAP_PROP_FRAME_WIDTH)), int(cap.get(cv.CAP_PROP_FRAME_HEIGHT)))
sizeStr = str(size[0]) + 'x' + str(size[1])
fps = cap.get(cv.CAP_PROP_FPS) # 30p/self
# 直播管道输出
# ffmpeg推送RTSP重点:通过管道共享数据的方式
command = ['ffmpeg',
'-y',
'-f', 'rawvideo',
'-vcodec','rawvideo',
'-pix_fmt', 'bgr24',
'-s', sizeStr,
'-r', str(fps),
'-i', '-',
'-c:v', 'libx264',
'-pix_fmt', 'yuv420p',
'-preset', 'ultrafast',
'-f', 'rtsp',
rtspUrl]
#管道特性配置
pipe = sp.Popen(command, stdin=sp.PIPE) #,shell=False
# 循环读取
while cap.isOpened():
flag, frame = cap.read()
if not flag:
break
face_detect_demo(frame)
pipe.stdin.write(frame.tobytes()) # 存入管道用于直播
pass
# 释放摄像头
cap.release()
测试:
1、Windows配置ffmpeg
Windows安装配置ffmpeg_Simple的博客-优快云博客
2、使用EasyDarwin做服务器
Releases · EasyDarwin/EasyDarwin · GitHub
下载解压后,点击EasyDarwin.exe,复制地址到浏览器中


使用手机测试:
一台设备安装EasyPusher

代码中cap地址写EasyDarwin中的播放地址


另一台设备安装EasyPlayer:
运行代码后,
复制推流的播放地址到easyplayer中:rtsp://localhost/test

5040

被折叠的 条评论
为什么被折叠?



