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

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

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

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

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

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

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

每个阶段的说明:

组件系统特点:
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();
      }
      });
  1. 如何启用组件
    播放器提供了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}
]
});

  1. 如何获取组件
    有的场景下,需要获取组件做一下事情,比如调用组件里的方法,这时可以通过播放器的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

原文链接

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

原文地址:http://blog.51cto.com/13876536/2164001

时间: 2024-10-25 18:15:43

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

@java--liang 这是一款HTML5的前端视频Jquery组件,里面有41个播放器Demo。

原文:@java--liang 这是一款HTML5的前端视频Jquery组件,里面有41个播放器Demo. 源代码下载地址:http://www.zuidaima.com/share/1550463527406592.htm 支持播放格式:MP3,M4A / M4V,OGA / OGV,WEBMA / WEBMV,WAV,FLA / FLV,RTMPA / RTMPV 如果有使用上的不明白的可以QQ交流,或者留言给我,第一时间回复. 早上看到你的留言,希望能帮你度过这个星期,不至于完蛋,@jav

【Android】利用安卓的数据接口、多媒体处理编写内存卡Mp3播放器app

通过调用安卓的MediaPlayer可以直接完成Mp3等主流音频的播放,同时利用ContentResolver与Cursor可以直接读取安卓内在数据库的信息,直接获取当前sdcard中所有音频的列表,无须像<[Android]内存卡图片读取器,图库app>(点击打开链接)一样利用原始的Java代码去遍历整个sdcard卡,直接调用安卓固有的类既便捷又快速.最后,读取出来的Mp3可以通过适配器直接加载到ListView列表,做出如下所示的内存卡Mp3播放器app效果.本app在自己的真实的16G

微信公众号开发(4)---使用开源组件开发自定义菜单栏的创建

我们引入的开源微信开发的依赖中,对于微信菜单的创建所需要的参数进行了很好的封装,我们只需要按照微信文档开发的规范,进行参数的设置就好了-- 关于微信菜单开发的格式: { "button":[ { "type":"click", "name":"今日歌曲", "key":"V1001_TODAY_MUSIC" }, { "name":"菜单

网易视频云:流媒体服务器原理和架构解析

网易视频云是网易公司旗下的视频云服务产品,以Paas服务模式,向开发者提供音视频编解码SDK和开放API,助力APP接入音视频功能.今天,网易视频云的技术专家给大家分享一篇流媒体技术性文章:流媒体服务器原理和架构解析. 一个完整的多媒体文件是由音频和视频两部分组成的,H264.Xvid等就是视频编码格式,MP3.AAC等就是音频编码格式,字幕文件只是附加文件.目前大部分的播放器产品对于H.264 + AAC的MP4编码格式支持最好,但是MP4也有很多的缺点,比如视频header很大,影响在线视频

搭建rtmp直播流服务之4:videoJS/ckPlayer开源播放器二次开发(播放rtmp、hls直播流及普通视频)

前面几章讲解了使用nginx-rtmp搭建直播流媒体服务器,以及使用ffmpeg推流到nginx-rtmp服务器,java通过命令行调用ffmpeg实现推流服务,后端的事情到这里就已经全部完成了. 本章讲一下播放器的选用和二次开发,前端的播放器虽然有flex(flash)可以用,但是很遗憾flex接触的并不多,学习成本又太高,那么基于第三方开源的flash播放器二次开发就显得很有必要. 一.几种播放器选择 那么播放器,哪些已经不再更新的和收费的,这里不会介绍,只介绍两种轻量级的开源播放器. 1.

Chromium为视频标签&lt;video&gt;创建播放器的过程分析

Chromium是通过WebKit解析网页内容的.当WebKit遇到<video>标签时,就会创建一个播放器实例.WebKit是平台无关的,而播放器实现是平台相关的.因此,WebKit并没有自己实现播放器,而仅仅是创建一个播放器接口.通过这个播放器接口,可以使用平台提供的播放器来播放视频的内容.这就简化了Chromium对视频标签的支持.本文接下来就分析Chromium为视频标签创建播放器的过程. 老罗的新浪微博:http://weibo.com/shengyangluo,欢迎关注! 以And

phpcms视频模块实现列表页打开内容页直接播放视频

摘自phpcms论坛 原链接地址:http://bbs.phpcms.cn/thread-557691-1-1.html 之前下载研究过“化蝶自在飞”开发的视频模型,发现功能不错,但唯一的缺憾是,我想在列表页打开,然后直接在内容页播放,经过“汨罗之窗”站长的点拨,本人现分享一个视频模块,仅调用 外部FLV视频 ,其他视频格式请自行找播放器代码.本人是新手,目的仅在于为新手提供便利,做的不好,请高手们不要见笑...1:新建视频模型,然后添加一个视频字段,字段类型为“单行文本”.2:字段名称“自定义

如何利用阿里云打造感知零售平台

摘要: 一.背景介绍所谓感知零售是指的根据店铺顾客的情绪变化以及顾客在店铺内对商品货架停留位置来判断顾客对商品感兴趣程度,实时在线调整营销策略.帮助企业第一时间掌握顾客感受,第一时间下发营销策略,第一时间得到营销效果反馈. 原文地址:http://click.aliyun.com/m/43688/ 一.背景介绍 所谓感知零售是指的根据店铺顾客的情绪变化以及顾客在店铺内对商品货架停留位置来判断顾客对商品感兴趣程度,实时在线调整营销策略.帮助企业第一时间掌握顾客感受,第一时间下发营销策略,第一时间得

2018年视频云服务市场格局进入整合阶段,阿里云视频云位居市场竞争力领导者的位置

据计世资讯(CCW Research)的研究结果表明: 一.中国视频云市场进入高速发展阶段据计世资讯(CCW Research)的研究结果表明,近年来国内视频云市场保持了高速的增长势头,特别是2016年以来,视频云市场进入高速发展阶段,直播的火爆带动视频云服务需求快速增长.2018年中国视频云服务市场规模已经达到31.2亿元,同比增长36.2%.随着4K.VR等技术应用普及,将会催生出大量新的视频云应用场景.伴随着视频云深入行业发展,未来可以预见视频云市场将会拥有广阔的市场前景. 图表 1 20