uniapp原生插件-YL视频播放器

2023-11-12

YL视频播放器uniapp插件市场地址:https://ext.dcloud.net.cn/plugin?id=9569

简介

YL视频播放器是一款适用于安卓端的高性能原生插件(ios暂不支持),支持3核心切换(exo,ijk,安卓原生),支持点播录播,小窗播放,支持各种视频播放常用功能,适用于各种常见播放场景如在线教育,小视频,朋友圈等等!

CSDN博客地址:YL视频播放器

效果图

在这里插入图片描述在这里插入图片描述

在这里插入图片描述在这里插入图片描述

在这里插入图片描述在这里插入图片描述

V1.3新增:画中画(悬浮窗)播放功能:

<yl-float-video-view />

属性及包含方法跟yl-video-view一致,可参考下方yl-video-view 的使用方法;

增加了开启画中画的方法:

this.$refs.player.startFloatWindow();

因此,如果你需要使用画中画功能时,可以使用yl-float-video-view,不需要画中画时可以使用yl-video-view;当然,统一全部用yl-float-video-view也是可以的,只不过yl-float-video-view会比yl-video-view多了一些画中画相关的初始化过程,以及略微不同的视频加载逻辑;

说明:由于uniapp打包原生app机制(单Activity+WebView),所以当使用悬浮窗播放时,无法像原生app一样,实现通过悬浮窗跳转到app原播放页面这样良好的体验,所以本人去掉了该功能,想回到原app播放页面,就只能通过点击应用图标返回。

权限:当使用悬浮窗功能时,会自动跳转到权限申请页面,请开启悬浮窗权限后使用;

在这里插入图片描述

V1.2新增:

1.竖屏状态时,可开启手势操作(滑动快进,调节亮度音量等)

this.$refs.player.enableGesture();

2.全屏状态下按物理返回键无法退出全屏解决方案:

由于uni对插件开发本身提供的原生方法监听功能有限,所以你可以在前端的nvue界面进行返回键监听:

onBackPress(e) {
    if (e.from == 'backbutton') {
        if (this.playerState == 11) { //全屏状态
            this.$refs.player.stopFullScreen();
            this.$refs.player.setScreenOrientation(1);
            return true;
        }
    }
    return false;
},

V1.1新增:

1.视频播放器返回箭头事件:@back

<yl-video-view style="width: 100%;height: 210px;" 
	ref="player" 
	data="" 
	url=""
	poster=""
	@onPlayerStateChanged="onPlayerStateChanged" 
	@onPlayStateChanged="onPlayStateChanged" 
	@onControllerStateChange="onControllerStateChange" 
	@replay="replay"
	@back="back" />

2.当视频正在加载中时,根据需要显示返回按钮:

this.$refs.player.showBackWhenLoading();

目的在于长时间未加载成功时,可点击返回按钮退出页面;

3.设置视频显示模式及比例:

this.$refs.player.setScaleType(0)
类型 释义
0 默认
1 16:9
2 4:3
3 拉伸充满父容器
4 原始比例
5 居中裁剪

4.设置小窗播放宽高:

this.$refs.player.setTinyScreenSize(800, 600);

5.长按倍速播放

this.$refs.player.enableLongClickSpeed();//开启长按倍速播放(默认3倍速)
this.$refs.player.setLongClickSpeed(2);//设置长按倍速倍数为2(只能选择2倍或3倍)

在这里插入图片描述

说明:1.长按倍速播放支持录播和小视频,录播时如果已经设置了倍速,则长按倍速播放功能无效。
2.长按倍速倍数只能设置为2或3倍速

6.设置横竖屏:0横屏 1竖屏

this.$refs.player.setScreenOrientation(0);//0横屏 1竖屏

使用方法:

1.基本使用

组件:yl-video-view

使用方法:

<yl-video-view style="width: 100%;height: 210px;" 
	ref="player" 
	data="" 
	url=""
	poster=""
	@onPlayerStateChanged="onPlayerStateChanged" 
	@onPlayStateChanged="onPlayStateChanged" 
	@onControllerStateChange="onControllerStateChange" 
	@replay="replay" />

属性:

属性名 释义
url 视频链接地址
poster 视频封面图(与thumb区别请看下方讲解)
data 视频信息:Json字符串格式(需要使用JSON.stringify)

data数据格式:

