HarmonyOS 应用开发《掌上英语》第99篇:使用AVPlayer设置播放URL(ArkTS)

发布时间:2026/9/23 2:36:47

HarmonyOS 应用开发《掌上英语》第99篇:使用AVPlayer设置播放URL(ArkTS) 使用AVPlayer设置播放URL(ArkTS)本开发指导将介绍如何使用AVPlayer开发播放功能在不同的场景下如何设置URL。当前指导仅介绍播放URL设置方法其他场景及完整示例代码请参考视频播放。当前开发指导将提供以下设置播放URL的方法流媒体播放场景下设置URL本地Raw文件播放场景下设置URL流媒体播放场景下设置URL情况一播放HTTP/HTTPS媒体资源import{media}fromkit.MediaKit;// 类成员定义avPlayer。privateavPlayer:media.AVPlayer|nullnull;// 在业务函数中示例工程函数名为avSetupURL// 创建avPlayer实例对象。this.avPlayerawaitmedia.createAVPlayer();// 设置对应的播放url。leturlhttps://xxx.xxx.xxx.mp4;if(this.avPlayernull){return;}this.avPlayer.urlurl;情况二HLS媒体资源播放点播/直播import{media}fromkit.MediaKit;// 类成员定义avPlayer。privateavPlayer:media.AVPlayer|nullnull;// 在业务函数中示例工程函数名为avSetupURL// 创建avPlayer实例对象。this.avPlayerawaitmedia.createAVPlayer();// 设置对应的播放url。leturlhttps://xxx.xxx.xxx.xxx:xx/xx/index.m3u8;if(this.avPlayernull){return;}this.avPlayer.urlurl;情况三设置HTTP请求头信息播放当服务器需要校验HTTP请求头信息时可通过createMediaSourceWithUrl设置HTTP请求头信息。import{media}fromkit.MediaKit;// 类成员定义avPlayer。privateavPlayer:media.AVPlayer|nullnull;// 在业务函数中示例工程函数名为avSetupURL// 创建avPlayer实例对象。this.avPlayerawaitmedia.createAVPlayer();// 设置对应的播放url。leturlhttps://xxx.xxx.xxx.xxx:xx/xx/index.m3u8;// 创建mediaSource实例对象设置媒体来源定制HTTP请求如需要可以键值对的形式设置User-Agent、Cookie、Referer等字段。letmediaSource:media.MediaSourcemedia.createMediaSourceWithUrl(url,{User-Agent:User-Agent-Value,Cookie:Cookie-Value,Referer:Referer-Value});// 设置播放策略设置缓冲区数据量为3s。letplaybackStrategy:media.PlaybackStrategy{preferredWidth:1,preferredHeight:2,preferredBufferDuration:3,preferredHdr:false};// 为avPlayer设置媒体来源和播放策略。this.avPlayer.setMediaSource(mediaSource,playbackStrategy);情况四通过本地Raw文件中的m3u8文件播放在线流媒体资源当应用需要通过解析本地Raw文件中的m3u8文件播放在线流媒体资源时可以通过resourceManager.getRawFd获取文件描述符将其拼接成fdUrl并通过setMimeType设置MIME类型为APPLICATION_M3U8。import{media}fromkit.MediaKit;import{common}fromkit.AbilityKit;// 类成员定义avPlayer和context。privateavPlayer:media.AVPlayer|nullnull;privatecontext:common.UIAbilityContext|undefinedundefined;// 在业务函数中示例工程函数名为avSetupURL// 创建avPlayer实例对象。this.avPlayerawaitmedia.createAVPlayer();this.contextthis.getUIContext().getHostContext()ascommon.UIAbilityContext;// 通过本地m3u8文件名获取文件描述符。letfileDescriptorawaitthis.context.resourceManager.getRawFd(xxx.m3u8);// 用文件描述符构造本地m3u8的URL。letfdUrl:stringfd://fileDescriptor.fd?offsetfileDescriptor.offsetsizefileDescriptor.length;// 按需设置HTTP请求头。letheaders:Recordstring,string{User-Agent:User-Agent-Value,Cookie:Cookie-Value};// 通过本地m3u8的URL和HTTP请求头构造mediaSource媒体来源。letmediaSource:media.MediaSourcemedia.createMediaSourceWithUrl(fdUrl,headers);// 设置媒体MIME类型为APPLICATION_M3U8。letmimeType:media.AVMimeTypesmedia.AVMimeTypes.APPLICATION_M3U8;mediaSource?.setMimeType(mimeType);// 设置播放策略设置缓冲区数据量为20s。letplaybackStrategy:media.PlaybackStrategy{preferredBufferDuration:20};// 为avPlayer设置媒体来源和播放策略。this.avPlayer.setMediaSource(mediaSource,playbackStrategy);情况五通过应用沙箱中的m3u8文件播放在线流媒体资源当应用需要通过解析应用沙箱中的m3u8文件播放在线流媒体资源时可以通过fileIo.openSync获取文件句柄将其拼接成fdUrl并通过setMimeType设置MIME类型为APPLICATION_M3U8。import{media}fromkit.MediaKit;import{fileIo}fromkit.CoreFileKit;import{common}fromkit.AbilityKit;// 类成员定义avPlayer和context。privateavPlayer:media.AVPlayer|nullnull;privatecontext:common.UIAbilityContext|undefinedundefined;privatem3u8FileName:string;// 在业务函数中示例工程函数名为avSetupURL// 创建avPlayer实例对象。this.avPlayerawaitmedia.createAVPlayer();this.contextthis.getUIContext().getHostContext()ascommon.UIAbilityContext;// 通过UIAbilityContext获取沙箱地址filesDir以Stage模型为例。letm3u8FileName;letfilePath${this.context.filesDir}/${m3u8FileName};// 通过fileIo.openSync获取文件句柄。letfilefileIo.openSync(filePath,fileIo.OpenMode.READ_ONLY);letfd:stringfile.fd.toString();// 用文件句柄构造本地m3u8的URL。letfdUrl:stringfd://fd?offset0size0;// 按需设置HTTP请求头。letheaders:Recordstring,string{User-Agent:User-Agent-Value,Cookie:Cookie-Value};// 通过本地m3u8的URL和HTTP请求头构造mediaSource媒体来源。letmediaSource:media.MediaSourcemedia.createMediaSourceWithUrl(fdUrl,headers);// 设置媒体MIME类型为APPLICATION_M3U8。letmimeType:media.AVMimeTypesmedia.AVMimeTypes.APPLICATION_M3U8;mediaSource?.setMimeType(mimeType);// 设置播放策略设置缓冲区数据量为20s。letplaybackStrategy:media.PlaybackStrategy{preferredBufferDuration:20};// 为avPlayer设置媒体来源和播放策略。this.avPlayer.setMediaSource(mediaSource,playbackStrategy);本地raw文件播放场景下设置URL情况一应用沙箱文件播放import{media}fromkit.MediaKit;import{fileIo}fromkit.CoreFileKit;import{common}fromkit.AbilityKit;// 类成员定义avPlayercontext和fileName。privateavPlayer:media.AVPlayer|nullnull;privatecontext:common.UIAbilityContext|undefinedundefined;privatefileName:string;// 在业务函数中示例工程函数名为avSetupURL// 创建avPlayer实例对象。this.avPlayerawaitmedia.createAVPlayer();this.contextthis.getUIContext().getHostContext()ascommon.UIAbilityContext;letfdPathfd://;letfileNametest.mp4;// test.mp4为应用文件目录下的预置资源需要开发者根据实际情况进行替换。// 通过UIAbilityContext获取沙箱地址filesDir以Stage模型为例。letpath${this.context?.filesDir}/${this.fileName};// 打开相应的资源文件地址获取fd并为url赋值触发initialized状态机上报。letfileawaitfileIo.open(path);fdPathfdPathfile.fd;this.avPlayer.urlfdPath;情况二本地文件播放说明当使用AVPlayer播放本地资源时AVPlayer会独占此fd。import{media}fromkit.MediaKit;import{common}fromkit.AbilityKit;// 类成员定义avPlayercontext和fileName。privateavPlayer:media.AVPlayer|nullnull;privatefileName:string;privatecontext:common.UIAbilityContext|undefinedundefined;// 在业务函数中示例工程函数名为avSetupURL// 创建avPlayer实例对象。this.avPlayerawaitmedia.createAVPlayer();this.contextthis.getUIContext().getHostContext()ascommon.UIAbilityContext;// 通过UIAbilityContext的resourceManager成员的getRawFd接口获取媒体资源播放地址。// 返回类型为{fd,offset,length},fd为HAP包fd地址offset为媒体资源偏移量length为播放长度。letfileNametest.mp4;// test.mp4为应用文件目录下的预置资源需要开发者根据实际情况进行替换。letfileDescriptorawaitthis.context?.resourceManager.getRawFd(this.fileName);letavFileDescriptor:media.AVFileDescriptor{fd:fileDescriptor.fd,offset:fileDescriptor.offset,length:fileDescriptor.length};// 为fdSrc赋值触发initialized状态机上报。this.avPlayer.fdSrcavFileDescriptor;运行完整示例新建工程下载示例工程也可直接运行并将示例工程的以下资源复制到对应目录。AVPlayerArkTSURL entry/src/main/ets/ └── pages └── Index.ets (播放界面) entry/src/main/resources/ ├── base │ ├── element │ │ ├── color.json │ │ ├── float.json │ │ └── string.json │ └── media │ ├── ic_video_play.svg (播放键图片资源) │ └── ic_video_pause.svg (暂停键图片资源) └── rawfile ├── test.m3u8 (m3u8资源) └── test_01.mp3 音频资源在/entry/src/main/module.json5中申请使用网络的权限或直接替换为示例工程的module.json5。requestPermissions:[{name:ohos.permission.INTERNET},{name:ohos.permission.GET_WIFI_INFO}]通过注释、解注释/entry/src/main/ets/pages/Index.ets中的上文示例的各种情况编译并运行。在安装应用后可将示例工程的/entry/src/main/resources/rawfile/test.m3u8通过以下命令加入应用沙箱从而运行应用沙箱相关示例:FILESDIR为物理路径以示例工程为例可通过console.info打印this.context.filesDir得到应用沙箱路径再根据应用沙箱指南的应用沙箱路径和真实物理路径的对应关系表找到物理路径。hdc file send [目录]\test.m3u8 FILESDIR hdc file send [目录]\test_01.mp3 FILESDIR
延伸阅读

