python3从网络摄像机解析mjpeg http流的示例

Cindy ·
更新时间:2024-09-21
· 882 次阅读

前言

网络摄像头的视频流解析直接使用通过http的Mjpeg是具有边界帧信息的multipart / x-mixed-replace,而jpeg数据只是以二进制形式发送。因此,实际上不需要关心HTTP协议标头。所有jpeg帧均以marker开头,0xff 0xd8并以结尾0xff 0xd9。因此,上面的代码从http流中提取了此类帧,并将其一一解码。像下面

...(http) 0xff 0xd8 --| [jpeg data] |--this part is extracted and decoded 0xff 0xd9 --| ...(http) 0xff 0xd8 --| [jpeg data] |--this part is extracted and decoded 0xff 0xd9 --| ...(http)

如果图像的获取是从tcp网络中传输到本地进行解析需要对bytes类型数据进行解码

在使用OpenCV直接调用网络摄像头时可能会出现

Cam not found

这时候就需要下面这种办法

代码: 
帧解析

import cv2 cap = cv2.VideoCapture('http://localhost:8080/frame.mjpg') while True: ret, frame = cap.read() print(frame) if ret == True: cv2.imshow('Video', frame) if cv2.waitKey(1) == 27: exit(0)

视频流解析

import cv2 import requests import numpy as np r = requests.get('http://192.168.1.xx/mjpeg.cgi', auth=('user', 'password'), stream=True) if(r.status_code == 200): bytes = bytes() for chunk in r.iter_content(chunk_size=1024): bytes += chunk a = bytes.find(b'\xff\xd8') b = bytes.find(b'\xff\xd9') if a != -1 and b != -1: jpg = bytes[a:b+2] bytes = bytes[b+2:] i = cv2.imdecode(np.fromstring(jpg, dtype=np.uint8), cv2.IMREAD_COLOR) cv2.imshow('i', i) if cv2.waitKey(1) == 27: exit(0) else: print("Received unexpected status code {}".format(r.status_code))

以上就是python3从网络摄像机解析mjpeg http流的示例的详细内容,更多关于python 解析mjpeg http流的资料请关注软件开发网其它相关文章!

您可能感兴趣的文章:Python+OpenCV图像处理——打印图片属性、设置存储路径、调用摄像头教你如何用python操作摄像头以及对视频流的处理python3 使用Opencv打开USB摄像头,配置1080P分辨率的操作python使用opencv在Windows下调用摄像头实现解析树莓派4B+opencv4+python 打开摄像头的实现方法Python通过cv2读取多个USB摄像头python opencv调用笔记本摄像头python+openCV调用摄像头拍摄和处理图片的实现python实现从本地摄像头和网络摄像头截取图片功能python opencv捕获摄像头并显示内容的实现Python OpenCV 调用摄像头并截图保存功能的实现代码Python+OpenCV+pyQt5录制双目摄像头视频的实例



网络摄像机 HTTP 示例 摄像 摄像机 Python3 Python

需要 登录 后方可回复, 如果你还没有账号请 注册新账号