{
	url: 'http://clips.vorwaerts-gmbh.de/big_buck_bunny.mp4',
	title: "测试",//视频标题
	hideTitle: false,//是否隐藏标题(非全屏时会隐藏,全屏时显示)
	auto: true,//是否自动播放
	isLive: false,//是否时直播
	core: 'exo',//播放器核心:exo,ijk,media
	errorMsg: "播放错误,请重试",//播放错误时提示文字
	disableFullScreen: false//是否禁用全屏按钮,
	thumb:""//封面图(与poster的区别请看下面讲解)
}

需要注意的是,使用属性赋值时,需要是固定值,也就是写死的,非动态的,且默认是自动播放的,如果要动态赋值,且需要定制化一下参数时,请使用以下方法:

setCore:设置播放器核心,默认exo,(需在播放前调用)

this.$refs.player.setCore("exo");

setPosterUrl:设置封面图,poster和thumb都是封面图,区别在于poster是与播放器分离的,覆盖在播放器之上的,使用场景是在未初始化播放器之前,显示一张图片,可单独设置显示隐藏,而thumb属于视频播放器的一部分,设置了就会跟随视频播放状态显示隐藏(参考案例1-在线课程)。

this.$refs.player.setPosterUrl("xxx");

hidePoster:隐藏封面图

this.$refs.player.hidePoster();

play(url,isLive):播放,只跟换url,及直播点播类型,其它参数无需修改时使用

this.$refs.player.play("xxx",false);

playWithParams:播放,需传入定制参数

var params={
				url: 'http://clips.vorwaerts-gmbh.de/big_buck_bunny.mp4',
				title: "测试",
				hideTitle: false,
				auto: true,
				isLive: false,
				core: 'exo',
				errorMsg: "播放错误,请重试",
				disableFullScreen: false
			};
this.$refs.player.playWithParams( JSON.stringify(params));

replay:重新播放

this.$refs.player.replay();

startTinyScreen:小窗播放

this.$refs.player.startTinyScreen();

stopTinyScreen:停止小窗播放,恢复正常播放

this.$refs.player.stopTinyScreen();

pause:暂停播放

this.$refs.player.pause();

resume:继续播放

this.$refs.player.resume();

seekTo:设置视频播放起始位置(滑动控制条进度)

this.$refs.player.seekTo(position);//position为s(秒)

setTitle:设置视频标题

this.$refs.player.setTitle("xxx");

hideTitleView:隐藏视频标题

this.$refs.player.hideTitleView();

showTitleView:显示视频标题

this.$refs.player.showTitleView();

startFullScreen:全屏显示

this.$refs.player.startFullScreen();

stopFullScreen:停止全屏显示,恢复正常显示

this.$refs.player.stopFullScreen();

startCountDown(timestamp):直播场景时的倒计时,参考案例1-在线课程

this.$refs.player.startCountDown(1669809963000);//参数为时间戳(ms)

事件

事件名 释义
@onPlayerStateChanged 播放器状态:正常10,全屏11,小窗12
@onPlayStateChanged 播放状态:正常0,准备1,准备完成2,播放中3,暂停4,播放完成5,缓冲6,缓冲完成7,开始播放终止8,错误-1
@onControllerStateChange 控制条状态:隐藏0,显示1
@replay 播放完成时,点击重新播放按钮时的回调
@back 返回按钮回调
@onCountDownEnd 倒计时结束回调

2.小视频

组件:yl-short-video-view

使用方法:

<yl-short-video-view style="flex: 1;" 
		ref="player" 
		@onPlayerStateChanged="onPlayerStateChanged" 
		@onScrollStateChanged="onScrollStateChanged" 
		@back="back" />

在这里插入图片描述
方法:

setCore:设置播放器核心,默认exo,(需在播放前调用)

this.$refs.player.setCore("exo");

play(data):播放,传入的参数为array的json字符串,即小视频列表信息

var dataList = [{
					"coverImg": "https://img2.woyaogexing.com/2022/07/22/e53e84a02fa9de57.jpg",
					"id": 0,
					"videoUrl": "https://v-cdn.zjol.com.cn/280443.mp4"
				    },
				    ...
			    ]
this.$refs.player.play(JSON.stringify(dataList));

pause:暂停播放

this.$refs.player.pause();

resume:继续播放

this.$refs.player.resume();

事件

事件名 释义
@onPlayStateChanged 播放状态:正常0,准备1,准备完成2,播放中3,暂停4,播放完成5,缓冲6,缓冲完成7,开始播放终止8,错误-1
@onScrollStateChanged 滑动状态:正常0,手指触摸滑动时1,手指离开即将停止滑动时2
@back 点击返回按钮

