使用opencv获取摄像头时,运行一段时间后,有概率会断开(不稳定)

问题:
在pycharm社区版中,使用opencv获取摄像头时,运行一段时间后,rtsp流突然断开。(有时候会断开,有时候不会)

怎么解决?
求告知!

代码如下

import base64
import cv2
from flask import Flask
from flask_sockets import Sockets
from imutils.video import FileVideoStream
import asyncio
import websockets

app = Flask(__name__)
sockets = Sockets(app)
fvs = FileVideoStream(1).start()
async def video_stream(websocket, path):
    cap = cv2.VideoCapture(1)
    cap.set(6, cv2.VideoWriter.fourcc('M', 'J', 'P', 'G'))
    while True:
        ret, img = cap.read()
        if not ret:
            # 若没有帧返回,则重新刷新rtsp视频流
            cap = cv2.VideoCapture(1)
            ret, frame = cap.read()
            continue
        encode_param = [int(cv2.IMWRITE_JPEG_QUALITY), 50]
        result, img_encode = cv2.imencode('.jpg', img, encode_param)
        image_b = base64.b64encode(img_encode).decode()
        await websocket.send(image_b)
        print(type(image_b))


if __name__ == "__main__":
   start_server = websockets.serve(video_stream, 'localhost', 8778)
   asyncio.get_event_loop().run_until_complete(start_server)
   asyncio.get_event_loop().run_forever()
import base64
import datetime
import cv2
import numpy as np
import asyncio
import websockets

now = datetime.datetime.now()
print(now)


async def send_query_webSocket():
    url = "ws://localhost:8778"
    async with websockets.connect(url, ping_interval=None) as websocket:
        while True:
            greeting = await websocket.recv()
            image0 = base64.b64decode(greeting)
            image1 = np.frombuffer(image0, np.uint8)
            images = cv2.imdecode(image1, cv2.IMREAD_COLOR)

            cv2.imshow("re", images)
            cv2.waitKey(1)
            # cv2.destroyAllWindows()
            print(type(greeting))


if __name__ == "__main__":
    asyncio.get_event_loop().run_until_complete(send_query_webSocket())

img


重新刷新之前先把旧的cap先release掉,并且重新 cap.set(6, cv2.VideoWriter.fourcc('M', 'J', 'P', 'G'))。
还有一种可能,如果你的帧传递比接受后处理的速度快很多,也很可能断流的(常见的是花屏的情况),如果是这种情况,你得在接收端弄个视频缓存队列,新数据挤掉旧帧,这样虽然会掉帧,但是不会出现花屏或者断流的现象