鸿蒙音视频播放器:libwlmedia

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/966880.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

基于 Spring Cloud + Spring AI + VUE 的知识助理平台介绍以及问题

前言(一些废话) 在看这篇文章的各位大佬,感谢你们留出几分钟时间,来看这个产品介绍,其实重点说实话,不是这个产品怎么样。而是在最后有一个郁结在心里的几个问题,希望大佬们能给出一些建议。万…

IDEA安装离线插件(目前提供了MavenHelper安装包)

目录 1、离线安装方式2、Maven Helper 1、离线安装方式 首先访问 IDEA插件网站 下载离线插件安装包,操作如下: 然后打开IDEA的Settings配置,点击Plugins,点击右侧设置按钮(齿轮),选择Install P…

JVM的性能优化

1.方法内联 方法内联,是指 JVM在运行时将调用次数达到一定阈值的方法调用替换为方法体本身 ,从而消除调用成本,并为接下来进一步的代码性能优化提供基础,是JVM的一个重要优化手段之一。 注: C++的inline属于编译后内联,但是java是运行时内联 简单通俗的讲就是把方法内部调…

蓝桥杯小白打卡第四天

1221. 四平方和 问题描述 四平方和定理,又称为拉格朗日定理:每个正整数都可以表示为至多 4 个正整数的平方和。如果把 0 包括进去,就正好可以表示为 4 个数的平方和。 例如: (5 0^2 0^2 1^2 2^2)(7 1^2 1^2 1^2 2^2) …

【kafka系列】Topic 与 Partition

Kafka 的 Topic(主题) 和 Partition(分区) 是数据组织的核心概念,它们的映射关系及在 Broker 上的分布直接影响 Kafka 的性能、扩展性和容错能力。以下是详细解析: 一、Topic 与 Partition 的映射关系 Top…

哈佛大学“零点项目”(Project Zero)简介

哈佛大学“零点项目”(Project Zero)简介 起源与背景 “零点项目”(Project Zero)由美国哲学家纳尔逊古德曼(Nelson Goodman)于1967年在哈佛大学教育研究院创立。名称源于“从零开始研究艺术教育”的理念&…

【Java基础】为什么不支持多重继承?方法重载和方法重写之间区别、Exception 和 Error 区别?

Hi~!这里是奋斗的明志,很荣幸您能阅读我的文章,诚请评论指点,欢迎欢迎 ~~ 🌱🌱个人主页:奋斗的明志 🌱🌱所属专栏:Java基础面经 📚本系列文章为个…

rebase和merge

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

科研工作中如何高效利用LabVIEW

LabVIEW作为图形化编程语言,在科研领域广泛应用于数据采集、自动控制、信号处理等任务。如何充分发挥其优势,提高实验效率和数据可靠性,是科研工作者需要重点关注的问题。本文从软件架构、硬件选型、数据处理、调试优化等方面详细探讨LabVIEW…

MybatisPlus整合druid多数据源

1.引入依赖&#xff1a; <dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId><version>3.2.0</version> </dependency><dependency><groupId>com.baomidou</gro…

实验6 客户端和服务器之间IPsec VPN配置

实验6 客户端和服务器之间IPsec VPN配置 1.实验目的 通过在两台计算机间或客户端与服务器之间配置IPsec VPN连接&#xff0c;掌握IPsec VPN配置方法&#xff0c;加深对IPsec协议的理解。 2.实验内容 &#xff08;1&#xff09;在Windows Server系统中配置VPN服务器。 &#xf…

VirtualBox中Ubuntu 22.04网卡配置以及解决过程中遇到的问题

1.添加网卡(仅主机) 2.启动虚拟机&#xff0c;查看新添加网卡信息 #查看网卡 ip addr # 查看网络信息&#xff0c;发现新网卡(enp0s8)未分配 ifconfig -a3.使用netplan进行网络配置 3.1 配置 DHCP获取IP # 进入netplan 文件夹 cd /etc/netplan #查看文件夹下yaml ls -al # 编…

上拉触底案例

1.什么是上拉触底 2. 修改上拉触底距离的默认值 3.上拉触底案例 上拉触底时获取随机颜色 4.添加loading效果 展示loading效果 隐藏loading效果 5.节流处理 进行节流处理&#xff0c;防止多次触底的时候&#xff0c;一次请求多页数据&#xff0c;正在请求下一页数据的时…

AES200物理机部署DeepSeek-R1蒸馏模型

AES200物理机部署DeepSeek-R1模型 华为官方官宣自己的NPU支持DeepSeek-R1模型部署&#xff0c;华为的大模型推理部署依托于其大模型推理引擎&#xff1a;MindIE&#xff0c;但是根据MindIE的文档&#xff0c;其只支持以下硬件&#xff1a; 表1 MindIE支持的硬件列表 类型配置…

2025年软件测试五大趋势:AI、API安全、云测试等前沿实践

随着软件开发的不断进步&#xff0c;测试方法也在演变。企业需要紧跟新兴趋势&#xff0c;以提升软件质量、提高测试效率&#xff0c;并确保安全性&#xff0c;在竞争激烈的技术环境中保持领先地位。本文将深入探讨2025年最值得关注的五大软件测试趋势。 Parasoft下载https://…

w200基于spring boot的个人博客系统的设计与实现

&#x1f64a;作者简介&#xff1a;多年一线开发工作经验&#xff0c;原创团队&#xff0c;分享技术代码帮助学生学习&#xff0c;独立完成自己的网站项目。 代码可以查看文章末尾⬇️联系方式获取&#xff0c;记得注明来意哦~&#x1f339;赠送计算机毕业设计600个选题excel文…

【B站保姆级视频教程:Jetson配置YOLOv11环境(十)镜像备份】

Jetson配置YOLOv11环境&#xff08;10&#xff09;镜像备份 B站视频的镜像已打包上传至百度网盘&#xff0c;镜像的硬盘空间使用量如下&#xff0c;感兴趣的小伙伴可自行下载烧录&#xff0c;需使用64g及以上的tf卡&#xff1a; (pytorch) nxnx-desktop:~$ df -h Filesystem …

了解大语言模型的基本原理(一)——Transformer工作原理

为什么选择Transformer&#xff1f; RNN&#xff1a;无法并行计算&#xff0c;不擅长处理长序列 LSTM&#xff1a;依然存在这两个问题 Transformer&#xff1a;可以并行计算&#xff0c;并且能学习输入序列里所有词的相关性和上下文关系 Tranformer优点&#xff1a; 1、注…

【Matlab优化算法-第13期】基于多目标优化算法的水库流量调度

一、前言 水库流量优化是水资源管理中的一个重要环节&#xff0c;通过合理调度水库流量&#xff0c;可以有效平衡防洪、发电和水资源利用等多方面的需求。本文将介绍一个水库流量优化模型&#xff0c;包括其约束条件、目标函数以及应用场景。 二、模型概述 水库流量优化模型…

JAVA:CloseableHttpClient 进行 HTTP 请求的技术指南

1、简述 CloseableHttpClient 是 Apache HttpComponents 提供的一个强大 HTTP 客户端库。它允许 Java 程序与 HTTP/HTTPS 服务交互&#xff0c;可以发送 GET、POST 等各种请求类型&#xff0c;并处理响应。该库广泛用于 REST API 调用、文件上传和下载等场景。 2、特性 Close…