一、传统的安防监控/流媒体音视频直播基本架构

A/V device 信号采集(yuv/rgb) ---> 转码(h264/265) ---> 网络推送(rtsp/rtmp/http/onvif/p2p) ---> nvr/dvr/proxy/relay server(局域网系统可以不用中转服务器) ---> 客户端播放器(各种app player)

二、互联网直播基本架构

A/V device 信号采集(data source) --->websocket server ---> html5

传统的方式,每一个模块都有相当的工作量,极其繁琐,经过这一轮互联网的洗礼,基本就剩下一地鸡毛了,再到2016年,微软联合google,w3c等厂商推出html MSE, 基本就毛都不剩了。

三、废话少说,来个demo演示一下新把戏

A/V device 信号采集(三张图片合成视频数据流) --->websocket server(flask) ---> html5(各大浏览器都支持了)

1、安装python库

sudo apt-get install python-pip
sudo pip install flask

2、下载flask-video-streaming源码

https://github.com/miguelgrinberg/flask-video-streaming

运行app.py

python app.py

3、打开浏览器访问app.py里设置的ip和port

Running on http://0.0.0.0:5000/ (Press CTRL+C to quit)

demo程序是用了3张图片来合成视频流

4、我的笔记本电脑内置摄像头,可以用来采集视频流

1) 为了省事,安装opencv来采集

sudo pip install opencv-python
2) 将app.py里的数据源换成笔记本内置的摄像头   
#from camera import Camera
from camera_opencv import Camera

3)将app.py里的IP改成电脑真实的地址192.168.5.59

改完运行app.py

python app.py

5、Production Web Server

flask默认使用自带的uWSGI Web Server,比较弱,需要高并发可以采用Gunicorn Web Server等其他强劲的web server

拷贝一段生产部署的说明

Lastly, I think if you plan to use this server for real, you should use a more robust web server than the one that comes with Flask. A very good choice is to use Gunicorn:

$ pip install gunicorn

With Gunicorn, you can run the server as follows (remember to set the CAMERA environment variable to the selected camera driver first):

$ gunicorn --threads 5 --workers 1 --bind 0.0.0.0:5000 app:app
$ CAMERA=opencv gunicorn --worker-class gevent --workers 1 --bind 0.0.0.0:5000 app:app

详细文档参考链接

https://blog.miguelgrinberg.com/post/flask-video-streaming-revisited

因为是http/websocket协议传输数据,所以,电脑,手机等设备都能访问。

具体细节 Video Streaming with Flask

https://blog.miguelgrinberg.com/post/video-streaming-with-flask

四、拓展

A/V device 信号采集(data source) --->websocket server ---> html5

1)A/V设备采集的数据源可能是各种格式(h264 raw / rtsp /rtmp source),由于html支持的数据格式有限,貌似只能是ISO BMFF (MP4) fragments,这个时候就有了html MSE,各种编码/解码/转码都有了,不想用MSE,html还可以嵌入ffmpeg.

2) websocket server 可以自行开发,也有很多开源的可用

3)客户端播放是用的html5 video 和 audio标签来获取数据, html5实际是用javascript来处理数据的,所以也可以不用浏览器来播放,js平台都可以,比如nodejs.

再来个demo, 数据源读的是h264 raw,websocket用的golang的一个库,播放器就是html5

https://www.cnblogs.com/programmer-wfq/p/7281894.html
https://github.com/ChihChengYang/wfs.js
https://github.com/MarkRepo/wfs.js

五、三大组件定制化开发

1、设备数据采集

数据采集应该是设备厂商该干的事情, 这里用python库采集,录放camera

sudo apt-get install libopencv-dev
sudo apt-get install python-opencv

import cv2
cap = cv2.VideoCapture("rtsp://admin:admin@192.168.2.64:554//Streaming/Channels/1")
ret,frame = cap.read()
while ret:
ret,frame = cap.read()
cv2.imshow("frame",frame)
if cv2.waitKey(1) & 0xFF == ord('q'):
break
cv2.destroyAllWindows()
cap.release()

http://blog.51cto.com/guoeric/1852630

2、websocket server

推荐flask,精简,性能强劲,方便拓展

flask demo(upload/download/method/stream)

http://www.bjhee.com/flask-ad5.html

cd flask-ad5

python flask-ad5.py

1) http://0.0.0.0:5000/

hello,world !

2) http://0.0.0.0:5000/upload

upload file

3) http://0.0.0.0:5000/large.csv

download large.csv file

4) http://0.0.0.0:5000//method

yield request method

5) http://0.0.0.0:5000/stream.html

read server.log and response

3、html5 player

1)w3school 亲自试一试的功能太棒了,有源码,有运行结果。

http://www.w3school.com.cn/tags/tag_video.asp

http://www.w3school.com.cn/tags/att_video_controls.asp

http://www.w3school.com.cn/tags/tag_audio.asp

http://www.w3school.com.cn/tags/att_audio_controls.asp

2)让所有浏览器支持HTML5 video视频标签

https://www.zhangxinxu.com/wordpress/2010/03/every-browser-support-html5-video/

3)还可以植入第三方播放器video.js