注意事项:小视频是全屏状态,返回按钮是固定的,组件只需要封面图和视频url,而覆盖在视频上方,如抖音中的昵称,内容,头像,点赞评分享等ui及功能,可参考案例2,自己在前端写,以实现不同的ui需求。

朋友圈

组件:yl-circle-video-view

使用方法:

<yl-circle-video-view 
	ref="player" 
	style="height: 160px;margin-top: 10px;" 
	:url="item.url" 
	:poster="item.thumb" />

使用说明:

声明list的scroll事件:<list @scroll="onScroll">,上下滑动超过一定距离后,释放正在播放的视频

onScroll(e) {
	if (e.isDragging && (e.contentOffset.y > 300 || e.contentOffset.y < -300)) {
		this.$refs.player[0].release();
	}
}

注意事项:组件是嵌入list等组件内部的,每次只能播放一个视频,切换视频上一个视频会停止,滑动组件时,视频需要停止播放(需自己处理,参考上面方法)

编译或打包注意事项:如遇到问题“The minCompileSdk (31) specified in a dependency’s AAR metadata…”,请设置主APP下的build.gradle中的compileSdkVersion>=31,或 在defaultConfig下加入代码:

configurations.all {
    resolutionStrategy { force 'androidx.core:core-ktx:1.6.0' }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

uniapp原生插件-YL视频播放器 的相关文章

  • 如何使用android canvas绘制一个只有左上角和右上角为圆角的矩形?

    我找到了一个用于所有 4 个角均为圆角的矩形的函数 但我只想将顶部 2 个角设为圆角 我能做些什么 canvas drawRoundRect new RectF 0 100 100 300 6 6 paint 对于 API 21 及更高版本
  • 如何从 Java 中的 Native Android Activity 打开 React Native 应用程序的特定组件?

    Alert 这个问题基本上是关于一种方法 所以不会有任何可用的笔或代码可以共享 I was doing a POC where integrating an RN app into an Android App I did successf
  • Android studio Gradle 同步和构建错误

    我是 android studio 和 gradle 的新手 我得到了 AS 0 5 我下载了0 8 1更新包并通过删除已安装的文件并将更新文件复制到program files文件夹进行更新 它运行正确 但当我尝试同步 gradle 时 出
  • 如何设置自定义谷歌地图标记的背景图像?

    我有一个用于 Google 标记的自定义图像 但我必须在其背景上设置另一个图像 是否可以设置地图标记的背景图像 是的你可以 试试这个所以问题如何使用 Android 地图 API v2 创建自定义形状的位图标记 https stackove
  • Android 全屏对话框片段(如日历应用程序)

    我正在尝试实现如下图所示的全屏对话框 我能够显示全屏对话框 但是当显示对话框时 状态栏颜色变为黑色并且不保留原色深色 这是我的对话片段 public class IconsDialogFragment extends DialogFragm
  • 如何在 Android 中检查与配对设备的蓝牙连接状态

    我开发了一个蓝牙应用程序 它将连接到配对的设备并发送消息 但我必须先测试连接 我尝试了很多选择 但没有一个效果很好 那么您能给我发送任何可以做到这一点的代码示例吗 我创建了一个线程 但无法获得良好的连接状态来构建 if 函数 这是代码 pa
  • 在 Android Studio 中设置 Http 代理

    我已经阅读了多个类似的问题和文档 但我无法解决我的机器所在的公司防火墙的问题 我收到的错误是 无法刷新 Gradle 项目 未知主机 services gradle org 我所阅读和理解的所有内容都让我相信这是一个 http 代理问题 我
  • android以编程方式打开电池设置

    我正在寻找一种从 Android 应用程序打开电池设置屏幕的方法 到目前为止我发现了两个意图 Intent ACTION POWER USAGE SUMMARY Settings ACTION BATTERY SAVER SETTINGS
  • 自定义 AlertDialog - android.R.id.custom 的问题

    我确信我错过了这里的重点 所以我希望有人能解释一下 我想在用户触摸时创建一个弹出窗口ImageView 我看了一下AlertDialog文档说 如果您想显示更复杂的视图 请查找名为 custom 的 FrameLayout 并将您的视图添加
  • 获取TextView的高度

    我有一些文字将被放入TextView 我这样做是使用setText 现在我需要找到文本在文本中占据的行数或高度TextView 我尝试使用getHeight 但它总是返回 0 无论如何 有没有办法获得文本中存在的文本的高度TextView
  • 类型“Null”不是类型“Widget”的子类型

    我正在编写一个关于 flutter 的代码 以便在 android ios 和 web 上使用 Google 登录 但我第一时间就遇到了这个错误 我在 Android 模拟器上运行它来检查它是否正常工作 我现在还没有将其设置为网络 在模拟器
  • 如何让 LibGDX gradled eclipse 项目在 AIDE(Android IDE 应用程序)上工作

    我正在尝试让 libgdx gradle 项目在 AIDE 上运行 AIDE 是 Android 上的一款应用程序 其作用类似于 IDE 它似乎不起作用 因为 buildconfig java 没有生成包名称 有人有任何解决方法吗 好的 我
  • 在 Facebook 上分享文本和 URL

    我想分享一条消息 例如 查看图片http someUrl com http someUrl com从应用程序共享ABCapp 用户必须能够选择任何已安装的应用程序进行共享 我正在使用以下代码 Intent intent new Intent
  • Firebird 和 Android JDBC 驱动程序

    火鸟有问题 我从未与 DB 合作过 服务器 firebird 1 5 上的数据库 添加库 firebird full 2 2 4到 libs 文件夹 将其添加到 Gradle implementation fileTree libs 将其添
  • 使用远程数据编写 Android、iPad、iPhone 客户端的技术

    我需要探索世界 你写了一个杀手级应用程序 但你有 Android iPhone iPad 客户端吗 我的问题是 1 向这些设备发送数据的最佳方式是什么 按照建议进行肥皂和休息here https stackoverflow com ques
  • Paint.setTextSize(float) 使用哪种测量单位?

    我想使用在视图上绘制具有特定高度 以像素为单位 的文本Canvas 你可以简单地使用Paint setTextSize float 与像素数或者这是使用dp or sp 它使用像素 但您可以使用以下代码将其转换为 dp double get
  • 存储 FCM 的令牌

    我正在尝试将我的令牌存储在我的云数据库中 我稍后将在云函数中使用此令牌 以便向已添加为好友的用户发送通知 然而 推送设备令牌不起作用 因为用户未经授权 授权后我无法保存它 因为令牌是在安装应用程序时生成的 private static fi
  • Xamarin.Forms 用相机拍照显示方向错误并且后退按钮崩溃

    我正在使用此处的 Xamarin Forms Camera 示例 https github com XForms Xamarin Forms Labs Samples tree master XF Labs CameraSample htt
  • 可以使用drawable-mdpi-fr、drawable-hdpi-fr、drawable-ldpi-fr进行不同分辨率的本地化

    我想对不同的本地化使用不同的图像 但是 我有所有分辨率和所有语言的图像 有什么办法可以做到这一点吗 是的 这是可能的 可绘制 de rDE ldpi 可绘制 de rDE mdpi 核实
  • 水平 RecyclerView 顶部的滚动条

    我正在做简单的演示卧式RecyclerView 我想与回收视图一起显示滚动条 所以我添加了android scrollbars horizontal and android scrollbarSize 5dp 在 XML 中 我可以获得滚动

随机推荐

  • 软件外包开发代码管理工具

    软件代码规范是为了提高代码质量 可读性和可维护性而制定的一系列编程规则和约定 代码管理工具则是用于协助团队成员共享 跟踪和合并代码的工具 今天和大家分享这方面的知识 希望对大家有所帮助 北京木奇移动技术有限公司 专业的软件外包开发公司 欢迎
  • 魅族大数据可视化平台建设之路

    本文是根据魅族科技大数据平台架构师赵天烁3月31日在msup携手魅族主办的第十二期魅族技术开放日 魅族大数据可视化平台建设之路 演讲中的分享内容整理而成 内容简介 本文主要从现状 问题 当前目标 实现方案三个方面介绍了可视化平台的建设之路
  • Python点云处理(二)点云数据可视化

    目录 0 简述 1 matplotlib 1 1 安装 1 2 点云可视化 2 Mayavi 3 Open3D 4 Vispy 5 VTK 6 结语 0 简述 点云可视化是数据分析 数据展示及程序集成的基础性功能 Python提供了许多强大
  • Error:Abnormal build process termination:

    Error Abnormal build process termination C Program Files Java jdk1 8 0 121 bin java Xmx700m Djava awt headless true Djav
  • 分布式计算框架Spark集群实战

    一 Spark整体架构 1 Spark集群架构 从集群部署的角度看 Spark集群由集群管理器 Cluster Manager 工作节点 Worker 执行器 Executor 驱动器 Driver 应用程序 Application 等部分
  • 1.8,strerror和perror

    这个例子主要是报错 其实 我不大注重报错的差异 只要知道大概在哪里出错就行了 先抄代码 运行 ok
  • clone()

    深复制 浅复制
  • css选择器

    css选择器 1 选择器的作用 找到特定的HTML标签元素 选择所需要的标签 2 基础选择器 2 1标签选择器 作用 可以把一类标签全部选择出来 比如div span标签 快速的为页面中同类型的标签统一化 但是不能设计差异化的样式 div
  • WIN10应用程序无法正常启动(0xc0000142)。请单击‘确认’关闭应用程序

    在网上找了好久解决方法 有说用命令行for 1 in windir system32 dll do regsvr32 exe s 1 来重新注册系统组件 有说删除 appdata microsoft templates 这个目录下的文件 还
  • 软件产品license的简单实现java

    目录 软件License简介 License控制内容 实现方案 代码示例讲解 注意事项 源码 软件License简介 我们在使用一些需要购买版权的软件产品时 或者我们做的商业软件需要进行售卖 为了收取费用 一般需要一个软件使用许可证 然后输
  • 基于Arduino开发板和20×4 I2C LCD显示屏制作一款实时时钟

    当我们在制作一个有趣的硬件项目时 可能会需要使用到一款显示屏 但选择显示屏的尺寸和控制它所需的引脚都令人困惑 在上一篇文章中 我们介绍了0 96寸I2C OLED显示屏 在本篇文章中 我们将介绍使用I2C 20 4字符显示屏 所需的零件 本
  • You are running the esm-bundler build of vue-i18n. It is recommended to configure your bundler to ex

    vue3项目启动之后 会提示如下警告 You are running the esm bundler build of vue i18n It is recommended to configure your bundler to expl
  • 网络编程之channel

    介绍 Channel 是一个对象 可以通过它读取和写入数据 拿 NIO 与原来的 I O 做个比较 通道就像是流 所有数据都通过 Buffer 对象来处理 您永远不会将字节直接写入通道中 相反 您是将数据写入包含一个或者多个字节的缓冲区 同
  • 官网下载Eclipse历史版本

    官网下载Eclipse历史版本 Eclipse官网 downloads路径 https www eclipse org downloads 点击 Download Packages 点击 Download Packages 选择你想要的版本
  • Idea 断点调试PHP

    老实说 我尝试过xdebug 但是说实话 没一次成功过 看来我还是 经验不足 简单的方法 前期工作需要装上xdebug 在php ini 末尾加上 XDebug 这是xdebug的dll 需要到官网上下载 需要注意区分自己的PHP是线程安全
  • Jordan Lecture Note-12: Kernel典型相关分析(Kernel Canonical Correlation Analysis, KCCA).

    Jordan Lecture Note 12 Kernel典型相关分析 Kernel Canonical Correlation Analysis KCCA Kernel典型相关分析 一 KCCA 同样 我们可以引入Kernel函数 通过非
  • 华为培训 05 PON EPON GPON

    学习目标 PON架构 EPON主要技术 GPON主要技术 EPON 基于以太网方式的无源光网络 GPON 千兆无源光网络 1 PON网络加架构
  • 2022电大国家开放大学网上形考任务-客户关系管理非免费(非答案)

    客户关系管理形考作业一答案 试题 1 1 不是常用的市场营销组合理论 A 4C 理论 B 4P 理论 C 4A 理论 D 4S 理论 试题 2 2 企业实施客户关系管理的作用主要体现在提升企业竞争优势 提高客户满意度 以及提升企业销售业绩
  • 【Verilog 常见设计】(0)二进制码和格雷码互转 Verilog 实现

    目录 格雷码介绍 转化原理 Verilog 实现 testbench 测试代码 仿真波形 格雷码介绍 在一组数的编码中 若任意两个相邻的代码只有一位二进制数不同 则称这种编码为格雷码 Gray Code 另外由于最大数与最小数之间也仅一位数
  • uniapp原生插件-YL视频播放器

    YL视频播放器uniapp插件市场地址 https ext dcloud net cn plugin id 9569 简介 YL视频播放器是一款适用于安卓端的高性能原生插件 ios暂不支持 支持3核心切换 exo ijk 安卓原生 支持点播