Harmony播放器SDK集成¶
本文档主要介绍如何在鸿蒙系统(HarmonyOS Next)集成芒果自研播放器SDK,包含本播放sdk集成综述、开发环境搭建、播放器SDK能力介绍、集成指南、API参考、Demo实例、[FAQ]等章节。为开发者提供一站式的音视频播放app开发指导。
本播放sdk集成综述¶
提示
在当前播放sdk的接入之前,建议开发者先了解音视频播放相关概念及知识,希望开发者对harmony next系统有一定认知,对ArkTs语言及DevEco Studio中工程架构有一定研发能力。
在开发音乐、视频播放功能之前,建议了解流媒体播放的相关概念包括但不限于:
- 播放过程:网络协议 > 容器格式 > 音视频编解码及系统支持情况
- 网络协议:比如HLS、HTTP/HTTPS
- 容器格式:比如mp4,mkv,mpeg-ts,webm,m3u8
- 编码格式:比如h264/h265
- 图形/音频渲染方案:系统渲染/openGL/vulkan
在开发harmony os app之前,建议了解华为harmony os的相关概念包括但不限于:
- harmony os:基于AOSP的市面上已发布的harmony 2.0/3.0系统,基于js内核的harmony4.0/4.1系统
- arkTs:javascript > typescript > arkTs
- artUI:基于arkTs的ui系统
- harmony os app project工程架构:sdk的引用模式 > har/hsp
开发环境搭建¶
1、HarmonyOS Next开发者资质获取¶
需要自行在华为开发者官网注册华为开发者账号,并提供给华为工作人员开通HarmonyOS Next开发权限。
2、下载IDE+SDK¶
需要在开发者货架下载对应开发环境IDE+SDK的zip包。
3、环境变量配置¶
提示
鸿蒙开发环境需要nodejs环境,调试logcat输出需要hdc环境,需要配置以下环境变量,以macOS为例,在.bash_profile或者.zshrc文件中添加以下命令:
#deveco
export PATH=$PATH:/Users/lusiyuan/Library/Huawei/sdk/openharmony/10/toolchains
export CLASSPATH
HDC_SERVER_PORT=7035
export HDC_SERVER_PORT
export NODE_PATH=/Users/lusiyuan/nodejs
export PATH=$NODE_PATH/bin:${PATH}
#deveco
4、真机调试¶
提示
HarmonyOS Next当前未面向用户发布,且DevEco Studio中模拟器也暂不可使用,只能使用华为方提供的开发板(烧录HarmonyOS Next系统的设备)进行真机调试,且真机os与IDE\SDK版本需一一对应。当前自研播放器sdk对应的环境版本:
IDE version: DevEco Studio 4.0 Release Build Version: 4.0.3.700, built on November 19, 2023
真机OS version: 4.0.600
播放器SDK能力介绍¶
已支持 | 开发/完善中 | 未规划 | |
---|---|---|---|
播放内核 | 鸿蒙系统播放器、芒果自研播放器 | / | / |
文件格式 | m3u8、mp4、mp3 | / | / |
编码格式 | h264、h265 | / | / |
网络协议 | http/https/hls | / | / |
解码方式 | 软解码 | 硬解码 | / |
视频渲染类型 | surface | component | / |
本地播放 | raw资源、本地file media资源 | / | / |
播放质量上报 | ppv/pvv/pend/perr | / | / |
流量上报 | 自研播放器已实现 | / | / |
播放远程开关 | 解码方式、渲染类型、播放内核 | / | / |
集成指南¶
Step1. 需要引用播放器sdk的module的 oh-package.json5 文件中配置
"dependencies": {
"player-core": "file:libs/playercore.har" // player-core 为项目别名,可自定义
}
"requestPermissions": [
{
"name": "ohos.permission.INTERNET" // 网络播放权限,一般必须添加
},
{
"name": "ohos.permission.GET_WIFI_INFO"// 获取网络状态权限,一般必须添加
},
{
"name": 'ohos.permission.READ_MEDIA'// 读本地媒资权限,有本地播放业务则必须添加
},
{
"name": 'ohos.permission.WRITE_MEDIA'// 写本地媒资权限,有缓存到本地并且从本地播放的业务则必须添加
},
{
"name": 'ohos.permission.GET_BUNDLE_INFO'// 查询指定应用信息,一般必须添加
}
]
Step3.冷启动进程(一般为应用启动EntryAbility.ets)中初始化播放器sdk
MgPlayerSdkStarter.get(getContext(this)).init(channel?: string, did?: string);
Step4.加载芒果播放器控件到ets页面
@Builder
InitVodComponent() {
// 构造播放器控件,传起播设置及参数
MgtvComponent({
videoUrl: url, // 网络播放链接
fileDescriptor: this.fileDescriptor, // 本地播放file
playSpeed: PlaySpeed.SPEED_FORWARD_1_00_X,
isLoop: playconfig?.isLoop,
isMute: false,
isAudio: playconfig?.isAudio,
// isUseP2p: true, // todo??
isAutoPlay: playconfig?.isAutoPlay,// 是否自动播放
currentVideoScaleType: playconfig?.scaletype,// 播放画幅比例
videoPlayerController: this.playerController,// 播放controller
businessType: playconfig?.useSystemPlayer ? BusinessType.BUSINESS_TYPE_SIMPLE : BusinessType.BUSINESS_TYPE_VOD,
callback: (event: string, mgplayer: MgVideoPlayer) => { // 所有回调事件
if (event != PlayEvent.TIME_UPDATE && event != PlayEvent.CACHED_DURATION && event != PlayEvent.BUFFER_PERCENT) {
Logger.info('************lusiyuan************', 'get event from module : ' + event);
}
switch (event) {
case PlayEvent.TIME_UPDATE: // 自研播放器没有这个事件
// this.currentTime = mgplayer.currentTime;
break;
case PlayEvent.STATE_IDLE:
break;
case PlayEvent.STATE_INIT:
this.setReportParams() // 模拟设置上报
break
case PlayEvent.STATE_PREPARED:
this.durationTime = mgplayer.duration;
break
case PlayEvent.STATE_PLAYING:
this.doTimeTickTask(false)
break
case PlayEvent.STATE_PUASED:
this.doTimeTickTask(true)
break
case PlayEvent.STATE_COMPLETED:
this.doTimeTickTask(true)
break
case PlayEvent.START_RENDER_FRAME:
this.doTimeTickTask(false)
break
case PlayEvent.AUDIO_INTERRUPT:
break
case PlayEvent.VIDEOSIZE_CHANGE:
this.per = mgplayer.width / mgplayer.height;
this.setVideoWH();
break
case PlayEvent.STATE_ERROR:
this.doTimeTickTask(true)
break
case PlayEvent.BUFFER_START:
break
case PlayEvent.BUFFER_END:
break
}
}
})
}
build() {
Stack() {
Column() {
this.InitVodComponent()
}
}
}
API参考¶
DEMO下载链接¶
demo工程仓库:ssh://git@git.btd.com:443/mgtv/mgtvplayer2.0_ohosdemo.git
提示
请联系芒果播放技术部开发获取自研播放器sdk demo仓库访问权限,获取最新播放器sdk及demo工程