当前位置: 首页 > news >正文

uniapp在线视频监控开发

我这里是uniapp开发的H5项目

视频流是flv模式

用到的插件是flv.js

Flv.js

Flv.js 是 HTML5 Flash 视频(FLV)播放器,纯原生 JavaScript 开发,没有用到 Flash。。由 bilibili 网站开源。

常见直播协议

  • RTMP: 底层基于TCP,在浏览器端依赖Flash。
  • HTTP-FLV: 基于HTTP流式IO传输FLV,依赖浏览器支持播放FLV。
  • WebSocket-FLV: 基于WebSocket传输FLV,依赖浏览器支持播放FLV。WebSocket建立在HTTP之上,建立WebSocket连接前还要先建立HTTP连接。
  • HLS: Http Live Streaming,苹果提出基于HTTP的流媒体传输协议。HTML5可以直接打开播放。
  • RTP: 基于UDP,延迟1秒,浏览器不支持。

架构描述:

上代码:

<template><!-- 直播 --><view class="mylive flex align_center"><view class="sp_live"><view class="video-js flex" ref="video"> </view></view></view>
</template><script>export default {data() {return {videoDeviceId: '',flvPlayer: '',VideoDeviceUrl: ''}},onLoad: function(option) {this.VideoDeviceUrl = decodeURIComponent(option.liveUrl)// #ifdef H5this.$nextTick(res => {this.videoPush()})// #endif},onUnload: function() {// #ifdef H5this.flv_destroy()// #endif},methods: {videoPush: function() {var video = document.createElement('video')video.id = 'video'video.style = 'width: 100%;'video.controls = truethis.flvPlayer = flvjs.createPlayer({type: 'flv',isLive: true,url: this.VideoDeviceUrl});this.flvPlayer.attachMediaElement(video);this.flvPlayer.load();this.flvPlayer.play();this.$refs.video.$el.appendChild(video)},//注销视频flv_destroy() {this.flvPlayer.pause();this.flvPlayer.unload();this.flvPlayer.detachMediaElement();this.flvPlayer.destroy();this.flvPlayer = null;},		}}
</script>
常用方法: 
  • isSupported():boolean:判断当前浏览器是否支持播放
  • createPlayer(mediaDataSource: MediaDataSource, config?: Config):创建一个播放实例
  • play(): void: 开始播放视频。
  • pause(): void: 暂停视频播放。
  • destroy(): void: 销毁播放器实例并释放资源。
  • attachMediaElement(mediaElement: HTMLVideoElement): void: 绑定HTMLVideoElement 元素并进行播放。
  • detachMediaElement(): void: 解绑 HTMLVideoElement 元素。
  • attachMSE(mse: MediaSource): void: 绑定 MediaSource 对象。
  • detachMSE(): void: 解绑 MediaSource 对象。
  • load(optional: {reset: boolean}): void: 加载当前流并准备播放,但不自动开始播放。
  • unload(): void: 卸载当前流。
  • toggle(): void: 切换播放状态。
  • isPlaying(): boolean: 返回播放器是否正在播放。
  • getDuration(): number: 返回流总播放时间。
  • getCurrentTime(): number: 返回当前播放时间。
  • setCurrentTime(time: number): void: 跳转到指定时间点进行播放。
  • getVolume(): number: 返回当前音量。
  • setVolume(volume: number): void: 设置音量。
  • mute(): void: 静音。
  • unmute(): void: 取消静音。
  • getPlaybackRate(): number: 返回播放速率。
  • setPlaybackRate(rate: number): void: 设置播放速率。

但是在我项目中遇到一个问题就是,使用这个插件的全屏的时候(这个全屏功能好像在电脑上是页面全屏,视频没有全屏),ios设备不支持全屏,并且安卓设备全屏的时候也有问题,所有我就自己设置了一个点击事件,将页面顺时针旋转90°来模拟全屏。

下面是旋转的点击事件代码:

<button v-if="showBtn" id="rotate-btn" class="rotateBtn" @click="rotates">旋转<u-icon style="margin-left: 2rpx;" name="reload"></u-icon> 
</button>rotates(){const rotateElement = document.getElementById('container');const rotateBtnElement = document.getElementById('rotate-btn');if (rotateElement.classList.contains('initial')) {rotateElement.classList.remove('initial');rotateElement.classList.add('rotated');} else {rotateElement.classList.remove('rotated');rotateElement.classList.add('initial');}
},

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 精通推荐算法27:行为序列建模之BST— 代码实现
  • 开学季好物分享,精选五款开学必备的数码好物推荐!
  • 第二十六届中国机器人及人工智能大赛(智能驾驶)思路
  • 基于JavaEE的农产品销售管理系统设计与实现(源码+lw+部署文档+讲解等)
  • 随机涂鸦 pil
  • 小琳AI课堂 - AIGC在不同行业的应用潜力与未来发展深度解析
  • 2024精选骨传导耳机推荐,选这五款可以帮你避坑!
  • Java数组怎么转List,Stream的基本方法使用教程
  • FPGA硬件扑克牌比赛报名倒计时~!
  • 视频教程:自研低代码拖拽图形编辑器底层库moveable示例学习
  • (第三期)书生大模型实战营——InternVL(冷笑话大师)部署微调实践
  • BUG——imx6u开发_结构体导致的死机问题(未解决)
  • Redis 有序集合【实现排行榜】
  • 【ARM+Codesys 客户案例 】基于RK3568/A40i/STM32+CODESYS开发的控制器在自动输送分拣系统上的应用,支持定制
  • 大数据开发工程师面试整理-性能优化
  • “大数据应用场景”之隔壁老王(连载四)
  • “寒冬”下的金三银四跳槽季来了,帮你客观分析一下局面
  • 2017-09-12 前端日报
  • 4. 路由到控制器 - Laravel从零开始教程
  • C++回声服务器_9-epoll边缘触发模式版本服务器
  • C++类的相互关联
  • centos安装java运行环境jdk+tomcat
  • express + mock 让前后台并行开发
  • Intervention/image 图片处理扩展包的安装和使用
  • MySQL主从复制读写分离及奇怪的问题
  • Spark in action on Kubernetes - Playground搭建与架构浅析
  • underscore源码剖析之整体架构
  • 对话 CTO〡听神策数据 CTO 曹犟描绘数据分析行业的无限可能
  • 对象管理器(defineProperty)学习笔记
  • 分享一个自己写的基于canvas的原生js图片爆炸插件
  • 关于Android中设置闹钟的相对比较完善的解决方案
  • 老板让我十分钟上手nx-admin
  • 批量截取pdf文件
  • 浅析微信支付:申请退款、退款回调接口、查询退款
  • 微信公众号开发小记——5.python微信红包
  • 想使用 MongoDB ,你应该了解这8个方面!
  • 一道面试题引发的“血案”
  • 智能合约Solidity教程-事件和日志(一)
  • media数据库操作,可以进行增删改查,实现回收站,隐私照片功能 SharedPreferences存储地址:
  • 阿里云API、SDK和CLI应用实践方案
  • ​1:1公有云能力整体输出,腾讯云“七剑”下云端
  • ‌JavaScript 数据类型转换
  • # SpringBoot 如何让指定的Bean先加载
  • #!/usr/bin/python与#!/usr/bin/env python的区别
  • #if #elif #endif
  • #Ubuntu(修改root信息)
  • $HTTP_POST_VARS['']和$_POST['']的区别
  • (NSDate) 时间 (time )比较
  • (附源码)spring boot智能服药提醒app 毕业设计 102151
  • (原+转)Ubuntu16.04软件中心闪退及wifi消失
  • (原創) 博客園正式支援VHDL語法著色功能 (SOC) (VHDL)
  • (转)自己动手搭建Nginx+memcache+xdebug+php运行环境绿色版 For windows版
  • ***原理与防范
  • ..回顾17,展望18
  • .Net 4.0并行库实用性演练