视频应用一般要求播放器具有如下的基本特性:html
多客户端支持。包括:PC端(Web播放)和移动端(iOS,Android等)。具有多平台支持的播放器有助于简化开发,规避平台之间的差别。
经常使用的音视频编码格式支持。经常使用编码格式主要是:视频H264;音频MP3和AAC。这些音视频格式使用普遍,兼容性较好。
经常使用的容器格式支持。经常使用容器格式包括:flv、mp四、HLS(m3u8/mpeg-ts),mp3,aac。知足这些格式,即可以覆盖大多数的应用场景。
播放数据统计。播放统计数据主要用于用户观看统计、计费、基础服务的状态分析、用户行为分析等等。
广告。广告是视频应用重要的变现手段。
外观定制。外观定制帮助音视频应用美化界面,提升用户体验。
播放器的选择html5
可供选择的播放器不少,但可以很好地支持上述功能的播放器为数很少,经常使用的有:git
ckplayer: http://www.ckplayer.com
GrindPlayer: http://osmfhls.kutu.ru/docs/grind/github
seweise palyer | JW Player free+HLSProvider | ckplayer | GrindPlayer | |
---|---|---|---|---|
主要格式 | mp四、flv、m3u8 | mp四、flv、m3u8 | mp四、flv | mp四、flv、m3u8 |
播放技术 | flash&html5 | flash&html5 | flash&html5 | flash&html5 |
外观设置 | 支持 | 支持 | 支持 | 不支持 |
播放列表 | 支持 | 支持 | 支持 | 支持 |
广告 | 支持 | 支持 | 支持 | 支持 |
统计信息 | 支持 | 支持 | 支持 | 支持 |
字幕 | 支持 | 支持 | 不支持 | 支持 |
DVR | 支持 | 支持 | 不支持 | 支持 |
直播 | rtmp、hls | rtmp、hls | rtmp | hls |
HLS加密 | 支持 | 不支持(需premium和Enterprise版) | 不支持 | 128bit |
收费 | 免费/开源 | 免费/开源(不能用于商业用途) | 免费 | 开源 |
能够看出,JW Player的功能最为完整。其免费版存在功能限制,好比没有HLS支持,但有一些开源的插件能够补充这些功能。JW Player免费版+插件的形式主要问题在于免费版不能用于商业用途。ckplayer功能不少,但缺乏HLS在Web上的播放支持,因此使用上存在障碍。GrindPlayer功能比较全面些,一般的用况下,足赋使用。浏览器
所以,若是能够承担一些费用的话,Premium版的JW Player是最好的选择。若是音视频应用但愿使用免费的播放器,而且没有外观设置之类的需求,那么可使用GrindPlayer。若是用户不须要HLS的支持,那么可使用ckplayer。若是GrindPlayer和ckplayer都不能知足要求,同时又要免费,那么能够免费版JW Player+插件。但须要说明的是,这种形式可能存在法律风险,由于免费版JW Player不能用于商业用途。七牛云存储
音视频编码和容器格式的选择须要兼顾不一样播放平台和播放器,同时还须要最少的资源消耗量和开发量。缓存
咱们首先建议使用通用性较好的格式。频编码格式支持最多的应是H264,大部分的浏览器、移动端和播放器都支持这种编码格式。音频格式常见的主要是MP3和AAC,二者得到大多数的平台支持。所以,音视频应用应当尽量以这些编码生成视频文件,以便免去进一步编码转换的麻烦。若是应用没法控制源音视频的编码,那么能够在音视频上传后使用七牛云存储的音视频转码功能,生成播放所需的音视频。网络
容器格式相对复杂一些。不一样播放平台的支持各有不一样。可是,若是选择了合适的播放器,那么这方面的选择能够简单不少。通常而言,flv格式主要用于flash播放器,mp4在html5上支持较好。而移动端(iOS、Android)上,主要支持MP4和HLS。因为iOS端排斥flash,从而没法播放flv格式。若是咱们但愿在全部平台上使用统一的一种格式,那么只有MP4。因此,通常状况下,咱们建议使用MP4做为视频播放的主要格式。ide
MP4的不足之处在于对拖动播放(seek)支持很差。拖动播放是用户常见的一种播放行为,当用户须要跳过某些内容,或者音视频应用支持进度条打点和缩略图功能的时候,拖动播放有着很是重要的做用。正常状况下,播放器须要将MP4音视频文件缓存到拖放点,才能开始正式播放。但这会致使用户长时间等待,而且产生大量的废流量。有一些工具能够帮助服务端提供支持“?start=…”这样的参数,但在使用上存在诸多限制和问题。更有效的方式是将长视频切分红片断(一般5-10分钟一片),由一个播放列表串接起来。播放器在拖动播放时,只下载所涉及的片断,提升响应,减小废流量。工具
可是这种长视频切片的功能须要播放器的额外支持,现有播放器对此的支持很少。捷径是使用HLS。HLS尽管一般用于直播,但也能够用于点播。其作法是将长视频切片,而后用m3u8文件创建索引,由播放器解析而且自动加载和播放。
HLS的问题在于PC端的播放器支持不理想,flash播放器和桌面浏览器的html5都不原生支持HLS。所以,咱们在选择播放器的时候将HLS做为重要的一种能力。在上述列出的四种播放器中,大部分都支持HLS协议。所以,咱们建议用户选择其中支持Web端HLS的播放器,而且使用七牛云存储的视频切片功能,将其转换为HLS协议,简化应用的开发,提升用户体验。关于HLS播放相关支持,请参考在七牛云存储上播放HLS
此外,对于有些应用,但愿对于不一样的用户端采用不一样的音视频分辨率和码率,以适应不一样的使用环境。好比,移动端采用较低的码率和音视频质量,而PC端采用较高的码率和质量。更进一步,能够容许用户根据各自不一样的网络环境自动或者手动地选择音视频质量。这须要音视频播放的多码率的支持。HLS自己支持多码率音视频流,能够很方便地实现这种功能。关于HLS多码率支持,请参考如何利用七牛云存储实现HLS的多码率播放
假设有一个视频文件: sintel_trailer.mp4,以HLS播放。须要作三件事情:
将文件上传至七牛云存储。具体上传方法参考上传操做。
使用avthumb/m3u8功能将其转换成HLS媒体文件。这个转换能够在上传时使用数据预处理功能执行转换;或者在上传完成后,对其进行持久化FOP。可是,不管哪一种方式,都须要使用saveas功能转码结果保存为指定的名称(须要.m3u8文件名后缀)。
将转码后的结果构形成下载URL: http://ztest.qiniudn.com/sintel.m3u8 ,而后放入播放器,或者播放页面的参数中。
插件地址:https://github.com/jackzhang1204/sewise-player
demao :http://jackzhang1204.github.io/sewise/sewise_player/demos/index.html
下面的播放页面演示了几种播放器播放样例视频:
HLS:
seweizhi:http://seweizhi.qiniudn.com/demao.html
GrindPlayer:http://www.flashls.org/latest/examples/osmf/GrindPlayer.html
seweizhi:http://jackzhang1204.github.io/sewise/sewise_player/demos/index.html
MP4:
seweizhi:https://github.com/jackzhang1204/sewise-player
FLV:
seweizhi:http://jackzhang1204.github.io/sewise/sewise_player/demos/index.html