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打开摄像头 将摄像头捕获内容推流至云端。
报错内容
【以下回答由 GPT 生成】
这个错误通常是由于网络问题或远程服务器的异常关闭导致的。解决方案有以下几种可能的方法:
检查网络连接:请确保网络连接稳定且没有中断。您可以尝试使用其他应用或浏览器检查您的网络连接是否正常。如果网络连接不稳定,您可以尝试重新启动您的网络设备或更换网络。
检查远程服务器状态:检查您正在访问的服务器是否正常运行。您可以尝试通过Ping命令测试服务器的可用性,或者尝试通过浏览器访问服务器上的网页。如果服务器无法访问,可能是服务器故障或网络配置问题。
异常处理:您可以使用try-except语句来处理BrokenPipeError异常。在发生BrokenPipeError时,您可以选择重新建立连接或执行其他操作。下面是一个示例代码片段:
while 1:
try:
re = requests.get("http://127.0.0.1:8000/open/")
print(time.time())
print(re.text)
# ...
except BrokenPipeError:
# 重新建立连接或执行其他操作
print("连接中断,尝试重新建立连接...")
sleep(1) # 休眠一秒后重新尝试连接
请注意,这只是一个简单的示例代码片段,具体的处理方式可以根据您的需求进行调整和定制。
requests.Session
来管理HTTP会话,借助keep-alive机制来维持一个持久的连接。这样可以减少由于频繁建立和关闭连接导致的BrokenPipeError错误。示例代码如下:session = requests.Session()
while 1:
try:
re = session.get("http://127.0.0.1:8000/open/")
print(time.time())
print(re.text)
# ...
except BrokenPipeError:
# 重新建立连接或执行其他操作
print("连接中断,尝试重新建立连接...")
sleep(1) # 休眠一秒后重新尝试连接
这些是常见的解决方案,您可以根据具体情况选择适合您的方法进行尝试,以解决BrokenPipeError的错误。如果以上方法不起作用,可能需要进一步调试和排查其他可能的问题,或者联系服务器管理员寻求帮助。