软硬件环境

  • windows 10 64bit
  • anaconda3 with python 3.7
  • pycharm 2020.1.2
  • flask 1.1.2
  • opencv 4.4.0

前言

当下,网络摄像机(IP Camera)的使用已经越来越广泛,大部分的网络摄像机都是基于RTSP(Real Time Streaming Protocol)传输协议,可是很不幸的是,这种协议,原生浏览器都不支持。

本文介绍一种结合flaskopencv的方法来实现在浏览器中查看实时的视频流。

安装软件包

新建python虚拟环境,然后安装flaskopencv

conda create -n flask python=3.7conda activate flaskpip install flask opencv-python

编码

接下来就可以进行编码了,首先是flask后台服务,注释已经嵌入到了代码当中

from flask import Flask, render_template, Responseimport cv2

app = Flask(__name__)

# VideoCapture可以读取从url、本地视频文件以及本地摄像头的数据# camera = cv2.VideoCapture('rtsp://admin:admin@172.21.182.12:554/cam/realmonitor?channel=1&subtype=1')# camera = cv2.VideoCapture('test.mp4')# 0代表的是第一个本地摄像头,如果有多个的话,依次类推camera = cv2.VideoCapture(0)

def gen_frames():    while True:        # 一帧帧循环读取摄像头的数据        success, frame = camera.read()        if not success:            break        else:            # 将每一帧的数据进行编码压缩,存放在memory中            ret, buffer = cv2.imencode('.jpg', frame)            frame = buffer.tobytes()            # 使用yield语句,将帧数据作为响应体返回,content-type为image/jpeg            yield (b'--frame\r\n'                   b'Content-Type: image/jpeg\r\n\r\n' + frame + b'\r\n')

@app.route('/video_start')def video_start():    # 通过将一帧帧的图像返回,就达到了看视频的目的。multipart/x-mixed-replace是单次的http请求-响应模式,如果网络中断,会导致视频流异常终止,必须重新连接才能恢复    return Response(gen_frames(), mimetype='multipart/x-mixed-replace; boundary=frame')

@app.route('/')def index():    return render_template('index.html')

if __name__ == '__main__':    app.run(host='0.0.0.0', debug=True)

其余部分的代码应该都很熟悉了,这里就不再解释了。接下来就是模板文件index.html

html>"en">

    "utf-8">    "viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">

    "stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.1.3/css/bootstrap.min.css"          integrity="sha384-MCw98/SFnGE8fJT3GXwEOngsV7Zt27NXFoaoApmYm81iuXoPkFOJwJ8ERdknLPMO" crossorigin="anonymous">

    Live Streaming

"container">

"row">

"col-lg-8  offset-lg-2">

"mt-5">Live Streaming

"{{ url_for('video_start') }}" width="100%">

使用img标签就可以看到摄像头的图像。

最后我们启动flask服务,在浏览器中访问链接http://127.0.0.1:5000,就可以看到摄像头的实时视频数据了

flask-opencv-streaming

源码下载

Flask教程专题

更多Flask教程,请移步

https://xugaoxiang.com/category/python/modules/

