鸿蒙音视频播放器:libwlmedia

news/2025/2/12 18:33:49/

wlmedia_0">libwlmedia

跨平台播放器wlmedia现在已经支持了鸿蒙(Harmony)平台了,SDK插件地址:libwlmedia

一、接入SDK

1.1 导入SDK

ohpm i @ywl5320/libwlmedia

1.2 添加权限(可选)

如果需要播放网络视频,需要添加网络权限

#module.json5
"requestPermissions": [{"name": "ohos.permission.INTERNET"}
]

1.3 设置XComponentController

let wlPlayer: WlPlayer = new WlPlayer();
let wlComponentController: WlComponentController = new WlComponentController(this.wlPlayer);
...
XComponent({type: XComponentType.SURFACE,controller: this.wlComponentController}).width('100%').height('100%')
...

1.4 基础调用代码

@Entry
@Component
struct Index{private wlPlayer: WlPlayer | null = null;private wlComponentController: WlComponentController | null = null;aboutToAppear(): void {this.wlPlayer = new WlPlayer();this.wlPlayer.setOnMediaInfoListener({onPrepared: (): void => {// 异步准备好后回调,这里调用 wlplayer.start() 开始播放this.wlPlayer?.start();},onTimeInfo: (currentTime: number, bufferTime: number): void => {// 时间进度回调 },onComplete: (wlCompleteType: WlCompleteType, msg: string): void => {if (wlCompleteType == WlCompleteType.WL_COMPLETE_EOF) {// 正常播放完成} else if (wlCompleteType == WlCompleteType.WL_COMPLETE_ERROR) {// 播放出错,原因为:msg 字段} else if (wlCompleteType == WlCompleteType.WL_COMPLETE_HANDLE) {// 主动调用 wlPlayer.stop() 会回调此类型} else if (wlCompleteType == WlCompleteType.WL_COMPLETE_NEXT) {// 正在播放中,切换了新的数据源,会回调此类型} else if (wlCompleteType == WlCompleteType.WL_COMPLETE_TIMEOUT) {// 播放超时,会回调此接口} else if (wlCompleteType == WlCompleteType.WL_COMPLETE_LOOP) {// 循环播放中,每开始新的一次循环,会回调此接口}},onLoadInfo: (loadStatus: WlLoadStatus, progress: number, speed: number): void => {// 加载状态回调if (wlLoadStatus == WlLoadStatus.WL_LOADING_STATUS_START) {// 开始加载} else if (wlLoadStatus == WlLoadStatus.WL_LOADING_STATUS_PROGRESS) {// 加载进度} else if (wlLoadStatus == WlLoadStatus.WL_LOADING_STATUS_FINISH) {// 加载完成}},onFirstFrameRendered: (): void => {// seek 完成回调},onSeekFinish: (): void => {// seek 完成回调},onAudioInterrupt: (type: WlAudioInterruptType, hint: WlAudioInterruptHint) => {// 音频打断,和系统一致}this.wlComponentController = new WlComponentController(this.wlPlayer);this.wlPlayer.setClearLastVideoFrame(this.wlComponentController.getUniqueNum(), false);}// 退出 销毁资源onBackPress(): boolean | void {this.wlPlayer?.release()}build() {Column() {XComponent({type: XComponentType.SURFACE,controller: this.wlComponentController}).onLoad((event) => {// 加载完成后就开始播放this.wlPlayer?.setSource(this.filesDir + "/huoying_cut.mkv");this.wlPlayer?.prepare();}).width('100%').height('100%')}}
}

二、效果展示

HarmonyOS libwlmedia 演示视频

三、注意事项

  • 模拟器播放需要设置解码类型为soft,因为模拟器测试不支持硬解码。
this.wlPlayer.setCodecType(WlCodecType.WL_CODEC_SOFT)

四、更多功能

参考:harmonyos_api


http://www.ppmy.cn/news/1571496.html

相关文章

华为Mate 70 Pro或推出全新版本

关于华为Mate 70 Pro或推出全新版本的相关内容:可能的版本及命名。 据数码博主“定焦数码”爆料,华为Mate 70 Pro将推出新版本,命名为“优享版”。这一命名方式与华为Mate 60系列中的Mate 60 Pro乐臻版类似,预计优享版也会是一个组…

【编程实践】vscode+pyside6环境部署

1 PySide6简介 PySide6是Qt for Python的官方版本,支持Qt6,提供Python访问Qt框架的接口。优点包括官方支持、LGPL许可,便于商业应用,与Qt6同步更新,支持最新特性。缺点是相比PyQt5,社区资源较少。未来发展…

DeepSeek和ChatGPT的对比

最近DeepSeek大放异彩,两者之间有什么差异呢?根据了解到的信息,简单做了一个对比。 DeepSeek 和 ChatGPT 是两种不同的自然语言处理(NLP)模型架构,尽管它们都基于 Transformer 架构,但在设计目标…

Reflexxes Type II 机器人和运动控制系统的实时运动规划库

Reflexxes Type II 是德国 Reflexxes GmbH 公司开发的一套用于机器人和运动控制系统的实时运动规划库,以下从主要功能、核心算法、应用场景、使用优势等方面介绍其主要内容: 主要功能 轨迹生成:能够在极短时间内为机器人或运动系统生成平滑…

STM32 硬件I2C读写MPU6050

接线图 函数介绍 生成起始条件 void I2C_GenerateSTART(I2C_TypeDef* I2Cx, FunctionalState NewState); 生成终止条件 void I2C_GenerateSTOP(I2C_TypeDef* I2Cx, FunctionalState NewState); 配置在收到一个字节后,是否给从机应答(配置ACK位&…

rebase和merge

rebase 和merge区别: rebase变基,改变基底:rebase会抹去提交记录。 git pull 默认merge,git pull --rebase 变基 rebase C、D提交属于feature分支,是基于master分支,在B提交额外拉出来的,当…

docker环境下部署face-search开源人脸识别模型

由于我们是直接将face-search部署在docker容器中的,所以,在部署之前一定要检查一下自己的docker环境,要不然部署过程中会出现各种各样的问题 我这里的docker环境是 一、安装docker环境 如果docker版本比较低或者docker-compose的版本比较低的情况下,部署的时候docker的yml…

LabVIEW商业软件开发

在商业软件开发和仪器自动测试领域,LabVIEW以其图形化编程方式、高效的数据采集能力和强大的硬件集成优势,成为众多工程项目的核心开发工具。然而,商业软件的开发远不止编写代码和实现功能那么简单,尤其是在仪器自动测试领域&…