.NET中使用APlayer组件自制播放器

目录网络

  • 说明
  • APlayer介绍
  • APlayer具有功能
  • APlayer使用
  • 自制播放器Demo
  • 未完成工做
  • 源码下载

 

说明架构

因为需求缘由,须要在项目中(桌面程序)集成一个在线播放视频的功能。大概要具有“流式”边下载边播放的能力。自带的media player不太好看又不让改动,网上找了不少开源的播放器,效果也都不佳(可能还没碰到比较好的)。后来找到了迅雷公司的APlayer播放引擎(其实就是一个ActiveX控件),感受官网上的介绍还行,后来试了一下发现不错。ide

官方参考文档以及demo都是C++版本的,或者是Web版的,网上几乎也找不到用.NET开发的相关资料,不过幸亏也不太难,:-)工具

 

APlayer介绍测试

“APlayer 媒体播放引擎是迅雷公司从 2009 年开始开发的通用音视频媒体文件播放内核。网站

迅雷看看播放器和迅雷影音就是使用 APlayer 做为播放内核,目前迅雷看看播放器在PC播放器市场占有率排第一。spa

本质上APlayer播放引擎是一个ActiveX控件,能够被本地其余外部程序嵌入调用,也能够直接被网页嵌入,相似于(Adobe Flash Player)。APlayer不包含界面,但另外一个依赖于APlayer的ActiveX控件APlayerUI能够提供丰富的界面元素(播放控制条,Flash广告等),APlayerUI 也被包含在 APlayerSDK 中。debug

设计

具体很少说了,参见官方网站的介绍 http://aplayer.open.xunlei.com/3d

 

APlayer具有功能

  • 封闭式 DirectShow 架构,不受系统解码环境干扰
  • 全媒体文件格式支持
  • 支持丰富的媒体文件传输协议(http/ftp/mms/rtsp/rtmp/hls等)
  • 支持将多个 ts/flv/mp4 分段切片文件组成 m3u8 无缝播放
  • 强大的附加功能(字幕、音轨、转码/转格式、画质加强、截GIF……)
  • 支持最新的 H.265(HEVC) 解码

由上能够看出,它是以DirectShow为基础开发出来的。基本上你能想到的功能它几乎都包含(注,我没有所有测试,只是使用了一部分至关简单的功能),你从开发文档中关于SetConfig/GetConfig API的使用就能够看出,它包含的功能之多。下图是调用SetConfig API对APlayer进行设置的文档截图:

以上只是一部分,并不全。

 

APlayer使用

APlayer能够用在Web中,也能够用在桌面程序中,听说还出了Android、IOS以及Windows Phone版本的。因为我只试过桌面版的,因此在Web中使用效果我只截一个自带的效果图。

  • Web中的使用:

  • .NET Winform中的使用:

其实也很简单,先要注册一下COM组件。

如上图,运行从官网上下载的SDK包中的install.bat。注册成功后,在VS的工具箱中添加COM控件:

选择 APlayer3 Control后,点击肯定。以后你就能够在工具箱中看到APlayer播放器控件:

以后的用法与其余.NET控件差异不大。注意向窗体设计器中拖入控件后,项目中自动会添加两个引用:

添加引用的过程不须要人工添加。这里注意要将这两个引用的“独立”属性改成true。这样的话,编译成功后,VS自动会将非托管DLL(官网上下载的SDK中的dll)复制到debug目录中(注意必须这样作,否则程序发布后,换一台电脑运行不了,提示要安装COM组件

  • 成员方法和事件

APlayer的成员方法和事件理解起来至关简单,基本上就是对应“打开”、“播放”、“暂停”、“关闭”、“设置音量”、“获取视频长度”、“缓冲进度”、“快进/倒退”等等。几乎跟咱们平时使用播放器的动做一致,下面一张图显示的是成员方法和事件,用法很简单,我就不具体说了。

名字很好理解,稍微懂点英文的都知道。

另外,须要重点说一下的是OnMessage事件,控件的鼠标、键盘等事件都须要经过该事件来捕获,好像没有其余方式。

 

自制播放器Demo

我本身花一点时间作了一个demo,顺便也是为了熟悉它的使用。Demo源码的注释已经很是清楚详细,我就不贴代码了,贴几张图:

播放本地视频:

播放网络视频(缓冲中):

模仿播放器部分功能:

只是简单的模仿播放器的部分功能(显示字幕、截图)。还有不少功能有待发掘,基本上都是使用APlayer.SetConfig和GetConfig两个方法来完成的,具体参数请参见帮助文档。

 

未完成工做

未完成的工做太多了,多得数不过来,毕竟这只是一个demo :-)。

可是我目前有一个疑问,好像没有公开“获取已缓冲数据”的API,我怎么知道已经缓冲了多少数据呢?没有这个API的话,就作不出来播放器进度条上“显示已经缓冲完成帧”的效果。可能我还没发现,比较仓促。

注意每种视频格式都须要对应的解码库,能够从官网上下载完整解码库,不过比较大,所有解压完成后,80多M。因此实际应用中,最好不要包含所有的解码库。当须要的解码库不在../codecs目录中时,APlayer会激发OnDownloadCodec事件,提示下载解码器。

 

源码下载

源码下载地址:http://files.cnblogs.com/files/xiaozhi_5638/VideoPlayer.rar(注意因为解码库太大,因此debug目录中的codecs目录为空,若是要运行请本身下载解码库)

开发SDK下载地址:http://aplayer.open.xunlei.com/APlayerSDK.zip

完整解码库下载地址:http://aplayer.open.xunlei.com/codecs.zip(84M)

相关文章
相关标签/搜索