video标签支持获取rtsp流么_Flask教程(二十二)在浏览器中播放rtsp实时流相关推荐

  1. audio与video标签支持的文件格式

    audio与video标签支持的文件格式 1.audio标签支持的文件格式 (1)ogg:一种新的音频压缩格式,是完全免费.开放和没有专利限制的 (2)mp3:是一种音频压缩技术.它被设计用来大幅度地 ...

  2. 如果摄像头不支持Web Socket,猿大师播放器还能在网页中播放RTSP流吗?

    问: 我们的情况比较复杂,摄像头设备品牌和数量都比较多,分布在全国各地都有,地点分布比较广泛,有的甚至是比较老的型号,如果摄像头设备不支持Web Socket,猿大师播放器还可以在网页中播放RTSP流 ...

  3. HTML5里video标签支持哪些格式的视频文件

    video标签支持的视频格式: Ogg.MPEG4.WebM MP4 = MPEG 4 文件使用H264视频编解码器和AAC音频编解码器 WebM =WebM 文件使用 VP8视频编解码器和Vorbi ...

  4. html调用rpst 源码_在web页面中播放rtsp直播数据流方法

    WEB播放RTSP直播数据流方法 附录一些RTSP测试地址: 1.rtsp://184.72.239.149/vod/mp4://BigBuckBunny_175k.mov 一段动画片 2.rtsp: ...

  5. 如何在高版本Chrome中播放RTSP实时视频?

    背景 随着互联网基础设施的完善以及4G.5G等技术的大规模商用,在Chrome.Firefox.Edge等浏览器播放RTSP视频流也慢慢成为了信息化系统的行业标准. 早些年还可用VLC播放器在网页中播 ...

  6. SAP UI5 应用开发教程之八十二 - 采用 OPA5 开发支持页面跳转的 SAP UI5 集成测试用例试读版

    一套适合 SAP UI5 初学者循序渐进的学习教程 教程目录 SAP UI5 本地开发环境的搭建 SAP UI5 应用开发教程之一:Hello World SAP UI5 应用开发教程之二:SAP U ...

  7. 【开源技术分享】无需流媒体服务,让浏览器直接播放rtsp/rtmp的神器:EasyMedia

    不同于市面上其他需要各种转发到流媒体服务的中间件来说,EasyMedia不需要依赖任何nginx-rtmp,srs,zlmediakit等等第三方流媒体服务,只需要你有rtsp或者rtmp等等协议的视 ...

  8. 二十四、Struts2中的UI标签

    二十四.Struts2中的UI标签 Struts2中UI标签的优势: 数据回显 页面布局和排版(Freemark),struts2提供了一些常用的排版(主题:xhtml默认 simple ajax) ...

  9. video标签(获取视频时间总长度,视频当前时间,播放暂停方法,视频封面,)

    下面是HTML的内容 <videoid="video"@canplay="getVidDur()"ref="vueMiniPlayer" ...

最新文章

  1. image vb6 图片自适应_Python人工智能使用OpenCV进行图片形状的中心检测
  2. 天天象棋 残局闯关 第1关
  3. python 真多线程_Python之路200个小例子,在线网页版来了,从此学习更方便!
  4. 不懂电容原理?那是你没看到这些动图
  5. matlab模糊推理,模糊推理系统的matlab代码
  6. 8.从Paxos到Zookeeper分布式一致性原理与实践---Zookeeper 运维
  7. 校验两个文件是否一样(MD5方式:windows,linux,自定义java代码三种方式)——亲测成功
  8. 共轭梯度法及其matlab程序
  9. 计算机审计实验一计划阶段,审计实验1.ppt
  10. 输入年份和月份输出该月有多少天python_输入一个年份和月份,打印出该月份有多少天(考虑闰年),用switch语句编程...
  11. 谈谈JavaScript版本演进史及ES3、ES5区别和特性
  12. IntelliJ IDEA设置豆沙绿背景
  13. 顺丰全栈资源下的自动化运维灵魂
  14. excel表格打印每页都有表头_EXCEL打印小技巧:如何打印出每张纸上都有表头标题的表格?...
  15. 将动画角色导入Unity 3D
  16. android获取imei兼容_Android如何获取双卡手机IMEI的方法示例
  17. java组成_java是由什么组成的?
  18. cJSON详细剖析(四)----cJSON_Print()函数
  19. Zookeeper(2) - 配置详解与启动原理
  20. 【建站教程】万网域名使用万网\QQ企业邮箱,设置解析方法

热门文章

  1. java里面有控制器吗_java怎么运行控制器里的类 java控制台输入类以及
  2. 杂七杂八的前端基础01——函数作用域
  3. Mysql默认密码的查找和修改
  4. Python学习十四:filter()
  5. HttpClient的一种简单实现Demo
  6. Eclipse Color Themes
  7. POJ 1185 炮兵阵地(状态压缩DP)
  8. 安装View Agent失败: The system must be rebooted before installation can continue
  9. MySQL优化篇:SHOW语法
  10. 技术总监,被判刑12年!因公司未兑现股权,愤怒植入代码,牟利333万