如何利用阿里视频云开源组件,快速自定义你的H5播放器?

摘要: Aliplayer希望提供一种方便、简单、灵活的机制,让客户能够扩展播放器的功能,并且Aliplayer提供一些组件的基本实现,用户可以基于这些开源的组件实现个性化功能,比如自定义UI和自己App server的交互等等,而不用从头开始开发一些功能,节省时间和精力。

阿里云播放器SDK(ApsaraVideo for Player SDK)是阿里视频云端到云到端服务的重要一环,除了支持点播和直播的基础播放功能外,还深度融合视频云业务,支持视频的加密播放、安全下载、首屏秒开、低延时等业务场景,为用户提供简单、快速、安全、稳定的视频播放服务。

 

image

Aliplayer Web播放器分为H5和Flash两个,Flash播放器随着技术的发展会逐渐被边缘化,而H5播放器会更加普及。播放器端上已经实现了截图、国际化、变速、UI自定义、微信同层播放、自适应播放、加密播放、H5播放flv、自定义插件等功能。

虽然Aliplayer已经具备相对完善的公共基础能力,但是用户会有一些更上层和业务相关的一些需求,并且基于用户本身的需求都会存在个性化差异,比如弹幕、跑马灯、视频列表等等。

因此,Aliplayer希望提供一种方便、简单、灵活的机制,让客户能够扩展播放器的功能,并且Aliplayer提供一些组件的基本实现,用户可以基于这些开源的组件实现个性化功能,比如自定义UI和自己App server的交互等等,而不用从头开始开发一些功能,节省时间和精力。所以,支持自定义的新版Aliplayer应运而生。

自定义组件的原理?

Aliplayer希望有一种很简单的方式去定义组件,让用户的学习成本近乎于零。因此定义出整个播放器的生命周期的重要阶段,作为函数钩子,用户可以通过函数钩子实现每个阶段的自定义逻辑,下面的图列出了主要生命周期,标示在函数的周期内会发生的一些阶段:

 

image

每个阶段的说明:

名称说明
init new实例的时候调用,设置的初始参数在构建对象时,会传递给init方法
createEl创建组件的UI, 参数为播放器容器的div
created播放器创建完成,可以调用播放器的API了
ready视频可播放状态
play开始播放
pause播放暂停
playing正在播放
waiting等待数据
timeupdate播放事件改变,通过第二各参数的timestamp属性得到播放时间
error播放出错
ended播放结束
dispose播放器销毁

组件系统特点:

1、 实现简单:用户只要有前端的基本知识,就可以开发一个插件,并且支持ES5和ES6的语法,只要定义一个Function或者Class,根据自己的业务需要实现生命周期函数。

2、 实例的:组件注册到播放器,在播放创建的过程中也创建组件实例,组件是可以保存状态的,因此一个组件定义,可以注册多个到播放器,通过传递不通的参数,构建不同的组件,具有不同的行为。

3、 开源的:每个开源组件都包含了通用的基本功能,用户可以在开源的基础上实现自己的个性化需求,给用户更大的自主权。

组件的实现方式,用户如何快速自定义开发?

1. 组件提供了两种方式让用户去开发自己的播放器组件:

a. ES6的class类型定义一个组件

当您的项目是使用ES6的语法,通过webpack或者babel构建时,建议使用这种方式。

/**
* 静态广告组件
*/
export default class StaticADComponent
{/*** 构造函数,在new对象时调用** @param {string} adAddress - 广告视频地址* @param {string} toAddress - 广告链接地址*/constructor(adAddress,toAddress) {this.adAddress = adAddress;this.toAddress = toAddress;this.$html = $(html);}/*** 创建广告Dom元素*/createEl(el){this.$html.find('.ad').attr('src',this.adAddress);this.$html.attr('href',this.toAddress);let $adWrapper = this.$html.find('.ad-wrapper');$adWrapper.attr('href',this.toAddress);$adWrapper.click(()=>{Aliplayer.util.stopPropagation();});this.$html.find('.close').click(()=>{this.$html.hide();});$(el).append(this.$html);}/*** 隐藏广告*/play(player,e){this.$html.hide();}/*** 显示广告*/pause(player,e){this.$html.show();}/*** 隐藏广告*/playing(player,e){this.$html.hide();}/*** 显示广告*/ended(player,e){this.$html.show();}
}

b. 使用Aliplayer提供的Component方法