更多相关文章

2026/9/22 16:55:06

Punctuator2训练全攻略:从数据准备到模型优化的完整步骤

Punctuator2训练全攻略:从数据准备到模型优化的完整步骤 【免费下载链接】punctuator2 A bidirectional recurrent neural network model with attention mechanism for restoring missing punctuation in unsegmented text 项目地址: https://gitcode.com/gh_mir…

2026/9/21 2:27:11

agnai预设系统全攻略:定制专属AI对话风格的实用指南

agnai预设系统全攻略:定制专属AI对话风格的实用指南 【免费下载链接】agnai AI Agnostic (Multi-user and Multi-bot) Chat with Fictional Characters. Designed with scale in mind. 项目地址: https://gitcode.com/gh_mirrors/ag/agnai agnai是一款支持多…

2026/9/23 2:32:26

UML序列图实战:从问答系统联调事故到可维护设计文档

简介:这是一份面向软件工程学习者、系统分析与设计人员及 UML 初学者的序列图学习资料,围绕问答系统这一典型场景,系统讲解时序图的核心概念与建模方法。内容涵盖角色、对象、生命线、激活期与消息五大元素,并深入说明对象三种命名…

2026/9/23 2:32:26

2026最新:别样的近义词避坑指南,别让一字之差坑掉你

