最近上班很无聊,刚好在找软件的时候发现现在好多直播,视频软件都是基于APlayer引擎开发的,因此产生了自己开发一个视频播放器的想法,功能上APlayer可以满足本地播放,网络播放,直播等功能。

APlayer介绍

引擎介绍:

APlayer 媒体播放引擎是迅雷公司从 2009 年开始开发的通用音视频媒体文件播放内核。 
迅雷看看播放器和迅雷影音就是使用 APlayer 作为播放内核,目前迅雷看看播放器在PC播放器市场占有率排第一。

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

APlayer特点:

  • 封闭式 DirectShow 架构,不受系统解码环境干扰
  • 全媒体文件格式支持
  • 丰富的媒体文件传输协议(http/ftp/mms/rtsp/rtmp/hls等)
  • 强大的附加功能(字幕、音轨、转码/转格式、画质增强、截GIF……)
  • 支持将多个 ts/flv/mp4 分段切片文件组成 m3u8 无缝播放
  • 支持最新的 H.265(HEVC) 解码 (Powered by北京视骏科技有限公司)
  • 支持全景视频和虚拟现实(VR)眼镜 Oculus DK2 的播放。

APlayer下载

  • APlayerSDK(版本:3.9.1.763)
  • APlayer完整解码库(版本同上)

建议直接到APlayer官网下载最新版本


APlayer安装

先下载SDK和解码库,下载后先解压SDK,解压后SDK根目录如下

其中bin目录中存放的就是一些dll文件和解码库,docs目录下是官方帮助文档,include目录下是什么我也不知道,samples目录下是官方的demo,不过貌似是C++的。我们需要用到的只有bin目录和docs目录下的东西。

接下来打开bin目录,将下载的解码库解压到bin目录下,覆盖原有的空解码库文件夹(codecs文件夹),覆盖完成后退回SDK根目录,打开cmd(怎么打开肯定不用说吧),跳转到SDK根目录,执行install.bat,等待完成后就可以关掉了。

接下来打开VS,新建一个Winform项目,完成后再工具箱空白处右键>添加选项卡 ,然后将新建的选项卡命名为APlayer,然后在新建的选项卡上右键>选择项,然后在打开的窗口上选择COM

然后里面有个APlayer3 Control,把前面的复选框选中,然后点击确定就OK了,如果你的里面没有,那么请重复第二步,并且以管理员权限运行cmd。

点击确定后APlayer选项卡中就有一个APlayer3 Control组件了,拖到窗体上就能用了。

到这一步还没完,因为现在你写的程序,发给别人后,别人还要安装APlayer才行,想要直接发给别人就可以用的话,需要先打开解决方案资源管理器,选中引用中的APlayer3Lib,然后打开属性面板,将里面的独立属性和嵌入互操作性属性改成True

 

到此APlayer就安装完成了(貌似后面的部分已经不属于APlayer的安装范围了 =.=)


APlayer使用

接下来是APlayer的使用,先打开APlayerSDK根目录下的docs文件夹里面的官方手册(APlayer.chm)

手册目录里面的什么IDL定义啊什么的都不用看,和C#没什么关系,主要是看APlayer方法、事件和设置。

APlayer方法

APlayer方法没什么好说的,也就是APlayer.方法名(参数),每个方法是干嘛的也有解释,写播放器的话我认为这些基础的东西应该都会了吧。

APlayer事件

APlayer虽然在VS属性面板中有事件,但是貌似并没有什么用,事件还是要自己写,所以就讲一下APlayer事件的用法吧,下面用OnMessage事件为栗来讲解。

先写个名为OnMessage(方法名可以自己定义,建议直接用事件名)的方法:

/// <summary>
/// OnMessage 事件发生在用户在 APlayer 视频区域引发鼠标操作或者当 APlayer 视频区域拥有焦点时引发键盘操作时。
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
public void OnMessage(object sender,AxAPlayer3Lib._IPlayerEvents_OnMessageEvent e)
{// 方法体
}

该方法有两个参数,第一个是object类型,第二个是APlayer内的一个类型,每个方法对应不同的类型,举个栗子:

OnMessag事件就是AxAPlayer3Lib._IPlayerEvents_OnMessageEvent 
OnStateChanged事件就是AxAPlayer3Lib._IPlayerEvents_OnStateChangedEvent 
OnDownloadCodec事件就是AxAPlayer3Lib._IPlayerEvents_OnDownloadCodecEvent

然后在窗口的Load事件里面,将定义的OnMessage方法绑定(委托?拜托?指定?指引?绑架?反正就是这个意思而已 [智障.jpg])

APlayer.OnMessage += new AxAPlayer3Lib._IPlayerEvents_OnMessageEventHandler(OnMessage);
  • 1

绑定的方法就是:

APlayer.事件名 += new APlayer中事件对应的类(要绑定的方法名)

再举个栗子:

OnMessage 事件就是: 
APlayer.OnMessage += new AxAPlayer3Lib._IPlayerEvents_OnMessageEventHandler(OnMessage); 
OnStateChanged事件就是: 
APlayer.OnStateChanged += new AxAPlayer3Lib._IPlayerEvents_OnStateChangedEventHandler(OnStateChanged); 
OnDownloadCodec事件就是: 
APlayer.OnDownloadCodec += new AxAPlayer3Lib._IPlayerEvents_OnDownloadCodecEventHandler(OnDownloadCodec);

