网页播放摄像头视频一种新的实现方式(非ocx方式)
前言 出于安全性考虑,浏览器对网页调用本地资源做了诸多限制。单纯的js是不能调用本地摄像头的,最常用的解决方案是通过ocx来实现。ocx是IE浏览器的扩展插件,并不是通用标准,很多浏览器并不支持ocx。有没有别的方案实现视频播放?作者另辟蹊径,通过非常规手段实现了摄像头视频捕做;这种方案采用标准js代码实现,可以适应任何浏览器。
(一) 实现效果

图的左边是网页显示的视频,右端是本地app显示的视频。看到此图,你也许猜到实现方案的一点端倪。网页视频也是借助本地程序之力实现的;常规的实现方案是借助ocx。本文实现方案相比于ocx方案有如下优点:
- 适应任何浏览器。ocx主要适应IE浏览器。
- ocx与网页在同一个进程。如果ocx不稳定,容易造成浏览器崩溃。
- 网页打开关闭也会造成ocx生成和卸载,性能受影响。
(二)实现方案示意图

网页通过ajax从应用程序获取视频数据; 应用程序实现了http服务,并将视频数据通过http协议发送到网页。下文逐步讲解每一步处理过程。
(三)网页播放视频流
视频本质上是图片的连续播放。首先要解决的问题是:ajax获取了图像数据,能实时更新显示。html显示图像可用如下方式:
<img id="idImg" src="data:image/jpg;base64,/9j/4AAQS...(base64表示的图像数据)">
src对应的数据可用通过ajax,从http服务器获取。设置定时器,不断的从服务器获取图像信息,不断的更新img标签的src数据。这就实现了视频播放。
ajax调用代码如下:
function GetImgFromCarmera() {
var setValue = {
'GetImg': "Base64"
};
var json_setValue = JSON.stringify(setValue);
$.ajax({
type: "Post",
url: "http://127.0.0.1:18168/Invent/Web/SetAppParam",
data: json_setValue,
async: true,
success: function (result) {
var jsonObj = JSON.parse(result);
var img = document.getElementById("idImg");
img.src = jsonObj.Img;
},
error: function (XMLHttpRequest, textStatus, errorThrown) {
//alert(textStatus + ":" + errorThrown);
}
});
}
从服务器获取的数据就是base64格式的图像数据,直接赋值就能显示图像。网页端的调用是很简单。关键是在本地实现http服务。
(四)本地app实现http服务
c#实现http服务并不困难,有封装非常好的类库。由于调用并不频繁,所以对http服务器的性能要求不高。采用最方便的实现方式即可。如果需要非常高效http服务,可以参考我的文章《自己动手,开发轻量级,高性能http服务器》。本文不对如何实现http服务器再做叙述。
(五)实现摄像头视频捕做
opencv对摄像头调用提供了很好的封装。具体调用方法见文章《基于opencv,开发摄像头播放程序》
后记 本文提供了网页操作本地资源的一种新思路;该解决方案不仅仅可以适应于摄像头播放。本地应用程序可以实现的操作,网页都可以实现;网页用过本地应用借力打力,无所不能。采用此方案不用再担心浏览器兼容问题了,开发人员终于可以睡个好觉了。
网页播放摄像头视频一种新的实现方式(非ocx方式)的更多相关文章
- Spring中@Value注解使用——一种新的直接读取配置文件的方式
1.@Value注解作用 该注解的作用是将我们配置文件的属性读出来,有@Value(“${}”)和@Value(“#{}”)两种方式. 2.@Value注解作用的两种方式 场景 假如有以下属性文件de ...
- mp4网页播放代码,有声音无图像的解决办法~
mp4网页播放代码,有声音无图像的解决办法~ 关于网页播放mp4格式的视频,找了一些插件,这里推荐一下video.js 官方网址:http://www.videojs.com/ github ...
- 源代码方式向openssl中加入新算法完整具体步骤(演示样例:摘要算法SM3)【非engine方式】
openssl简单介绍 openssl是一个功能丰富且自包括的开源安全工具箱.它提供的主要功能有:SSL协议实现(包括SSLv2.SSLv3和TLSv1).大量软算法(对称/非对称/摘要).大数运算. ...
- EasyNVR网页H5无插件播放摄像机视频功能二次开发之直播通道接口保活示例代码
背景需求 随着雪亮工程.明厨亮灶.手机看店.智慧幼儿园监控等行业开始将传统的安防摄像头进行互联网.微信直播,我们知道摄像头直播的春天了.将安防摄像头或NVR上的视频流转成互联网直播常用的RTMP.HT ...
- Windows Media Player安装了却不能播放网页上的视频
前段时间遇到Windows Media Player安装了却不能播放网页上的视频的问题,在网上查找资料时,发现大部分资料都没能解决我这个问题.偶尔试了网上一牛人的方法,后来竟然解决了.现在再找那个网页 ...
- potplayer 网页调用potplayer播放本地视频
网页调用potplayer播放本地视频 CreateTime--2018年1月3日10:36:24 Author:Marydon 源码展示: <!DOCTYPE html> <h ...
- 【转】Unity3D研究院之两种方式播放游戏视频
http://www.xuanyusong.com/archives/1019 Unity3D中播放游戏视频的方式有两种,第一种是在游戏对象中播放,就好比在游戏世界中创建一个Plane面对象,摄像 ...
- C#开发可播放摄像头及任意格式视频的播放器
前言 本文主要讲述,在WPF中,借助Vlc.DotNet调用VLC类库,实现视频播功能,下面我们先来做开发前的准备工作. 准备工作 首先,我们创建一个项目WpfVLC,然后,进入Neget搜索Vlc. ...
- 网页背景H5视频自动播放---PC端、移动端兼容问题完美解决方案(IOS、安卓、微信端)
最近公司官网需要使用视频当做banner背景且自动播放,并且因为是官网需要做到PC端和移动端都可以适配兼容,这些问题很是头疼: 兵来将挡,水来土掩,进过查阅相关技术资料,现已完美兼容PC端和移动端.下 ...
随机推荐
- JQuery第一章js 上机+课后
=============上机1 包含字母 <!DOCTYPE html> <html> <head> <title>sj1.html& ...
- 主机cpu突然飙高,如何快速排查问题
[问题发现] 使用zabbix软件监控服务器时发现cpu突然异常,在业务主机上使用top命令查看系统的整体运行情况,使用top命令后发现mysqld占用CPU特别高,初步判断可能是mysqld出现问题 ...
- 「Azure」数据分析师有理由爱Azure之一-Azure能带给我们什么?
前面我们以相同的方式从数据分析师的视角介绍了Sqlserver,本系列亦同样地延续下去,同样是挖掘数据分析师值得使用的Azure云平台的功能.因云平台功能太多,笔者所接触的面也十分有限,有更专业的读者 ...
- 1A2B
玩了玩www.syscan.org的小游戏,第三关是一个1A2B的问题,写个小脚本爆破一波,同时分享下脚本(把数固定到代码里了,要在别处用的自己改吧). #-*-coding:utf8;-*- #qp ...
- js实现字符串转JSON格式
在浏览器前端实现字符串转JSON格式,有多种方法,总结如下: 方法1. js函数,eval() 语法: var obj = eval ("(" + txt + ")&qu ...
- jdk1.8源码解析:HashMap底层数据结构之链表转红黑树的具体时机
本文从三个部分去探究HashMap的链表转红黑树的具体时机: 一.从HashMap中有关“链表转红黑树”阈值的声明: 二.[重点]解析HashMap.put(K key, V value)的源码: 三 ...
- codeforces 327 B. Hungry Sequence
题目链接 题目就是让你输出n个数的序列,要保证该序列是递增的,并且第i个数的前面不能保护它的约数,我直接先对前100000的素数打表,然后输出前n个,so easy. //cf 191 B #incl ...
- Chrome浏览器F12开发者工具简单使用
1.如何调出开发者工具 按F12调出 右键检查(或快捷键Ctrl+Shift+i)调出 2.开发者工具初步介绍 chrome开发者工具最常用的四个功能模块:元素(ELements).控制台(Conso ...
- 3、大型项目的接口自动化实践记录----开放API练习
开始做实际项目前,先拿个网上的简单API练下手 一.API说明: 接口信息 接口名:京东获取单个商品价格 地址:http://p.3.cn/prices/mgets 入参:skuids=J_商品ID& ...
- jdk1.8 HashMap底层数据结构:深入解析为什么jdk1.8 HashMap的容量一定要是2的n次幂
前言 1.本文根据jdk1.8源码来分析HashMap的容量取值问题: 2.本文有做 jdk1.8 HashMap.resize()扩容方法的源码解析:见下文“一.3.扩容:同样需要保证扩容后的容量是 ...