2026最新:别样的近义词避坑指南,别让一字之差坑掉你 刚把代码复制过来,运行报错?心里是不是咯噔一下,心想“这复制粘贴的还能出岔子?”别急,这种“复制来的代码跑不通不知道怎么调”的情况,在咱们搞开发的圈子里太常见了。很多新手甚至老手,都栽…

2026/9/23 2:32:26

搞定AE如何渲染视频:5个步骤+完整示例

搞定AE如何渲染视频:5个步骤+完整示例 看了一堆教程还是不会写项目?别急,今天直接上 完整示例 ,把AE渲染视频的底层逻辑给你掰碎了讲。很多兄弟卡在最后一步,导出的时候要么黑屏,要么格式不对,根本不知道哪里出了问题。…

2026/9/23 2:27:26

前端模块化开发:从CommonJS到ESM的演进与实践

1. 从"面条式代码"到模块化:前端开发的进化之路十年前我刚入行前端时,接手过一个遗留项目——一个5万行代码的jQuery应用,所有功能都堆在三个巨型JS文件里。每次修改功能都像在拆炸弹,生怕引发连锁反应。这正是模块化要…

2026/9/22 10:02:42

GAMP 5 基于风险的计算机化系统验证:软件分类与审计追踪实践

简介:《A Risk-Based Approach to Compliant GxP Computerized Systems》即业内熟知的GAMP 5指南,面向制药企业质量与IT合规人员、验证工程师及计算机化系统管理者,用于解决GxP法规环境下系统合规性难以科学落地的问题。文档以风险管理为主线…

