ze_xi1 2023-08-09 17:14 采纳率: 0%
浏览 4

BrokenPipeError: [Errno 32] Broken pipe


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打开摄像头 将摄像头捕获内容推流至云端。
报错内容

img

  • 写回答

1条回答 默认 最新

  • CSDN-Ada助手 CSDN-AI 官方账号 2023-08-09 21:05
    关注

    【以下回答由 GPT 生成】

    这个错误通常是由于网络问题或远程服务器的异常关闭导致的。解决方案有以下几种可能的方法:

    1. 检查网络连接:请确保网络连接稳定且没有中断。您可以尝试使用其他应用或浏览器检查您的网络连接是否正常。如果网络连接不稳定,您可以尝试重新启动您的网络设备或更换网络。

    2. 检查远程服务器状态:检查您正在访问的服务器是否正常运行。您可以尝试通过Ping命令测试服务器的可用性,或者尝试通过浏览器访问服务器上的网页。如果服务器无法访问,可能是服务器故障或网络配置问题。

    3. 异常处理:您可以使用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)  # 休眠一秒后重新尝试连接
    

    请注意,这只是一个简单的示例代码片段,具体的处理方式可以根据您的需求进行调整和定制。

    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的错误。如果以上方法不起作用,可能需要进一步调试和排查其他可能的问题,或者联系服务器管理员寻求帮助。


    如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^
    评论

报告相同问题?

问题事件

  • 创建了问题 8月9日

悬赏问题

  • ¥15 django5安装失败
  • ¥15 Java与Hbase相关问题
  • ¥15 ANSYS分析简单钎焊问题
  • ¥20 bash代码推送不上去 git fetch origin master #失败了
  • ¥15 LOL外服加入了反作弊系统,现在游戏录像rofl文件离线都无法打开
  • ¥15 在centos7安装conda
  • ¥15 c#调用yolo3 dll文件获取的数据对不上
  • ¥20 WPF 如何实现多语言,label 和cs(live Charts)中是否都能翻译
  • ¥15 STM32F103上电短路问题
  • ¥15 打开软件提示错误:failed to get wglChoosePixelFormatARB