uni-app引入海康威视h5player实现视频监控的播放
首先下载海康威视h5player的demo

在uni-app项目中static文件夹下创建文件目录,我命名为h5player

将demo中bin文件夹下的文件原封不动复制到h5player文件夹中,txt文件可以删除

h5player根目录下新建webplayer.html文件

引入h5player.min.js
<script src="./h5player.min.js"></script>

在webplayer.html文件中,新增样式,宽高根据自己的需求调整
<style type="text/css">
html,
body {
/* width: 100%; */
/* height: 100%; */
margin: auto;
overflow: hidden;
background-color: #000;
-webkit-user-select: none;
user-select: none;
}
.myplayer {
width: 100%;
height: 2.21rem;
}
</style>
在页面创建dom元素
<div id="play_window" class="myplayer"></div>
获取url中参数的方法
//取url中的参数值
function GetQueryString(name) {
var reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)", "i");
var r = window.location.search.substr(1).match(reg);
if (r != null) return unescape(r[2]);
return null;
}
初始化插件
// 初始化插件
var myPlugin = new JSPlugin({
szId: 'play_window', //需要英文字母开头 必填
szBasePath: './', // 必填,引用H5player.min.js的js相对路径
})
获取视频播放流以后,开始播放,播放成功后抓图本地存储
// 获取视频播放流
var playURL = GetQueryString("cameraUrl")
// 有视频流地址以后,才进行播放
if(playURL){
// 窗口下标
var curIndex = 0;
// 获取监控点唯一标识,方便作为抓图存储的key
var cameraIndexCode = GetQueryString("cameraIndexCode")
// 视频预览
myPlugin.JS_Play(playURL, {
playURL,
mode: 1
}, curIndex).then(() => {
console.info('JS_Play success 播放成功');
// do you want...
// 抓图
var fileName = 'img';
var fileType = 'JPEG';
//不进行下载,数据回调
myPlugin.JS_CapturePicture(curIndex, fileName, fileType,imageData => {
console.info('JS_CapturePicture success 抓图成功'); //2.1.0开始全是base64,之前的版本存在blob或者是base64
// do you want...
plus.storage.setItem(cameraIndexCode,imageData);
})
}, (err) => {
console.info('JS_Play failed:', err);
// do you want...
});
}
在uni-app应用内,pages页面中需要用到视频播放的页面,创建web-view组件

web-view组件的src需要动态改变,所以存储在data数据里