这样就可以绑定事件了,然后在自己写的方法中写事件触发时要执行的代码。


APlayer设置

APlayer设置的话主要是通过GetConfig和SetConfig方法来完成,GetConfig用于获取设置的值,SetConfig用于设置对应设置的值。

  • 返回值:string GetConfig(int 设置编号)
  • 返回值:int GetConfig(int 设置编号,string 设置值)

设置编号可以查看官方手册中的 “APlayer 设置” 章节

C# Aplayer开发笔记(一)相关推荐

  1. 运维开发笔记整理-前后端分离

    运维开发笔记整理-前后端分离 作者:尹正杰  版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.为什么要进行前后端分离 1>.pc, app, pad多端适应 2>.SPA开发式的流 ...

  2. iOS开发笔记-两种单例模式的写法

    iOS开发笔记-两种单例模式的写法 单例模式是开发中最常用的写法之一,iOS的单例模式有两种官方写法,如下: 不使用GCD #import "ServiceManager.h"st ...

  3. 【Visual C++】游戏开发笔记十三 游戏输入消息处理(二) 鼠标消息处理

    本系列文章由zhmxy555编写,转载请注明出处. http://blog.csdn.net/zhmxy555/article/details/7405479 作者:毛星云    邮箱: happyl ...

  4. 【Visual C++】游戏开发笔记二十七 Direct3D 11入门级知识介绍

    游戏开发笔记二十七 Direct3D 11入门级知识介绍 作者:毛星云    邮箱: happylifemxy@163.com    期待着与志同道合的朋友们相互交流 上一节里我们介绍了在迈入Dire ...

  5. Android移动APP开发笔记——最新版Cordova 5.3.1(PhoneGap)搭建开发环境

    引言 简单介绍一下Cordova的来历,Cordova的前身叫PhoneGap,自被Adobe收购后交由Apache管理,并将其核心功能开源改名为Cordova.它能让你使用HTML5轻松调用本地AP ...

  6. 安卓开发笔记——自定义广告轮播Banner(实现无限循环)

    关于广告轮播,大家肯定不会陌生,它在现手机市场各大APP出现的频率极高,它的优点在于"不占屏",可以仅用小小的固定空位来展示几个甚至几十个广告条,而且动态效果很好,具有很好的用户& ...

  7. os-cocos2d游戏开发基础-进度条-开发笔记

     os-cocos2d游戏开发基础-进度条-开发笔记(十)   ios-cocos2d游戏开发基础-游戏音效-开发笔记(九)       ios-cocos2d游戏开发基础-CCLayer和Touch ...

  8. 【Visual C++】游戏开发笔记四十一 浅墨DirectX教程之九 为三维世界添彩:纹理映射技术(一)...

    本系列文章由zhmxy555(毛星云)编写,转载请注明出处. 文章链接: http://blog.csdn.net/zhmxy555/article/details/8523341 作者:毛星云(浅墨 ...

  9. 【Android】Parse开发笔记(1)—— 准备

    一.简介 Parse是由 YC 孵化出来的.专为移动应用提供后台服务的云计算平台,为开发者包办繁琐的后台服务,让开发者只需专注于具体的开发工作.它提供任意数据保存.照片或其它文件存储.发送推送通知.创 ...

最新文章

  1. 如何在 Linux 上安装服务器管理软件 Cockpit
  2. dispatch事件分发
  3. hinton、李飞飞支持的NLP明星创企,今获1.25 亿美元B轮融资
  4. 汇编语言(八)之删除数组中为零的元素
  5. VMWARE双机安装说明
  6. 全国各高校开学时间汇总!
  7. UML---(1)一张图看懂UML 类图
  8. 解散群通知怎么写_德云社演员私联初二女生,随后德云社全员退出粉丝群,什么情况?...
  9. boost mutex 应用
  10. 软件实习项目4——校园一卡通管理系统(代码实现)
  11. 人行地区代码一览表_全国各地区代码.
  12. 用QT实现一个简单的桌面宠物
  13. 寻星计划|Apache Doris 社区4月职位广场,IDG资本、Shopee 多个岗位
  14. JSP页面请求和响应
  15. 按Right-BICEP要求的对任务二的测试用例
  16. yii mysql gii_Yii 框架使用Gii生成代码操作示例
  17. Linux命令行如何编辑word文档,在Linux平台下用命令行工具显示Word文档
  18. JS根据日期计算年龄
  19. TR069和TR111协议测试STUN的功能
  20. CDN防盗链与有效使用CDN缓存

热门文章

  1. 【ARM】寄存器与异常——第二篇
  2. js序列化与反序列化和C#中json序列化与反序列化
  3. 车机如何安装鸿蒙os,鸿蒙小车安装详细教程
  4. outlook删除服务器文件夹,如何还原已删除的Outlook文件夹[最佳方式]
  5. python篇9_神奇的魔法方法
  6. python实现android应用稳定性测试
  7. 维峰电子通过注册:年营收4亿 李文化家族色彩浓厚
  8. [渝粤教育] 盐城工学院 土力学与基础工程 参考 资料
  9. ArcGIS10联网无法启动问题解决
  10. PyCharm基本配置:设置绿色护眼绿豆沙背景等