/*** 静态广告组件*/const StaticADComponent = Aliplayer.Component({/*** 初始函数,在new对象时调用** @param {string} adAddress - 广告视频地址* @param {string} toAddress - 广告链接地址*/init:function(adAddress,toAddress){this.adAddress = adAddress;this.toAddress = toAddress;this.$html = $(html);},/*** 创建广告Dom元素*/createEl:function(el){this.$html.find('.ad').attr('src',this.adAddress);var $adWrapper = this.$html.find('.ad-wrapper');$adWrapper.attr('href',this.toAddress);$adWrapper.click(function(){Aliplayer.util.stopPropagation();});this.$html.find('.close').click(function(){this.$html.hide();});$(el).append(this.$html);},ready:function(player,e){},/*** 隐藏广告*/play:function(player,e){this.$html.hide();},/*** 显示广告*/pause:function(player,e){this.$html.show();},/*** 隐藏广告*/playing:function(player,e){this.$html.hide();},waiting:function(player,e){},timeupdate:function(player,e){},error:function(player,e){},/*** 显示广告*/ended:function(player,e){this.$html.show();}
});

2. 如何启用组件

播放器提供了components属性,通过给components赋值,让播放器使用组件,此属性的类型为Array,如果组件创建是构造函数没有初始参数,直接把组件类型作为值,比如:components :[staticADComponent],否则通过对象字面量的形式指定类型和参数,参数也是一个数组,比如: components :[{type:staticADComponent,args:[1,2]}],如果需要获取实例的组件,需要设置name属性。

名称说明
name组件名称,可用通过名称得到组件
type组件类型
args组件的参数

启用组件

var player = new Aliplayer({id: "J_prismPlayer",autoplay: true,playsinline:true,components:[{type:StaticAdComponent,args:['http://cdnoss.youkouyang.com/cover.png']},{name:'adcomponent',type:StaticAdComponent}]                 });

3. 如何获取组件

有的场景下,需要获取组件做一下事情,比如调用组件里的方法,这时可以通过播放器的getComponent方法获取,参数为组件的名字。

 var component = player.getComponent('adcomponent');

目前,Aliplayer已经实现了8个常用的组件,并且开源于github,用户可以获取实现的代码,并且也可以贡献自己的代码和建议。
• 记忆播放
• 开始广告
• 暂停广告
• 播放下一个
• 播放列表
• 旋转和镜像
• 视频广告 
• 弹幕 
• 试看

原文链接 

本文为云栖社区原创内容,未经允许不得转载。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/521201.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

vmware 蓝屏_网络安全小百科--利用微软CVE 2019-0708漏洞让对方系统蓝屏死机

漏洞背景:Windows 系列服务器于 2019 年 5 月 15 号,被爆出高危漏洞,该服务器漏洞利用方式是通过远程桌面端口3389进行攻击的。这个漏洞是今年来说危害严重性最大的漏洞,跟之前的永恒之蓝病毒差不多。2019年9月7日晚上凌晨 1 点左右&#xff…

instantclient使用步骤

1、 解压缩instantclient后(假定目录为:G:\instantclient_11_2_64) 把oracle安装目录下的G:\oracle\product\11.2.0\dbhome_1\NETWORK 文件夹复制到instantclient安装目录, 修改instantclient目录下的NETWORK\ADMIN\tnsnames.ora文…

NLP中的迁移学习

摘要: 迁移学习正在各个领域大展拳脚,NLP领域正在受到冲击! 在我们之前的文章中,我们展示了如何使用CNN与迁移学习为我们自己创建图片构建分类器。今天,我们介绍NLP中迁移学习的最新趋势,并尝试进行分类任…

Linux Shell脚本专栏_服务器系统配置初始化脚本_01

文章目录一、服务器系统配置初始化1. 设置时区并同步时间① 脚本编写②脚本说明2. 禁用selinux① 脚本编写②脚本说明3. 关闭防火墙① 脚本编写②脚本说明4. 历史命令显示操作时间① 脚本编写②脚本说明5. 禁止root远程登录① 脚本编写②脚本说明6. 禁止定时任务发送邮件① 脚本…

公文字体字号标准2020_手把手教你写公文——红头文件的制作技巧

前言:不管你是在行政部门、事业单位,国企,还是在私企,只要是在办公室工作,一定会接触到公文处理的相关事务。大家都知道,红头公文作为一种有法律效力的文书,其规范性尤为重要,而国家…

计算机专业的学生也太太太太太惨了吧?

戳蓝字“CSDN云计算”关注我们哦!作者 | 景岁责编 | 阿秃最近又到了开学季,又一群懵懂的大学新生怀着憧憬走进了校园,如果让学长学姐们用一个词给学弟学妹们形容自己的专业的话,有的也许是“忙碌”,有的也许是“充实”…

19个AI热门应用领域,你确定不了解一下?

摘要: 19个AI热门应用领域,你知道多少? 1. 自然语言生成(Natural Language Generation) 自然语言生成是人工智能的分支,研究如何将数据转化为文本,用于客户服务、报告生成以及市场概述。 2.语…