因为web-view组件默认就是占据整个视口的高宽,所以我们需要设置web-view的宽高,调整位置
// 设置web-view的宽高,调整位置
setHeight(){
var height = 350; //定义动态的高度变量,如高度为定值,可以直接写
var currentWebview = this.$scope.$getAppWebview(); //获取当前web-view
setTimeout(function() {
var wv = currentWebview.children()[0];
wv.setStyle({ //设置web-view距离顶部的距离以及自己的高度,单位为px
top:300 , //此处是距离顶部的高度,应该是你页面的头部
height: height , //webview的高度
scalable: false, //webview的页面是否可以缩放,双指放大缩小,
})
}, 500); //如页面初始化调用需要写延迟
},
获取视频流地址,在 web-view 中只需要通过 URL 就可以向 H5 进行传参,通过url将数据传入webplayer.html就可以播放监控视频了
// 获取视频流
previewURLs(){
this.$api.previewURLs(this.cameraIndexCode,res=>{
this.cameraUrl = res.data.url;
console.log("previewURLs",this.cameraUrl);
this.webURL="../../../static/h5player/webplayer.html?cameraIndexCode="+this.cameraIndexCode+"&cameraUrl="+this.cameraUrl
});
},
这就是在uni-app应用内嵌入h5页面,如果我们还要在uni-app应用页面中,添加其他组件模块,记得避开h5页面,web-view组件的层级是最高的。
获取的视频播放地址如果是有时效的,还要开启一个定时器,定时刷新获取url
// 视频流地址失效后,重新刷新获取地址
onReady() {
// 定时获取视频播放流
this.timer = setInterval(() => {
this.previewURLs();
}, 100000)
},
onHide() {
// 关闭负荷趋势定时器
if(this.timer) {
clearInterval(this.timer);
this.timer = null;
}
},
这种处理方式不太合适,可以配置为没有时效的链接
传入web-view的数据如果是中文,需要进行编码然后传入,否则会出现乱码
//这里对要传入到webview中的参数进行encodeURIComponent编码否则中文乱码
this.url+=encodeURIComponent(data.data)
webview 返回上一页的时候,改变传入的参数就要重新打开一个页面,返回的时候就要多次返回。可以先关闭webview然后跳转页面,具体参考:https://blog.csdn.net/z14322/article/details/125702942。
应用端uni-app代码:
onLoad: function() {
window.addEventListener('message', function(e) { // 监听 message 事件
console.log(e.origin);
console.log("从" + e.origin + "收到消息: " + e.data);
});
}
网页webview代码:
//向uniapp发送信息
function sendMsgToUniapp(value) {
parent.postMessage(value, "*");
}
更多内容可以参考:https://blog.csdn.net/liu2004051957/article/details/126886897。
createPlayerIns() {
this.playerIns = new window.JSPlugin({
szId: 'play_window', //需要英文字母开头 必填
szBasePath: '/static/h5player/',
iMaxSplit: 1,
iCurrentSplit: 1,
bSupporDoubleClickFull:false,
openDebug:true,
oStyle: {
border: "#f00",
borderSelect: "#FFCC00",
background: "#000"
}
})
},
playVideo() {
let playURL = this.cameraUrl;
alert(playURL)
this.playerIns.JS_Play(playURL, {
playURL,
mode: 1
}, 0).then(() => {
alert("成功播放视频")
}, (err) => {
alert('视频播放失败:' + playURL + JSON.stringify(err));
});
},
新增的文件仍然放在static中

在index.html中引入h5player.min.js

