如何利用阿里视频云开源组件,快速自定义你的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,用户可以获取实现的代码,并且也可以贡献自己的代码和建议。
记忆播放
开始广告
暂停广告
播放下一个
播放列表
旋转和镜像
视频广告
弹幕
试看

如果用户实现了Aliplayer的组件,并且想贡献出来,可以联系我们,我们会在github首页添加导航,链接到您的github项目上。

Aliplayer体验馆:

https://player.alicdn.com/aliplayer/presentation/index.html

Aliplayer Github:

https://github.com/aliyunvideo/AliyunPlayer_Web

如需咨询视频SDK相关问题,可以加入钉钉群:11759425

活动推荐

12月20日杭州站【云栖TechDay-音视频技术实战沙龙】,多位视频云专家现场解读短视频、直播、视频AI、视频加速技术实践,点击了解活动详情及免费报名

目录
相关文章
|
5月前
|
Cloud Native 安全 Java
构建高性能云原生应用:使用Golang的实践指南(邮件/短信发送、人脸识别、云点播、云直播项目)
构建高性能云原生应用:使用Golang的实践指南(邮件/短信发送、人脸识别、云点播、云直播项目)
|
9月前
|
网络协议 数据库 Android开发
移动端接入关键技术解析
移动端接入关键技术解析
63 0
|
11月前
|
消息中间件 存储 编解码
带你读《云原生架构白皮书2022新版》——网易云音乐曲库研发负责人谈音视频算法的 Serverless 探索之路
带你读《云原生架构白皮书2022新版》——网易云音乐曲库研发负责人谈音视频算法的 Serverless 探索之路
364 1
|
编解码 边缘计算 监控
深度解读:阿里云视频直播重磅功能升级
2022年注定是体育超级大年,冬奥、亚运会、大运会、世界杯等各类大型体育赛事应接不暇。随之而来便是各类赛事直播,客户对直播服务要求变得越来越高,视频直播技术创新显得格外重要。如何利用直播技术创新降低线下部署导播台的成本、如何提供灵活及场景化的能力、如何确保线上内容传输安全稳定,成为许多企业客户关心的问题。 为更好服务客户,阿里云对视频直播进行了重磅功能升级,打造一站式沉浸体验云上虚拟直播间服务,提供在传输处理云上直播高可靠、冗余设计等端到端一站式的能力,为大型赛事或活动保提供保驾护航的能力。
874 0
深度解读:阿里云视频直播重磅功能升级
|
人工智能 开发框架 运维
阿里云视频云推出低代码音视频工厂vPaaS: 包含“一个云原生开发平台+N个音视频业务场景”为企业提供音视频开发最短路径
阿里云视频云凭借阿里巴巴卓越的技术能力和生态体系,以及自身沉淀了13年的行业经验,正在着力打造云端一体的数智化音视频能力,构建全场景的产品矩阵和全链路的音视频服务,助力多行业的数智化转型和多产业的数智化升级,实现全民共享、技术普惠,助力云上创新、价值创造。
1378 1
阿里云视频云推出低代码音视频工厂vPaaS: 包含“一个云原生开发平台+N个音视频业务场景”为企业提供音视频开发最短路径
|
编解码 架构师 文件存储
直播系统的云构建干货分享
直播系统的云构建干货分享
204 0
直播系统的云构建干货分享
|
消息中间件 存储 编解码
网易云音乐音视频算法的 Serverless 探索之路
网易云音乐最初的音视频技术大多都应用在曲库的数据处理上,基于音视频算法服务化的经验,云音乐曲库团队与音视频算法团队一起协作,一起共建了网易云音乐音视频算法处理平台,为整个云音乐提供统一的音视频算法处理平台。本文将分享我们如何通过 Serverless 技术去优化我们整个音视频处理平台。
网易云音乐音视频算法的 Serverless 探索之路
|
消息中间件 传感器 运维
IOT产品解读及最佳实践|阿里云产品内容精选(十五)
本文源于阿里云开发者社区IOT版块,为IOT爱好者和从业者进一步了解IOT。
|
运维 Kubernetes Cloud Native
【1.19直播预告】OpenKruise | 阿里云原生应用安全防护实践与开源
“周二开源日系列直播”是阿里云开发者社区在每周二 19:00-20:00 为大家带来的阿里巴巴开源的最新最佳实践、社区参与等新鲜内容的直播栏目。从 1 月 19 日开始,阿里云云原生容器团队将连续四周,依次带来围绕开源项目 OpenKruise、OpenYurt、KubeVela、Fluid 的直播分享,内容包括 ,敬请持续关注!
【1.19直播预告】OpenKruise | 阿里云原生应用安全防护实践与开源
|
Web App开发 存储 编解码
互动直播之WebRTC服务开源技术选型
介绍了直播的基础知识,对比几种传输标得出WebRTC的优势,常见的WebRTC架构及开源方案。
4230 0