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

发布时间:2026/11/15 9:20:49

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/11/13 19:52:47

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/11/14 0:47:25

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/11/15 22:54:07

电工证电子档怎么查保姆级教程:外省证书怎么转过来不犯愁

电工证电子档怎么查保姆级教程:外省证书怎么转过来不犯愁 之前考的证在外省能不能转过来?这几乎是每个电工从业者在换工作、换城市时都会遇到的问题。如果你手里拿着的电工证是外省考的,但又想在本地执业, 电工证电子档怎么查…

2026/11/15 22:54:07

永康电工证复审地点怎么找?官方报名入口全攻略

永康电工证复审地点怎么找?官方报名入口全攻略 怕考不过白交培训费?别急,先搞清楚哪里能复审,再谈怎么报名! 你是不是也在网上翻了十几页资料,还是不清楚永康电工证复审地点在哪?是不是看到一堆“官方报名入口”就一头雾水?别急,今天咱们就来聊聊怎…

2026/11/15 22:54:07

郴州电工证培训怎么选?2026河南最新政策你必须知道

郴州电工证培训怎么选?2026河南最新政策你必须知道 你是不是也遇到过这样的情况:手里有电工证,但不知道该去哪报名?怕被中介忽悠,怕花冤枉钱,更怕拿不到证?别急,今天我就从三门峡一家中小施工企业的负责人角度,跟你聊聊郴州电工证培训到底怎么选…

2026/11/15 22:54:07

电工证换证复审上网查怎么考?上岗必备实操怎么过?

电工证换证复审上网查怎么考?上岗必备实操怎么过? 实操考试心里没底怕挂科,这几乎是每个准备考电工证的朋友都有的心理负担。尤其是第一次参加考试的新人,面对各种仪器和操作流程,很容易手忙脚乱。而随着国家对安全生产的重视,电工证作为上岗必备证件,…

2026/11/15 22:54:07

物业维修(电工证)怎么转异地?郑州报考避坑指南全解析

物业维修(电工证)怎么转异地?郑州报考避坑指南全解析 你是不是也遇到过这种情况?拿着物业维修(电工证),想找个工作或者换个地方干,结果发现证书不能异地使用,也不知道怎么办?更头疼的是,网上一搜“郑州报考避坑指南”,信息五花八门,真假难辨,怕…

2026/11/15 22:49:07

学校年审的电工证怎么转?郑州报考避坑指南全攻略

学校年审的电工证怎么转?郑州报考避坑指南全攻略 之前考的证在外省能不能转过来?这几乎是每个持证人都问过的问题,尤其是像你这种在濮阳劳务班组工作的负责人,经常需要跑项目,跨省流动频繁,证书的“转移”和“年审”成了绕不开的坎。今天就来聊聊…

2026/11/15 0:02:49

电工证考试口诉怎么准备值不值得考

电工证考试口诉怎么准备值不值得考 实操考试心里没底怕挂科,这是大多数准备考电工证的人心里最真实的感受。尤其是面对【电工证考试口诉】环节,很多人不知道该怎么准备,甚至担心自己说不好就被淘汰。其实,只要掌握方法, 值不值得考…

2026/11/15 0:02:49

桑植县考电工证千万别踩坑!报名全流程教你避坑

桑植县考电工证千万别踩坑!报名全流程教你避坑 你是不是也遇到过这种情况:想考个电工证,但不知道从哪儿下手,怕被中介坑,怕花冤枉钱,更怕考了证还不能用?别急,这正是你该看这篇文章的原因。在桑植县考电工证,确实有很多人被坑过,但只要你知道流程、…

2026/11/15 0:02:49

电工证考试口诉怎么准备值不值得考

电工证考试口诉怎么准备值不值得考 实操考试心里没底怕挂科,这是大多数准备考电工证的人心里最真实的感受。尤其是面对【电工证考试口诉】环节,很多人不知道该怎么准备,甚至担心自己说不好就被淘汰。其实,只要掌握方法, 值不值得考…

2026/11/15 0:02:49

桑植县考电工证千万别踩坑!报名全流程教你避坑

桑植县考电工证千万别踩坑!报名全流程教你避坑 你是不是也遇到过这种情况:想考个电工证,但不知道从哪儿下手,怕被中介坑,怕花冤枉钱,更怕考了证还不能用?别急,这正是你该看这篇文章的原因。在桑植县考电工证,确实有很多人被坑过,但只要你知道流程、…

2026/11/15 4:46:37

面向复杂光照与角度的宠物面部识别鲁棒性增强策略

在智慧养宠时代,基于视觉的宠物身份识别技术正逐步从实验室走向家庭应用。然而,与配合度高的人类不同,宠物是典型的“非合作生物识别对象”——它们不会主动配合摄像头调整姿态,更无法控制光照环境。实际应用中,我们常…

2026/11/15 2:06:31

SSM电子书店源码全解析:结构、原理、部署与排错实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

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

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

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