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


Posted in Python onNovember 13, 2020

前言

网络摄像头的视频流解析直接使用通过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 相关文章推荐
python中迭代器(iterator)用法实例分析
Apr 29 Python
python基本语法练习实例
Sep 19 Python
matplotlib绘图实例演示标记路径
Jan 23 Python
numpy.linspace 生成等差数组的方法
Jul 02 Python
python用BeautifulSoup库简单爬虫实例分析
Jul 30 Python
python tkinter实现彩球碰撞屏保
Jul 30 Python
Python实现多线程/多进程的TCP服务器
Sep 03 Python
Python上下文管理器用法及实例解析
Nov 11 Python
CentOS7下安装python3.6.8的教程详解
Jan 03 Python
python多进程 主进程和子进程间共享和不共享全局变量实例
Apr 25 Python
Python爬虫工具requests-html使用解析
Apr 29 Python
Keras之fit_generator与train_on_batch用法
Jun 17 Python
python+flask编写一个简单的登录接口
Nov 13 #Python
jupyter notebook快速入门及使用详解
Nov 13 #Python
Python中pass的作用与使用教程
Nov 13 #Python
python入门教程之基本算术运算符
Nov 13 #Python
python“静态”变量、实例变量与本地变量的声明示例
Nov 13 #Python
Python和Bash结合在一起的方法
Nov 13 #Python
python小技巧——将变量保存在本地及读取
Nov 13 #Python
You might like
PHP数组实例总结与说明
2011/08/23 PHP
PHP中使用socket方式GET、POST数据实例
2015/04/02 PHP
PHP实现将优酷土豆腾讯视频html地址转换成flash swf地址的方法
2017/08/04 PHP
JavaScript实现动态增加文件域表单
2009/02/12 Javascript
运用jquery实现table单双行不同显示并能单行选中
2009/07/25 Javascript
jquery 简单图片导航插件jquery.imgNav.js
2010/03/17 Javascript
javascript工具库代码
2012/03/29 Javascript
js的隐含参数(arguments,callee,caller)使用方法
2014/01/28 Javascript
谈谈我对JavaScript DOM事件的理解
2015/12/18 Javascript
javascript每日必学之条件分支
2016/02/17 Javascript
基于vuejs实现一个todolist项目
2017/04/11 Javascript
Javascript ES6中数据类型Symbol的使用详解
2017/05/02 Javascript
webpack 2.x配置reactjs基本开发环境详解
2017/08/08 Javascript
原生JS实现手动轮播图效果实例代码
2018/11/22 Javascript
JS数组求和的常用方法实例小结
2019/01/07 Javascript
js取0-9随机取4个数不重复的数字代码实例
2019/03/27 Javascript
jQuery 常用特效实例小结【显示与隐藏、淡入淡出、滑动、动画等】
2020/05/19 jQuery
vue-router的hooks用法详解
2020/06/08 Javascript
JavaScript实现简单动态表格
2020/12/02 Javascript
[07:01]DOTA2-DPC中国联赛正赛 Aster vs Magma 3月5日 赛后选手采访
2021/03/11 DOTA
python与php实现分割文件代码
2017/03/06 Python
python pyheatmap包绘制热力图
2018/11/09 Python
使用python远程操作linux过程解析
2019/12/04 Python
Python实现爬取并分析电商评论
2020/06/19 Python
python 带时区的日期格式化操作
2020/10/23 Python
如何在vscode中安装python库的方法步骤
2021/01/06 Python
澳大利亚办公室装修:JasonL Office Furniture
2019/06/25 全球购物
美国小蜜蜂Burt’s Bees德国官网:天然唇部、皮肤和身体护理产品
2020/06/14 全球购物
生产厂厂长岗位职责
2013/12/25 职场文书
精彩自我鉴定
2014/01/16 职场文书
小学新学期教师寄语
2014/01/18 职场文书
优秀医生事迹材料
2014/02/12 职场文书
中学生运动会口号
2014/06/07 职场文书
质量标语大全
2014/06/12 职场文书
2015年度环卫处工作总结
2015/07/24 职场文书
MySql 8.0及对应驱动包匹配的注意点说明
2021/06/23 MySQL