https://github.com/videojs/video.js

4) h5 live stream (ffmpeg + nginx + h5)

https://www.cnblogs.com/lidabo/p/7099633.html

5) html5 with MSE live streaming

html5 player for raw h.264 streams

https://github.com/ChihChengYang/wfs.js

use html5 video tag with MSE for raw h264 live streaming.

https://github.com/MarkRepo/wfs.js

end

html5 live stream的更多相关文章

  1. HTML5 stream video player

    HTML5 stream video player Aliplayer https://player.alicdn.com/aliplayer/index.html https://help.aliy ...

  2. 多文件上传插件Stream,是Uploadify的Flash版和Html5版的结合,带进度条,并支持html5断点续传(附件上传),拖拽等功能

    是根据某网的文件上传插件加工而来,支持不同平台(Windows, Linux, Mac, Android, iOS)下,主流浏览器(IE7+, Chrome, Firefox, Safari, 其他) ...

  3. 脑洞大开之采用HTML5+SignalR2.0(.Net)实现原生Web视频

    目录 对SignalR不了解的人可以直接移步下面的目录 SignalR系列目录 前言 - -,我又来了,今天废话不多说,我们直接来实现Web视频聊天. 采用的技术如下: HTML5 WebRTC Si ...

  4. HTML5网页录音和压缩,边猜边做..(附源码)

    宣传一下自己的qq群: (暗号:C#交流) 欢迎喜欢C#,热爱C#,正在学习C#,准备学习C#的朋友来这里互相学习交流,共同进步 群刚建,人不多,但是都是真正热爱C#的 我也是热爱C#的 希望大家可以 ...

  5. 后HTML5时代

    十二年前,无论多么复杂的布局,在我们神奇的table面前,都不是问题:十年前,阿捷的一本<网站重构>,为我们开启了新的篇章:八年前,我们研究yahoo.com,惊叹它在IE5下都表现得如此 ...

  6. HTML最新标准HTML5小结

    写在前面 HTML5出来已经很久了,然而由于本人不是专业搞前端的,只知道有这个东西,具体概念有点模糊(其实就是一系列标准规范啦):因此去年(2015.11.09),专门对HTML5做了个简单的小结,今 ...

  7. 使用HTML5技术控制电脑或手机上的摄像头

    移动设备和桌面电脑上的客户端API起初并不是同步的.最初总是移动设备上先拥有某些功能和相应的API,但慢慢的,这些API会出现在桌面电脑上.其中一个应用接口技术就是getUserMedia API,它 ...

  8. HTML5 video标签播放视频下载原理

    HTML5 video https://github.com/remy/html5demos/blob/master/demos/video.html <video preload=" ...

  9. HTML5服务器推送消息的各种解决办法

    摘要 在各种BS架构的应用程序中,往往都希望服务端能够主动地向客户端推送各种消息,以达到类似于邮件.消息.待办事项等通知. 往BS架构本身存在的问题就是,服务器一直采用的是一问一答的机制.这就意味着如 ...

随机推荐

  1. Linux下配置Hadoop伪分布式环境

    1. 准备Linux环境 提示:我用的系统是CentOS 6.4. 1.0点击VMware快捷方式,右键打开文件所在位置 -> 双击vmnetcfg.exe -> VMnet1 host- ...

  2. C语言错误: CRT detected that the application wrote to memory after end of heap buffer

    CRT detected that the application wrote to memory after end of heap buffer 多是中间对其进行了一些操作,在程序结束处,释放内存 ...

  3. spark 系列文章汇总

    源码导读 spark 源码导读1 从spark启动脚本开始 spark 源码导读2 进一步窥探Master.Worker启动及通信机制 spark 源码导读3 进一步理解脚本调用关系 spark 源码 ...

  4. 【BZOJ】1688: [Usaco2005 Open]Disease Manangement 疾病管理(状压dp)

    http://www.lydsy.com/JudgeOnline/problem.php?id=1688 很水的状压.. 提交了很多次优化的,但是还是100msT_T #include <cst ...

  5. jquery widgets grid 重置列配置

    $("#jqxGridByAttendanceDetail").on("bindingcomplete", function (event) { // your ...

  6. php计算数组相同值出现次数的代码(array_count_values)

    php计算数组相同值出现次数,可以使用php自带函数array_count_values : 说明 array array_count_values ( array $input )array_cou ...

  7. hrbustoj 1104:Leyni, LOLI and Line(解析几何,斜截式的应用)

    Leyni, LOLI and Line Time Limit: 1000 MS    Memory Limit: 65536 K Total Submit: 181(54 users)   Tota ...

  8. django 模型中的计算字段

    models.py class Person(models.Model): family_name= models.CharField(max_length=20, verbose_name='姓') ...

  9. malloc free, new delete 的异同点

    相同点: 都可以动态的申请并释放内存 不同点: 1. 用法不同 <1> malloc 函数为 void* malloc(size_t size), 用于申请一块长度为 size 字节的内存 ...

  10. oracle的存储过程如何返回结果集

    CREATE OR REPLACE PACKAGE pkg_test AS     TYPE myrctype IS REF CURSOR;       PROCEDURE get (p_id NUM ...