import signal
import requests
import cv2 as cv
import datetime
from time import sleep
import time
import subprocess as sp
from requests import request
while 1:
re = requests.get("http://127.0.0.1:8000/open/")
print(time.time())
print(re.text)
# while re.text=='1':
# print('进入成功')
# cap = cv.VideoCapture(0)
# video_old_name = datetime.datetime.now()
# video_name = str(video_old_name).replace(':', '-')
# video_name = video_name.split('.')[0]
# video_new_name = video_name + '.' + 'avi'
#
# fw = int(cap.get(3))
# fh = int(cap.get(4))
#
# out = cv.VideoWriter('video/'+video_new_name, cv.VideoWriter_fourcc('D', 'I', 'V', 'X'), 30, (fw, fh))
#
# ontime = int(time.time())
# while (True):
# ret, frame = cap.read()
# cv.imshow("czt", frame)
# out.write(frame)
# offtime = int(time.time())
# cv.waitKey(1)
# if offtime-ontime>=2:
# re = requests.get("http://127.0.0.1:8000/open/")
# ontime=offtime
# if re.text=='0':
# break
# cap.release()
# out.release()
# cv.destroyAllWindows()
# break
while re.text=='1':
# RTSP源地址src, 指定从哪里拉取视频流,测试时可以用VLC工具进行rtsp推流
# src = "rtsp://:8554/"
# RTMP推流地址dst, 指定 用opencv把各种处理后的流(视频帧)推到哪里
dst = "rtmp://120.46.141.200:1935/hls/AAA"
# 打开RTSP流,也可以用0,调用本地视频流,并取出视频流的帧率、帧宽、帧高
cap = cv.VideoCapture(0,cv.CAP_DSHOW)
fps = int(cap.get(cv.CAP_PROP_FPS))
width = int(cap.get(cv.CAP_PROP_FRAME_WIDTH))
height = int(cap.get(cv.CAP_PROP_FRAME_HEIGHT))
# ffmpeg command 保存进程参数
command = [
'C:/Users/ASUS/OneDrive/桌面/抑郁评估/RTSP/ffmpeg', # 本机ffpeg软件地址
'-y', '-an',
'-f', 'raw-video',
'code', 'raw-video',
'-pix_fmt', 'bgr24',
'-s', "{}x{}".format(width, height),
'-r', str(fps),
'-i', '-',
'-c:v', 'libx264',
'-pix_fmt', 'yuv420p',
'-preset', 'ultrafast',
'-f', 'flv',
dst
]
# 获取视频流的基本信息
fps = int(cap.get(cv.CAP_PROP_FPS))
size = (int(cap.get(cv.CAP_PROP_FRAME_WIDTH)),
int(cap.get(cv.CAP_PROP_FRAME_HEIGHT)))
# 建立子进程(配置管道)
pipe = sp.Popen(command, shell=False,stdin=sp.PIPE)
# 循环读取视频流
while True:
ret, frame = cap.read() # 从视频流中获取一帧
if not ret:
raise IOError("couldn't open webcam or video")
# 处理代码(使用AI算法)
cv.imshow('Video', frame) # 显示处理结果
print('AAA')
# 推流代码
pipe.stdin.write(frame.tobytes())
print('BBB')
# 按下q键退出
if cv.waitKey(1) == ord('q'):
break
print('CCC')
# 释放视频流
cap.release()
# 关闭窗口
cv.destroyAllWindows()
# 关闭进程
pipe.stdin.close()
pipe.wait()
break
sleep(2)
实现功能,使用opencv打开摄像头 将摄像头捕获内容推流至云端。
报错内容