使用手机摄像头实现视频监控实时播放
使用手机摄像头实现视频监控实时播放
一、概述
视频监控实时播放的原理与目前较为流行的直播是一致的,所以采用直播的架构实现视频监控实时播放,流程图如下:
目前实时视频流的传输协议有以下几种:RTSP、RTMP、HLS、Http-flv。
安卓APP开发使用HBuilder,而HBuilder内置了LivePusher直播推流控件,该控件使用了RTMP协议,所以暂时选择使用RTMP协议
协议 | RTSP | RTMP | HLS | Http-flv |
---|---|---|---|---|
实时预览 | √ | √ | √ | √ |
实时回放 | √ | √ | √ | √ |
定位 | √ | √ | √ | × |
暂停恢复 | √ | √ | √ | × |
视频加密 | √ | × | √ | √ |
视频格式 | H264/H265 | H264/H265 | H264 | H264/H265 |
音频格式 | G711u, G711a, G726, MP2L2, AAC | AAC | AAC | AAC |
首屏时间 | 1秒 | 1秒 | 3~4秒 | 1秒 |
播放延迟 | 1秒 | 1秒 | 3~4秒 | 1秒 |
二、RTMP服务器搭建
RTMP服务器使用nginx+rtmp模块搭建,linux下可以下载nginx源代码+nginx-rtmp-module模块重新编译,windows下nginx编译较为麻烦,可以下载nginx 1.7.11.3 Gryphon,然后再下载nginx-rtmp-module模块进行配置即可
相关软件下载地址
nginx地址:https://github.com/nginx/nginx
nginx-rtmp-module地址:https://github.com/arut/nginx-rtmp-module/
nginx 1.7.11.3 Gryphon地址:http://nginx-win.ecsds.eu/download/nginx 1.7.11.3 Gryphon.zip
ffmpeg地址:https://ffmpeg.org/download.html
服务器搭建步骤
- 下载nginx 1.7.11.3 Gryphon后解压到任意目录,注意目录中尽量不带中文字符和空格
- 下载nginx-rtmp-module(直接从github clone或下载zip压缩包),将nginx-rtmp-module目录放到nginx的根目录下,与conf目录同级
- 将conf/nginx-win.conf复制一份,改名为nginx.conf
- 配置nginx.conf文件,增加rtmp的server,同时给http的server中增加路径映射
- 启动nginx
- 打开http://localhost/stat查看状态
- 使用ffmpeg进行直播测试
nginx配置
在http段之前增加以下内容:
rtmp {server {listen 1935;application live {live on;record off;publish_notify on;#on_publish http://localhost:8080/newsweb/api/v1/rtmp/on_publish;#on_publish_done http://localhost:8080/newsweb/api/v1/rtmp/on_publish_done;#on_play http://localhost:8080/newsweb/api/v1/rtmp/on_play;#on_play_done http://localhost:8080/newsweb/api/v1/rtmp/on_play_done;}application hls {live on;hls on; #是否开启hlshls_path temp/hls; #本地切片路径hls_fragment 8s; #本地切片长度publish_notify on;#on_publish http://localhost:8080/newsweb/api/v1/rtmp/on_publish;#on_publish_done http://localhost:8080/newsweb/api/v1/rtmp/on_publish_done;#on_play http://localhost:8080/newsweb/api/v1/rtmp/on_play;#on_play_done http://localhost:8080/newsweb/api/v1/rtmp/on_play_done;}}
}
在http->server下,location /段之前增加以下内容:
location /stat {rtmp_stat all;rtmp_stat_stylesheet stat.xsl;}location /stat.xsl {root nginx-rtmp-module/;}#HLS配置开始,这个配置为了`客户端`能够以http协议获取HLS的拉流location /hls { #server hls fragments types{ application/vnd.apple.mpegurl m3u8; video/mp2t ts; } alias temp/hls; expires -1; }
注:其中rtmp段中的on_publish、on_publish_done、on_play、on_play_done是事件触发,当直播开始、直播结束、观看开始、观看结束时,会触发指定的URL,并将推流和观看时的相关参数传递到相关URL上,如果HTTP返回的状态码不是200时表示鉴权失败,会直接阻断下一步的操作
直播测试
- 本地找一个mp4文件
- 使用在ffmpeg\bin目录下执行推流命令
- 使用ffplayer播放视频
#推流地址解释:rtmp://localhost:1935/live/home?p=v
#rtmp://为协议名
#localhost是域名
#1935为端口号,rtmp默认为1935端口
#live为nginx.conf中配置的rtmp标记
#home为指定字符串,生产环境中可以设置为设备ID或用户ID
#?p=v是附加参数,用于鉴权和记录直播开始使用#ffmpeg推流测试:
ffmpeg.exe -re -i c:\ffmpeg\inputfile.mp4 -vcodec libx264 -acodec aac -f flv rtmp://127.0.0.1:1935/live/home #ffmpeg 拉流测试:
ffplay.exe rtmp://localhost:1935/live/home
三、安卓APP推流
安卓APP推流使用HBuilder的LivePusher直播推流控件,代码如下:
<!DOCTYPE html>
<html><head><meta charset="utf-8"><meta name="viewport" content="width=device-width,initial-scale=1.0,maximum-scale=1.0,user-scalable=no"/><title>Video Example</title><script type="text/javascript">var pusher = null;// H5 plus事件处理function plusReady(){// 创建直播推流控件pusher = new plus.video.LivePusher('pusher',{url:'rtmp://172.16.70.182:1935/live/phone',mode:'SD',muted:false,});pusher.preview();// 监听状态变化事件pusher.addEventListener('statechange', function(e){console.log('statechange: '+JSON.stringify(e));}, false);}document.addEventListener('plusready', plusReady, false);// 设置推流服务器function updatePusher() {var url= document.getElementById('pushurl').value;pusher.setOptions({url:url});}// 开始推流function startPusher() {console.log(pusher)pusher.start();}// 切换摄像头function switchCamera() {pusher.switchCamera();}</script></head><body style="margin:0;padding:0;text-align:center;"><div id="pusher" style="width:100%;height:300px;background-color:#000000;margin:auto"></div><br/><input type="text" id="pushurl" value="rtmp://172.16.70.182:1935/live/phone" style="width: 500px;"/> <br><br><button onclick="updatePusher()">更新推流服务器</button><br/><br><button onclick="startPusher()">开始推流</button> <br><br><button onclick="switchCamera()">切换摄像头</button><br/><br/></body>
</html>
四、客户端观看直播
目前暂时使用VLC进行视频播放
VLC下载地址:https://www.videolan.org/vlc/
使用手机摄像头实现视频监控实时播放相关推荐
- hutool 读取扩展名文件_Python OpenCV视觉智能感知第一讲——读取摄像头或视频文件并播放显示...
Python OpenCV视觉智能感知 第一讲--读取摄像头或视频文件并播放显示 本部分内容将深入.全面.详细地介绍如何使用Anaconda Python和OpenCV读取摄像头或视频文件,并进行播放 ...
- uni-app引入海康威视h5player实现视频监控的播放
uni-app引入海康威视h5player实现视频监控的播放 知识储备 工具下载 webplayer.html h5player.vue 视频时效 传递参数为中文 webview 返回上一页 在H5环 ...
- domoticz用手机摄像头实现家庭监控
由于没有现成的摄像头,我想有没有可以把手机摄像头变成监控的app,在网上找了找发现还真有,名字叫做ip摄像头,顾名思义 配置界面如下 通过本地广播设置端口号和用户名以及密码,因为是局域网我没有设置,通 ...
- 视频监控实时接入——以海康威视为例(2023.2.16)
海康威视实时视频监控接入学习 2023.2.16 引言 1.视频协议简介 1.1 RTSP--Real Time Streaming Protocol(实时流传输协议) 1.2 RTMP--Real ...
- vue项目接入视频监控系列-------播放器的选择
在智慧城市发展迅速的今天,视频监控接入web平台的需求似乎成了不可或缺和潮流.博主准备对自己开发视频监控项目的经历做个记录,整理成一个系列的文章. 在前端发展迅速的今天,h5的出现让在web平台实现无 ...
- 基于SiamMask网络的智能视频监控实时人员跟踪系统
实时视频监控系统广泛应用于公共区域.商业建筑和公共基础设施等各种环境中.在不同的视频监控应用中,人的检测.分割和跟踪是一个关键和关键的任务.研究人员提出了不同的图像处理和基于人工智能的方法(包括机器和 ...
- 手机移动端视频全屏播放(兼容Android与iOS)
在做移动端项目时,做个视频播放是不可避免的,大部分情况下都是点击一个按钮,视频全屏播放,下面将对这个情况进行分析与记录. html: <video height="100%" ...
- ping 丢包 网络摄像头_视频监控系统的摄像头掉线看交换机连接注意事项
某智创园做了一个监控工程,使用64台200万的IPC以及两台64路NVR,出现多个通道频繁掉线.黑屏.经初步判断,我们怀疑是网络传输存在问题,决定前往现场排查和解决问题,确保工程交付. 问题现象 到达 ...
- vue用input调起手机摄像头录制视频
<input ref="inputVideo" type="file" name="video" id="video-inp ...
最新文章
- vue的自定义标签tag是什么意思啊_好好的衣服为什么洗一次就废,服装标签上的图标究竟是什么意思?...
- Fiddler抓包工具详解(三)(fiddler监控面板+辅助工具)
- 截图识字工具下载使用
- .NET Framework VS .NET Core
- 在Asp.net MVC使用jqGrid--代码少点再少点
- 数组、链表、哈希……Qt中丰富的容器类
- Spring AOP源码分析(二)JDK动态代理和CGLIB介绍
- C#中xml序列化域反序列化
- 如何在Debian下快速安装中文字体
- 《软件构架实践》阅读笔记4
- php pdo setfetchmode,PDOStatement::setFetchMode
- 电线电缆的基本测试方法
- uniapp H5 扫码 扫一扫 功能
- pythonexcel怎么读_python怎么读excel
- Linux:Ubuntu系统解决不能上网问题
- 华硕主板VMware中安装Ubuntu16.04中的BIOS设置问题
- iOS中开发者账号分类
- 一个技术总监的个人综合评估,希望对大家能有所帮助(转)
- 【Odoo】集成flowable,解决复杂的审批流
- 抓包工具--Fiddler
热门文章
- 如何查询电脑的是ip地址
- SAP公司间STO里发货单过账后触发的IDoc报错 – Could not find code page for receiving system –
- 服务器U启装debain系统,使用U盘安装Debian系统图文教程
- php正则表达式 或与,PHP和正则表达式
- mssql保留两位小数
- 云e办学习笔记(七)登录返回token(未完全)
- 黄金3:雨露均沾-不要让你的线程在竞争中被“饿死”
- 老爸:“你做的什么游戏测试简直是不务正业!”——我上去就是一顿猛如虎的解释。
- oracle的delimiter,Oracle Q-quote delimiter
- 网络数据包分析工具列表