首页 > 其他分享 >uniapp+app开发使用muiplayer播放m3u8视频流的不成熟方法

uniapp+app开发使用muiplayer播放m3u8视频流的不成熟方法

时间:2023-09-15 17:44:19浏览次数:49  
标签:uniapp 插件 false m3u8 -- app hls js const

问题

使用uniapp开发手机端app,有一个页面是一个m3u8格式的视频列表,如果使用原版的video标签播放会因为层级最高问题不能滑动被覆盖。

方案

使用iframe内嵌本地页面(为什么不用webview?webview在模拟器可以显示在真机上就显示不出来,同时手机端的webview的层级是最高的)。

代码

<uv-list style="height: calc(100vh - 88rpx);width: 100%;overflow: auto;padding:24rpx 20rpx;">
    <template v-for="item in msgArr">
        <uv-list-item style="width: 710rpx;">
            <view w-full bg="#FFFFFF" border-rd-20rpx overflow-hidden>
                <view w-full h-464rpx bg="blue" relative>
                    <iframe
                        :src="`./static/muiPlayer/index.html?title=${encodeURIComponent(item.name)}&url=${encodeURIComponent(item.playUrl)}`"
                        style="width: 100%;height:100%" border="0" allow="fullscreen"></iframe>
                </view>
                <view h-70rpx text="#3D3D3D 14px" pl-30rpx font-700 font-pf--regular flex items-center>
                    {{ item.name }}
                </view>
            </view>
        </uv-list-item>
    </template>
</uv-list>

index.html文件代码:

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8" />
		<meta name="viewport"
			content="width=device-width,initial-scale=1,minimum-scale=1,maximum-scale=1,user-scalable=no" />
		<title></title>
		<!-- 引入基础样式文件 mui-player.min.css -->
		<link rel="stylesheet" type="text/css" href="./mui-player.min.css" />
		<!-- 引入基础脚本 mui-player.min.js -->
		<script type="text/javascript" src="./hls.js"></script>
		<!-- 拓展播放m3u8视频流 -->
		<script type="text/javascript" src="./mui-player.min.js"></script>
	</head>
	<style type="text/css">
		html,
		body {
			margin: 0;
			width: 100%;
			height: 100%;
		}
	</style>

	<body>
		<!-- 指定Mplayer容器,并且绑定属性id初始化是使用 -->
		<div id="mui-player">
		</div>
	</body>
	<script type="text/javascript">
		const pattern = /\?title=(.*?)&url=(.*)/;
		const result = window.location.href.match(pattern);
		const title = decodeURIComponent(result[1]);
		const url = decodeURIComponent(result[2]);
		// 初始化 MuiPlayer 插件,MuiPlayer 方法传递一个对象,该对象包括所有插件的配置
		var mp = new MuiPlayer({
			container: '#mui-player',
			autoplay: false,
			height: '100%',
			width: '100%',
			initFullFixed: false,
			title: title,
			autoFit: false,
			preload: 'metadata',
			objectFit: 'contain',
			autoOrientaion: true,
			// live: true,
			src: url,
			parse: {
				type: 'hls',
				loader: Hls,
				config: { // hls config to:https://github.com/video-dev/hls.js/blob/HEAD/docs/API.md#fine-tuning
					debug: false,
				},
			},
			pageHead: false,
			showMiniProgress: false

		})
	</script>

</html>

文件放置路径:

// 文件放置路径
|-- root 根目录
    |-- src
    |   |-- static
    |   |   |-- muiPlayer
    |   |   |   |-- hls.js      // 视频流插件
    |   |   |   |-- index.html  // 嵌入的静态页面
    |   |   |   |-- mui-player.min.css  // muiplayer插件 css文件
    |   |   |   |-- mui-player.min.js   // muiplayer插件 js文件

最后

可能存在的问题:每一个item都是一个嵌套的iframe,做成列表的话可能会导致性能上的问题。
同时iframe内嵌视频的话,视频全屏和视频全屏情况下的自定义按钮可能比较麻烦实现。
所以后续的想法是重写为nvue页面,除了限制多一点,实现一般需求都比较轻松。