koa2 mysql增删改查_koa2对mongodb的增删改查

构建项目npm install -g koa-generatorkoa2 -e projectnamenpm install mongoose说明:我们用mongoose来操作mongodb,需要安装mongoose。生成项目后,在项目里新建一个文件夹dbs,用来存放和数据库相关的配置文件,配置文件…

人工智能的时代来了,新的商业机会在哪里?

摘要: 新的时代到来意味着新的商业社会的到来,那么这些新的商业机会在哪里呢? 提起人工智能,大多数人脑子里首先跳出的可能是这些问题,人工智能会使人类都失业吗?人工智能真的可以有自我意识以及情感吗&am…

python解析excel公式_[python][openpyxl]读取excel中公式的结果值

要读取cell中的值,但是,如果cell中的值是一个公式,则读取出来的是公式。有时候我们希望读取到公式计算出来的结果,可以使用load_workbook()中的data_only属性。 load_workbook()中涉及到的全部属性,其中,re…

Linux Shell脚本专栏_Linux系统发送告警邮件脚本_02

文章目录一、Linux系统发送告警邮件脚本1. 安装mailx工具2. 编辑mailx配置文件3. 追加以下内容4. 发送邮件测试二、异常汇总2.1. 异常信息2.2. 开启授权码一、Linux系统发送告警邮件脚本 背景:外部服务器 需求:1. 安装mailx工具2. 编辑mailx配置文件3. …

任正非采访的数据分析解读

戳蓝字“CSDN云计算”关注我们哦!作者 | 林骥责编 | 阿秃2019 年 5 月 21 日,任正非接受国内媒体的采访,如果用文字转述的话,总共大约有 2.2 万个字。本文总结了任正非在采访中说的一些数据,并做了简单的分析解读&…

阿里推出 PolarFS 分布式文件系统:将存储与计算分开,提升云数据库性能(附论文)

摘要: 将存储与计算分开来大有意义,对于部署的云数据库而言更是如此。为此,阿里巴巴推出了一种新开发的名为PolarFS的分布式文件系统,旨在确保低延迟和高可用性。这个文件系统与阿里云上自己的PolarDB数据库服务搭配使用。 将存储…

ios开发 热搜词demo_手机app如何开发

泛娱科技​www.cpdzapp.com手机app开发流程为:1.首先,制作一款APP,必须要有相关的idea,也就是说,第一步是APP的idea形成。2.通过那些idea来进行APP的主要功能设计以及大概界面构思和设计。3.大功能模块代码编写以及大概…

Linux Shell脚本专栏_批量创建100用户并设置密码脚本_03

文章目录一、简单需求实现流程1. 添加用户2. 给用户设置密码二、企业需求实现流程2.1. 脚本准备工作2.2. 企业级脚本2.2. 需求说明2.3. 企业级脚本说明三、实战3.1. 运行脚本3.2. 查看创建的用户3.3. 查看文件中的用户和密码信息一、简单需求实现流程 背景:新入职1…

【大数据】Spark面试100问 | CSDN博文精选

戳蓝字“CSDN云计算”关注我们哦!作者 | 游骑小兵责编 | 阿秃Q:什么是Spark?A:简单理解,Spark是在Hadoop基础上的改进,是UC Berkeley AMP lab所开源的类Hadoop MapReduce的通用的并行计算框架,…

为数据安全而生,阿里云容灾备份方案场景实践解析

摘要: 数字经济时代,数据正以超出想象的速度快速增长。短短几年,数据量已经从TB级别跃升到PB乃至ZB级别。 数字经济时代,数据正以超出想象的速度快速增长。短短几年,数据量已经从TB级别跃升到PB乃至ZB级别。 根据相关…

Dubbo项目入门

摘要: Dubbo是一款高性能、轻量级的开源Java RPC框架,它提供了三大核心能力:面向接口的远程方法调用,智能容错和负载均衡,以及服务自动注册和发现。 它的特性如下 面向接口代理的高性能RPC调用 智能负载均衡 服务自动注…

linux 编辑器_Linux的vi编辑器详细总结

《大数据和人工智能交流》头条号向广大初学者新增C 、Java 、Python 、Scala、javascript 等目前流行的计算机、大数据编程语言,希望大家以后关注本头条号更多的内容。vi是linux的文本编辑器,vim是vi编辑器的增强版本,习惯上也称为vi一、vi编…

聊聊困扰很多同学的一个问题:是否要转方向 ?

戳蓝字“CSDN云计算”关注我们哦!作者 | 大飞码字责编 | 阿秃这篇来聊聊困扰很多同学的一个问题:是否要转方向 ?这类问题没有标准的答案,每个人的理解也不一样,我写下的也只是我个人的想法,仅供大家参考。iOS 开发本…