测试C#调用Aplayer播放视频(2:VideoPlayer源码学习)

本文主要是介绍测试C#调用Aplayer播放视频(2:VideoPlayer源码学习),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

  参考文献1除了介绍Aplayer组件的用法之外,还提供有demo下载以供学习,本文学习并记录其中的使用方式。
  VideoPlayer项目使用C#在VS2013开发,其解决方案中包括VideoPlayer和VideoPlayer两个小项目,前者基于.net framework4.0,后者基于.net framework3.5,这两个项目的程序截图如下所示:

在这里插入图片描述
  上述界面,基本都采用的基于Aplayer控件构建播放界面的技术路线,支持打开本地视频、在线视频(试了输入B网的视频地址,打不开,不清楚是不是视频地址格式不对造成的)、音量调节、播放/暂停/停止等功能,程序都不算复杂。
  项目中主要调用APlayer控件的以下主要函数:

序号名称说明
1SetVolume设置播放音量,取值范围为 0 - 1000
2SetCustomLogo设置视频区域在未播放视频时显示的图片
3GetDuration获取视频时长,单位为毫秒
4Open打开并播放视频文件,可以是本地或局域网或网络文件、DVD光碟、USB摄像头、屏幕或另一窗口截图 , Open 函数是一个异步方法, 调用后立即返回, 调用者想要知道 APlayer 是否真正成功地打开了媒体文件, 需要等后续的事件回调,如果打开成功,调用者会收到 OnOpenSucceeded 事件,如果打开失败,APlayer 的播放状态会变成 PS_READY 状态
5GetState获取播放引擎当前状态,返回值在下面的PLAY_STATE中定义
6Pause暂停视频
7Play继续播放视频
8Close关闭视频
9SetPosition设置视频播放位置,单位为毫秒,会触发OnSeekCompleted 事件
10GetPosition获取视频播放位置,单位为毫秒
11SetConfig设置播放参数,参数详细说明见APlayerSDK帮助文档中的APlayer设置

  项目中主要处理APlayer控件的以下几类事件:

序号名称说明
1OnBuffer播放在线视频,从网络缓冲媒体数据过程中触发,能够从事件中获取到缓冲百分比,100%时即可播放
2OnStateChanged迅雷播放引擎状态变化时触发,一般在播放、暂停、停止时触发,详细的状态说明见下面的枚举定义
3OnSeekCompleted跳转到指定位置时播放,主要是调用SetPosition函数设置播放位置后触发,能在事件中获取到最新的播放位置
4OnOpenSucceeded成功打开视频文件时触发,根据帮助文档,在此事件中可以做一些播放前的初始化工作
5OnDownloadCodec播放视频文件缺少对应的解码器时触发,能在事件中获取缺少的解码器的全路径,可以通过程序同步或异步下载解码器文件
6OnMessage视频区域操作鼠标或者视频区域拥有焦点时操作键盘时触发,两个小项目中都在此事件中处理鼠标操作,包括左键、右键、双击等
enum PLAY_STATE
{PS_READY      = 0,  // 准备就绪PS_OPENING    = 1,  // 正在打开PS_PAUSING    = 2,  // 正在暂停PS_PAUSED     = 3,  // 暂停中PS_PLAYING    = 4,  // 正在开始播放PS_PLAY       = 5,  // 播放中PS_CLOSING    = 6,  // 正在开始关闭
};

  项目编译完成后,会在可执行文件所在目录下创建codecs,需要手动将解码器文件复制到该文件夹内才可正常播放视频,上一篇文章中最后提到的问题就是没有复制解码器文件造成的(也可以调用SetConfig函数通过Codecs path参数设置解码器文件路径),后续会参照本文学习的源码编写简单的视频播放程序。

参考文献:
[1]https://blog.csdn.net/qq_45533937/article/details/115800927

这篇关于测试C#调用Aplayer播放视频(2:VideoPlayer源码学习)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/319138

相关文章

C#中Guid类使用小结

《C#中Guid类使用小结》本文主要介绍了C#中Guid类用于生成和操作128位的唯一标识符,用于数据库主键及分布式系统,支持通过NewGuid、Parse等方法生成,感兴趣的可以了解一下... 目录前言一、什么是 Guid二、生成 Guid1. 使用 Guid.NewGuid() 方法2. 从字符串创建

Python使用OpenCV实现获取视频时长的小工具

《Python使用OpenCV实现获取视频时长的小工具》在处理视频数据时,获取视频的时长是一项常见且基础的需求,本文将详细介绍如何使用Python和OpenCV获取视频时长,并对每一行代码进行深入解析... 目录一、代码实现二、代码解析1. 导入 OpenCV 库2. 定义获取视频时长的函数3. 打开视频文

C# 比较两个list 之间元素差异的常用方法

《C#比较两个list之间元素差异的常用方法》:本文主要介绍C#比较两个list之间元素差异,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录1. 使用Except方法2. 使用Except的逆操作3. 使用LINQ的Join,GroupJoin

Java中调用数据库存储过程的示例代码

《Java中调用数据库存储过程的示例代码》本文介绍Java通过JDBC调用数据库存储过程的方法,涵盖参数类型、执行步骤及数据库差异,需注意异常处理与资源管理,以优化性能并实现复杂业务逻辑,感兴趣的朋友... 目录一、存储过程概述二、Java调用存储过程的基本javascript步骤三、Java调用存储过程示

Python中Tensorflow无法调用GPU问题的解决方法

《Python中Tensorflow无法调用GPU问题的解决方法》文章详解如何解决TensorFlow在Windows无法识别GPU的问题,需降级至2.10版本,安装匹配CUDA11.2和cuDNN... 当用以下代码查看GPU数量时,gpuspython返回的是一个空列表,说明tensorflow没有找到

python如何调用java的jar包

《python如何调用java的jar包》这篇文章主要为大家详细介绍了python如何调用java的jar包,文中的示例代码简洁易懂,具有一定的借鉴价值,有需要的小伙伴可以参考一下... 目录一、安装包二、使用步骤三、代码演示四、自己写一个jar包五、打包步骤六、方法补充一、安装包pip3 install

使用Python进行GRPC和Dubbo协议的高级测试

《使用Python进行GRPC和Dubbo协议的高级测试》GRPC(GoogleRemoteProcedureCall)是一种高性能、开源的远程过程调用(RPC)框架,Dubbo是一种高性能的分布式服... 目录01 GRPC测试安装gRPC编写.proto文件实现服务02 Dubbo测试1. 安装Dubb

Python如何将OpenCV摄像头视频流通过浏览器播放

《Python如何将OpenCV摄像头视频流通过浏览器播放》:本文主要介绍Python如何将OpenCV摄像头视频流通过浏览器播放的问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完... 目录方法1:使用Flask + MJPEG流实现代码使用方法优点缺点方法2:使用WebSocket传输视

Python的端到端测试框架SeleniumBase使用解读

《Python的端到端测试框架SeleniumBase使用解读》:本文主要介绍Python的端到端测试框架SeleniumBase使用,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全... 目录SeleniumBase详细介绍及用法指南什么是 SeleniumBase?SeleniumBase

Go学习记录之runtime包深入解析

《Go学习记录之runtime包深入解析》Go语言runtime包管理运行时环境,涵盖goroutine调度、内存分配、垃圾回收、类型信息等核心功能,:本文主要介绍Go学习记录之runtime包的... 目录前言:一、runtime包内容学习1、作用:① Goroutine和并发控制:② 垃圾回收:③ 栈和