相关文档

标签:uniapp,插件,false,m3u8,--,app,hls,js,const
From: https://www.cnblogs.com/GoodMemoryBlog/p/17705587.html

相关文章

  • iOS开发实战-仿小红书App开发-2-项目总体设计,TabBarController,启动页,深色模式
    1.新建一个LittlePink项目 完成一些配置. 2.在Main中新增一个TabBarController.把箭头给TbaBarController. 除了原有的一个ViewController外,再拉两个ViewController,使Main中共有5个ViewController. 将主界面Ctrl加拖拽到其他三个ViewController中,选择ViewCon......
  • Qemu源码分析(2)—Apple的学习笔记
    一,前言最近从main开始看了opt参数相关的解析,这个比较简单我就不写了,然后当时我搞不清楚的是MachineClass和TypeImpl类的关系。本节主要分析的其实就是分析machine_class怎么来的,其实也就是machine_class=select_machine();二,源码分析关于mc的来历type_initialize中ti->class->ty......
  • Adding API Key Authentication to a FastAPI application
    https://joshdimella.com/blog/adding-api-key-auth-to-fast-apiStep1:DefineaListofValidAPIKeysAPI_KEYS=["9d207bf0-10f5-4d8f-a479-22ff5aeff8d1","f47d4a2c-24cf-4745-937e-620a5963c0b8","b7061546-75e8-444b-a2c4......
  • vue3videplayer播放m3u8视频流注意事项
    前言使用vue3开发项目时,碰上需要做一个视频流列表的页面,最开始是想获取所有列表数据后创建对应的video标签,这样默认获取第一帧作为封面,同时暂停视频减轻不断请求的压力。但开发后发现视频就算暂停后也会继续请求视频流,多个视频反而会导致页面卡顿。方案手动获取视频的第一......
  • 解决错误 org.apache.ibatis.type.TypeException: The alias xxx is already mapped t
    具体错误信息如下:其实就是此类名和其他包有冲突那么解决办法就是声明一个别名就好了:使用注解解決办法......
  • 解决uni-app 输入框,键盘弹起时页面整体上移问题
    解决uni-app输入框,键盘弹起时页面整体上移问题我们每次在做UNIAPP小程序和H5遇到输入框时,总会在测试的时候点击输入框弹出软键盘把页面往上移动,仔细翻读uniapp文档的时候发现了一个属性adjust-position:Boolean类型,作用是键盘弹起时,是否自动上推页面1.发现将adjust-position属......
  • uniapp-文件上传
    一使用uni.uploadFile 二具体实现案例<template><viewclass="container">主页<button@click="getInfo()">测试接口</button></view><view><uni-sectiontitle="选择图片&qu......
  • uniapp VUE-H5页面微信公众号内使用微信JSAPI支付
    注意看本文主要讲解uniapp打包成h5页面并部署在公众号时使用JSAPI的微信支付问题前期准备工作.首先要有一个开通商户注册的公众号,我们需要他的appid;.其次要开通商户公众号的公众号支付的功能并添加域名,开通完成后就可以基本开始我们的开发了既然是jsapi开发自然是要引入的......
  • 618京东到家APP-门详页反爬实战
    一、背景与系统安全需求分析1.系统的重要性上图所示是接口所属位置、对电商平台或在线商店而言,分类查商品都是很重要的,通过为用户提供清晰的商品分类,帮助他们快速找到所需产品,节省浏览时间,提升购物效率,是购物结算产生GMV的核心环节。那么电商平台为什么都很看重商品信息的爬......
  • uniapp-net core后台-实现认证
    一在program.cs中添加cookie认证builder.Services.AddAuthentication(CookieAuthenticationDefaults.AuthenticationScheme).AddCookie(options=>{options.Cookie.Name="auth";options.ExpireTimeSpan=TimeSpan.FromDays(1);options.Sli......