flask 视频流直播

本文将介绍如何本地通过浏览器查看远端服务器的摄像头采集到的视频。

服务端

实现实时视频流式传输主要采用服务器推送技术。

服务器在响应请求时,HTTP使用MIME报文格式来封装数据。通常一个HTTP响应只能包含一个数据块。但MIME有一种机制可用一个报文(或HTTP响应)表示将多个数据块,这种机制就是成为“multipart/mixed”的标准MIME类型。

在服务器推送技术中,“multipart/x-mixed-replace”类型的报文由唯一的边界线组成,这些边界线分割每个数据块。每个数据块都有自己的头标,因而能够指定对象相关的内容类型和其他信息。由于“multipart/x-mixed-replace”的特性是每一新数据块取代前一数据对象,因而浏览器中总是显示最新的数据对象。

“multipart/x-mixed-replace”报文没有结尾。也就是说,服务器可以永远保持连接,并发送所需的数据。如果用户不再在浏览器窗口中显示数据流,或者浏览器到服务器间的连接中断(例如用户按“STOP”按钮),服务器的推送才会中断。这是人们使用服务器推送的典型方式。

最后是主文件,利用生成器不断读取摄像头的每一帧图像

# main.py
from flask import Flask, render_template, Response
from camera import VideoCameraapp = Flask(__name__)@app.route('/')
def index():return render_template('index.html')def gen(camera):while True:frame = camera.get_frame()yield (b'--frame\r\n'b'Content-Type: image/jpeg\r\n\r\n' + frame + b'\r\n\r\n')@app.route('/video_feed')
def video_feed():return Response(gen(VideoCamera()),mimetype='multipart/x-mixed-replace; boundary=frame')if __name__ == '__main__':app.run(host='0.0.0.0', debug=True)

使用 opencv 调用摄像头,python opencv 调用摄像头示例代码

import numpy as np
import cv2cap = cv2.VideoCapture(0)while(True):# Capture frame-by-frameret, frame = cap.read()# Our operations on the frame come here# gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)# Display the resulting framecv2.imshow('frame',frame)if cv2.waitKey(1) & 0xFF == ord('q'):break# When everything done, release the capture
cap.release()
cv2.destroyAllWindows()

接下来定义一个 VidelCamera 对象,返回获取从摄像头获取到的每一帧图片

# camera.py
import cv2class VideoCamera(object):def __init__(self):# Using OpenCV to capture from device 0. If you have trouble capturing# from a webcam, comment the line below out and use a video file# instead.self.video = cv2.VideoCapture(0)# If you decide to use video.mp4, you must have this file in the folder# as the main.py.# self.video = cv2.VideoCapture('video.mp4')def __del__(self):self.video.release()def get_frame(self):success, image = self.video.read()# We are using Motion JPEG, but OpenCV defaults to capture raw images,# so we must encode it into JPEG in order to correctly display the# video stream.ret, jpeg = cv2.imencode('.jpg', image)# 对于 python2.7 或者低版本的 numpy 请使用 jpeg.tostring()return jpeg.tobytes()

浏览器

一个 img 标签指向 video_feed 路由

<html><head><title>Video Streaming Demonstration</title></head><body><h1>Video Streaming Demonstration</h1><img src="{{ url_for('video_feed') }}"></body>
</html>

参考

http://opencv-python-tutroals.readthedocs.io/en/latest/py_tutorials/py_gui/py_video_display/py_video_display.html

http://www.jb51.net/article/63181.htm

http://www.chioka.in/python-live-video-streaming-example/

http://blog.csdn.net/gmstart/article/details/7064034