例如,运行H5页面,请求一个地址资源,如果不是本站地址,浏览器就会报跨域错误,这样访问受限问题呈现例如,项目代码里是这样写的,运行H5测试uni.request({ url:'https://gitcode.net/zs1028/stat...ouces_2023/-/...', success(res){ console.log(res) }, fail(err){ console.error(err) }})因为https://gitcode.net不是本站地址,根据浏览器同源策略,是会报跨域错误,解决步骤打开项目的manifest.json文件,以源码视图查看,添加以下代码{ //.
先给大家看看最终效果首先我们来定义数据data(){ return{ lsit:[ 'https://gimg2.baidu.com/image_search/src=http%3A%2F%2Fpic118.nipic.com%2Ffile%2F20161216%2F24271963_122609717000_2.jpg&refer=http%3A%2F%2Fpic118.nipic.com&app=2002&size=f9999,10000&q=a80&n=0&g=0n&fmt=auto?sec=1656923017&t=183ece148b13b64e9dd503afd1b15c91'
所以基本上有一个按钮,点击它会打开并全屏播放视频。我想在用户退出全屏但无法捕获该事件时停止视频。现在我用它作为开始http://codepen.io/bfred-it/pen/GgOvLM谁能告诉我一个可能的解决方案。HTML:playfullscreenJS:varplayer,iframe;var$=document.querySelector.bind(document);//initplayerfunctiononYouTubeIframeAPIReady(){player=newYT.Player('player',{height:'200',width:'300',vide
我正在使用WebRTC在对等点之间传输视频,但某些客户端的网络条件变化通常会导致接收到的视频流质量发生变化。人们将这些质量下降归咎于服务,显然我(服务)无法对他们的网络状况做任何事情。但是在客户端显示由于网络状况导致质量下降的指示很可能会缓解此问题。我已经在Google和Stackoverflow上搜索了一段时间,但没有看到任何与传入音频或视频流的质量检测相关的问题。有没有办法在直播期间监控质量(当前比特率或丢帧等)? 最佳答案 getStats()如果您想以编程方式实时访问信息,API就是您所需要的。webrtc-internal
我正在创建一个GoogleChrome扩展程序,它依赖于了解“youtube.com”上正在播放的视频的当前时间。我知道,原则上,document.getElementById('movie_player').getCurrentTime()应该返回这个,但是在注入(inject)页面的内容脚本中调用它会产生:UncaughtTypeError:document.getElementById('movie_player').getCurrentTimeisnotafunction(…)我能够在Chrome控制台中运行该命令并获得正确的返回值。在将此问题标记为重复问题之前,我想指出我
目录基础概述项目目录和文件作用优点和弊端相关功能全局配置和页面配置组件的基本使用uni-app中的样式数据绑定生命周期网络请求数据缓存条件注释和跨端兼容导航跳转uni-app中的组件组件的通讯uni-ui库的使用前言:本来是准备好好准备考研的……结果WWDC大赛又给我整这一出,本来是打算直接使用Swift语言的……结果看着SwiftUI和MacPro我不知所措,本来是想开发一个小程序记录一下摘抄的文学名句的,结果莫名其妙看到uni-app打包成iOSAPP……阴差阳错,那就学吧。环境搭建:HBuilderX编辑器微信开发者工具相关资料uni-app官网uni-app学习视频基础概述项目目录和文
我希望能够在与Flash组件相同的页面中使用JavaScript控制Flash电影流,包括:播放和暂停流改变流我已经可以加载播放器并设置flashargs,但我不知道在流开始后如何与播放器交互。这是否可以在不修改当前用于播放电影的SWF的情况下实现?迈克。 最佳答案 SWF需要使用Flash库中的ExternalInterfaceAPI向Javascript公开函数。这允许Javascript调用Flash,反之亦然。http://livedocs.adobe.com/flex/3/langref/flash/external/Ex
目录1、弹出弹窗2、把这一页的数据带回到上一页(获取下一页的数据)3、跳转页面并携带参数,接受页获取参数1、弹出弹窗当我返回上一页的时候需要做一个判断是否需要保存onBackPress只支持APP和H5但不支持小程序,可以用onUnload生命周期解决,页面销毁的时候执行方法。注意:onBackPress和methods、onLoad同级data(){ return{ flag:true//是否弹出返回提示框 }},onBackPress(){ if(this.flag){ uni.showModal({ title:"确定退出编辑?", content:"退出后内
我想使用JavaScript来控制嵌入式WindowsMediaPlayer,以及访问播放器公开的任何属性。我在网上找到了一些骇人听闻的例子,但没有什么具体的。我确实需要播放、暂停、停止、搜索、全屏等的访问权限。我还想访问播放器碰巧播放的任何事件。帮助会很棒(我已经有一个Flashequiv,你知道的),谢谢! 最佳答案 API需要InternetExplorer原生的ActiveX连接,或者可以使用pluginforFirefox.这是一个可以帮助您入门的示例页面。so-wmponload=function(){player=do
大家好,我是虎哥,今天找了一套海康的相机,想后续测试一下DeepStream用网络相机RTSP流做输入看看后续目标识别和分类。但是还是想先实时看看视频,当然,可以选择VLC去查看,顺道我也用GStreamer来测试了一下,并且对比了TX1核心模块下,CPU解码和GPU解码资源占用情况,分享给大家,也是自己做个笔记总结。 我自己找到海康相机的图像尺寸是1280X720的,采用了H.264的压缩。而且,我自己系统安装VLC播放器后没法播放网络流,搜了半天没有解决,所以还是老实搞定GStreamer测试。目录1、显示网络相机RTSP流CPU解码1.1保存一帧照片1.2显示(NoM