2026/9/22 9:07:39

安全托管MSSP实战:从静态防御到人机协同的攻防运营与应急响应

简介:这份PPT围绕互联网业务安全托管服务展开,面向企业安全负责人、IT运维人员及关注MSSP/MSS选型的读者,重点回应传统安全过度依赖人工、碎片化静态防御难以对抗产业化攻击等痛点。资源共1个pptx文件,包体约30.63MB,以…

2026/9/23 0:01:54

3个实战技巧搞定形式英语:从看教程到跑通性能优化

3个实战技巧搞定形式英语:从看教程到跑通性能优化 看了一堆教程还是不会写项目?别慌,这种“眼高手低”的困境在开发者圈子里太常见了。很多人以为卡点在语法,其实真正拦路虎是缺乏将知识点串联成完整链路的能力。今天咱们不聊虚的,直接拿【形式英语】这…

2026/9/22 16:34:32

USB Type-C PCB布局分区设计:电源、高速信号与PD协议全攻略

做硬件这行,Type-C接口算是典型的“看着简单,做起来全坑”的东西。光引脚就24个,高低速信号、电源、控制线全部塞在一个小小的连接器里,如果PCB布局不做规划,打样回来基本就是“插上没反应”、“高速掉线”、“静电一打…

2026/9/22 20:01:30

系统编程学习原型如何补齐稳定性边界

系统编程学习原型如何补齐稳定性边界预算有限时&#xff0c;我先优化明显多余的复制&#xff0c;而不是猜测性地换容器。用借用传递只读数据通常就能减少分配&#xff1a; fn parse(line: &str) -> Result<Item, Error> { /* ... */ }用基准确认热点确实在分配&am…

2026/9/22 13:25:41

雨花区哪家财务公司代理记账比较好?

在雨花区&#xff0c;企业处理财税事务常常面临诸多挑战&#xff0c;选择一家靠谱的财务公司至关重要。湖南巨勤财务管理咨询有限公司就是本地正规实体财税服务机构&#xff0c;深耕本地工商财税行业多年&#xff0c;熟悉当地工商局、税务局最新政策与申报流程。主营公司注册、…

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
咨询二维码