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的chardet库获得文件编码并修改编码
Jan 22 Python
简化Python的Django框架代码的一些示例
Apr 20 Python
Python xlwt设置excel单元格字体及格式
Apr 18 Python
pycharm的console输入实现换行的方法
Jan 16 Python
Django框架模板语言实例小结【变量,标签,过滤器,继承,html转义】
May 23 Python
python按键按住不放持续响应的实例代码
Jul 17 Python
浅析Windows 嵌入python解释器的过程
Jul 26 Python
浅析python redis的连接及相关操作
Nov 07 Python
python 求定积分和不定积分示例
Nov 20 Python
Python yield生成器和return对比代码实例
Apr 20 Python
Python获取百度热搜的完整代码
Apr 07 Python
python 爬取吉首大学网站成绩单
Jun 02 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
星际实力自我测试
2020/03/04 星际争霸
php中数据的批量导入(csv文件)
2006/10/09 PHP
php&mysql 日期操作小记
2012/02/27 PHP
Zend Studio去除编辑器的语法警告设置方法
2012/10/24 PHP
PHP中最容易忘记的一些知识点总结
2013/04/28 PHP
typecho插件编写教程(四):插件挂载
2015/05/28 PHP
PHP与jquery实时显示网站在线人数实例详解
2016/12/02 PHP
一个对于Array的简单扩展
2006/10/03 Javascript
Microsoft Ajax Minifier 压缩javascript的方法
2010/03/05 Javascript
一个分享按钮的插件使用介绍(可扩展,内附开发制作流程)
2011/09/19 Javascript
javascript实现类似百度分享功能的方法
2015/07/27 Javascript
浅析node连接数据库(express+mysql)
2015/11/30 Javascript
js字符串引用的两种方式(必看)
2016/09/18 Javascript
JS实现颜色梯度与渐变效果完整实例
2016/12/30 Javascript
boostrapTable的refresh和refreshOptions区别浅析
2017/01/22 Javascript
Vue框架TypeScript装饰器使用指南小结
2019/02/18 Javascript
JavaScript实现的开关灯泡点击切换特效示例
2019/07/08 Javascript
在微信小程序中使用mqtt服务的方法
2019/12/13 Javascript
解决vue页面刷新,数据丢失的问题
2020/11/24 Vue.js
[03:55]2014DOTA2国际邀请赛 Fnatic经理采访赢DK在情理之中
2014/07/10 DOTA
Python RuntimeError: thread.__init__() not called解决方法
2015/04/28 Python
在Python程序中操作文件之isatty()方法的使用教程
2015/05/24 Python
利用Python将数值型特征进行离散化操作的方法
2018/11/06 Python
Django之创建引擎索引报错及解决详解
2019/07/17 Python
对django views中 request, response的常用操作详解
2019/07/17 Python
Python-Flask:动态创建表的示例详解
2019/11/22 Python
Python基础之函数原理与应用实例详解
2020/01/03 Python
Python-numpy实现灰度图像的分块和合并方式
2020/01/09 Python
Python hashlib常见摘要算法详解
2020/01/13 Python
简单了解python filter、map、reduce的区别
2020/01/14 Python
Django重设Admin密码过程解析
2020/02/10 Python
css3背景_动力节点Java学院整理
2017/07/11 HTML / CSS
工作违纪检讨书
2014/02/17 职场文书
幼儿园秋游感想
2014/03/12 职场文书
PHP命令行与定时任务
2021/04/01 PHP
Vue如何实现组件间通信
2021/05/15 Vue.js