flask 视频流直播相关推荐

  1. H5浏览器下无插件、低延时、RTSP视频流直播

    H5浏览器下低延时RTSP视频流直播 总结 过程 总结 商业级低延时完全可行! 1)有公网用WebRTC,纯私有用flv.js: 2)延时WebRTC能做到200-400ms,flv.js能做到300 ...

  2. Flask视频流传输

    参考资料 在 Flask 里产生流式响应 使用 multipart/x-mixed-replace 实现 http 实时视频流 使用 Flask 进行视频流传输 重新审视 Flask 视频流 目录 流 ...

  3. android rtsp 延时,ijkplayer 单视频流直播延迟问题解决过程

    一开始我尝试是通过设置ijkplayer的参数去修改延迟,参数的修改能把ijkplayer的开播延迟拉到200ms左右,但是随着播放时间增加延迟也在增加,然后带着问题去网上寻找答案,找到暴走大牙和Go ...

  4. FFmpeg+SDL实现简易的rtsp视频流直播

    参考链接:https://blog.csdn.net/leixiaohua1020/article/details/8652605 本文基于雷霄骅博士的文章,将原来支持播放本地文件修改为支持rtsp视 ...

  5. 视频直播点播平台EasyDSS降低视频流直播延迟的2种方法

    视频直播点播平台EasyDSS支持一站式的上传.转码.直播.回放.嵌入.分享等功能,在推流上,可支持手机推流短视频.音乐等音视频文件,提供多种上传方式,支持批量上传.大文件上传.平台视频功能具备超低延 ...

  6. 基于live555的视频直播 DM368IPNC RTSP分析

    因需要,从个人的理解顺序和需求角度对live555的分析与开发整理,包含RTSP Server与RTSP Client.如何直播H.264流与JPEG流等,均进行了探讨,对live555的初学者有一定 ...

  7. 监控实时直播的四分屏的前端展示

    完成运行效果图: 一.四分屏展示样式布局 ###1.通过html.css等来进行样式排版### 根据需求的四分屏的样式:来合理的划分出四个大块,分别用于放置四个播放器: 以四等分结构为例进行前端的排版 ...

  8. Android 直播RTMP流

    原文链接 : How To Stream RTMP live in Android 原文作者 : Mohit Gupt 译文出自 : 开发技术前线 www.devtf.cn 译者 : ayyb1988 ...

  9. 基于IjkPlayer的多路投屏直播

    本文介绍的多路投屏直播,主要是智能交互会议.多人同时投屏的应用场景,但不限于此.现实生活中,早已经出现多路视频监控的应用领域.为了提高开会沟通效率,多人协同.多路投屏互动的场景应运而生.会议投屏对实时 ...

最新文章

  1. Mysql数据库存储引擎--转
  2. C语言 跨函数使用内存.
  3. BAPI_CONTRACT_CREATE
  4. cocos2dx进阶学习之CCTMXLayer
  5. linux使用ntp时间同步
  6. Quick-Cocos2d-x初学者游戏教程2
  7. [CareerCup] 4.1 Balanced Binary Tree 平衡二叉树
  8. mysql用户变量递归_MYSQL递归树查询的实现
  9. sql 只要一个字段相同则只显示一条数据_数据库
  10. ASP.NET 缓存(10)
  11. 【遥感图像处理软件】ArcGIS Pro 使用总结
  12. Linux Mint,Ubuntu 18 ,Deepin15.7 安装mysql 没有提示输入密码,修改root用户密码过程...
  13. com.alibaba.datax.common.exception.DataXException: Code:[ESWriter-03]
  14. 阿甘正传中的人生哲理
  15. Matlab信道容量的迭代计算实验
  16. 利用SPARQLWrapper包从dbpedia中获取实体
  17. 【自然语言处理】BERT GPT
  18. 【天华学术】古代文学论文:酒文化传播中唐代文学的作用分析(节选)
  19. Nutanix 助力苏州金龙引领中国客车行业智能制造转型
  20. 考虑阶梯式碳交易机制与电制氢的综合能源系统热点优化

热门文章

  1. 【干货】PCB线宽与电流关系
  2. SSL/TLS/DTLS对比
  3. php fpm设置时区,php设置时区的解决方案
  4. Arduino基础篇(二)-- 常用的基本函数
  5. CDP产品大观之“准CDP”
  6. NVDIMM为存储加速
  7. NOIP2018 自闭记
  8. 思科模拟器8.1版本身份验证失败禁用网络解决
  9. 软件工程导论第六版 第一章 软件工程学概述知识点总结(上)
  10. 一个工厂有m条流水线