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秒,浏览器不支持。

架构描述:

上代码:

javascript 复制代码
<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 H5
			this.$nextTick(res => {
				this.videoPush()
			})
			// #endif
		},
		onUnload: function() {
			// #ifdef H5
			this.flv_destroy()
			// #endif
		},
		methods: {
			videoPush: function() {
				var video = document.createElement('video')
				video.id = 'video'
				video.style = 'width: 100%;'
				video.controls = true
				this.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°来模拟全屏。

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

javascript 复制代码
<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');
	}
},
相关推荐
码间留白3 天前
六轮真机实验后,我把鸿蒙直播推流的 UI 全逼成了原生——uni-app 适配 HarmonyOS NEXT 完整复盘
uni-app·鸿蒙·harmonyos next·直播推流·arkts/arkui
wuxianda10305 天前
2026 苹果审核 4.3 (a) 被拒全解析|Guideline 4.3a spam 马甲包拒审原因 + 避坑方案
flutter·uni-app·苹果上架
头发还在的女程序员6 天前
基于 Spring Boot + Vue 3 + uni-app 的灵活用工系统:四端架构与业务流程设计
vue.js·spring boot·uni-app·灵活用工·灵工系统
Dumbness8 天前
订阅消息弹窗必须在用户点击里调:联调实验室里 timing 和 Mock 支付通知踩的坑
javascript·uni-app
码间留白9 天前
uni-app 鸿蒙离线打包:一个改动从源码到真机要穿过几条链
uni-app·鸿蒙·deveco·离线打包·uts插件
多客:duokelijie10 天前
代练订单系统选型思路:跨品类游戏接入、订单分层管理、自动结算逻辑拆解!
数据库·mysql·微信小程序·前端框架·uni-app·php·持续部署
码间留白10 天前
鸿蒙端对接 BLE 血压计:从一次握手到读数入库(二)设备篇
物联网·uni-app·鸿蒙·蓝牙ble·血压计
华玥作者11 天前
Vue 3 + TypeScript + uni-app 组件库推荐:hy-app(华玥组件库)
vue.js·typescript·uni-app
FinelyYang11 天前
uniapp使用kkfileview在线预览ppt,excel,word,pdf类型文件
pdf·uni-app·powerpoint
2501_9160088911 天前
iPhone 设备信息查看,用 KeyMob 看型号、序列号、电池健康和 UDID
android·ios·小程序·https·uni-app·iphone·webview