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

相关新闻

Linux文件权限管理:chown命令详解与实战指南

Linux文件权限管理:chown命令详解与实战指南

1. chown命令基础解析:权限管理的核心工具在Linux系统中,文件权限管理是系统安全的基础支柱。作为权限体系的核心命令,chown(change owner)直接掌控着资源归属权。我第一次接触这个命令是在处理Web服务器部署时&#x…

2026/8/6 22:15:34 阅读更多 →
从配置到调试:lsp-java + dap-mode实现Emacs全流程Java开发

从配置到调试:lsp-java + dap-mode实现Emacs全流程Java开发

从配置到调试:lsp-java dap-mode实现Emacs全流程Java开发 【免费下载链接】lsp-java lsp-mode :heart: java 项目地址: https://gitcode.com/gh_mirrors/ls/lsp-java lsp-java是一款专为Emacs设计的Java开发工具,通过整合lsp-mode与dap-mode&…

2026/8/6 22:15:34 阅读更多 →
Chronos-2-Synth vs 传统模型:为什么合成数据训练的时间序列模型更强大?

Chronos-2-Synth vs 传统模型:为什么合成数据训练的时间序列模型更强大?

Chronos-2-Synth vs 传统模型:为什么合成数据训练的时间序列模型更强大? 【免费下载链接】chronos-2-synth 项目地址: https://ai.gitcode.com/hf_mirrors/autogluon/chronos-2-synth 在时间序列预测领域,数据质量和数量往往是模型性…

2026/8/6 22:15:34 阅读更多 →

最新新闻

如何通过BIOS密码、安全启动与BitLocker加密,彻底防御PE启动盘绕过Windows登录

如何通过BIOS密码、安全启动与BitLocker加密,彻底防御PE启动盘绕过Windows登录

1. 项目概述:为什么Windows登录密码能被PE轻易绕过?如果你以为给Windows账户设个复杂密码,电脑里的数据就安全了,那可能有点过于乐观了。我见过太多案例,用户电脑丢了或者被别有用心的人拿到,对方根本不需要…

2026/8/7 4:18:28 阅读更多 →
嵌入式Linux内核集成RTL8309M交换芯片VLAN驱动实战

嵌入式Linux内核集成RTL8309M交换芯片VLAN驱动实战

1. 项目概述:从一颗芯片到网络隔离最近在折腾一个嵌入式网络项目,手头正好有一块基于RTL8309M这颗九口交换芯片的开发板。客户的需求很明确,需要在同一个物理网络上跑多个业务,比如视频监控、设备管理和办公数据,要求它…

2026/8/7 4:18:28 阅读更多 →
基于Claude Code构建动态多Agent工作流:从单助手到AI团队协作开发

基于Claude Code构建动态多Agent工作流:从单助手到AI团队协作开发

1. 从单兵作战到团队协作:为什么我们需要动态工作流? 如果你和我一样,是个重度依赖AI编程助手的开发者,那你肯定经历过这样的场景:你向Claude或者Codex提一个稍微复杂点的需求,比如“帮我写一个用户注册的A…

2026/8/7 4:18:28 阅读更多 →
CUDA 12.4与cuDNN 9.1免下载网络安装指南:高效部署深度学习环境

CUDA 12.4与cuDNN 9.1免下载网络安装指南:高效部署深度学习环境

1. 项目概述:为什么选择“免下载”的CUDA安装方式?最近在给新到的几台工作站部署深度学习环境,又一次遇到了CUDA和cuDNN的安装问题。说实话,每次看到官方动辄几个G的离线安装包,再想想那缓慢的下载速度和繁琐的本地文件…

2026/8/7 4:18:28 阅读更多 →
Windows快捷命令:从Win+R到效率工作流的终极指南

Windows快捷命令:从Win+R到效率工作流的终极指南

1. 从“开始菜单”到“运行框”:一个被低估的效率入口如果你还在用鼠标点开层层文件夹来启动程序,或者每天重复输入一长串路径来访问某个网络共享,那你的Windows使用效率至少还有50%的提升空间。我说的不是那些复杂的脚本或第三方工具&#x…

2026/8/7 4:18:28 阅读更多 →
OpenClaw智能体持久化记忆:从本地存储到向量数据库混合架构实战

OpenClaw智能体持久化记忆:从本地存储到向量数据库混合架构实战

1. 项目概述:从“失忆”到“长记性”的AI智能体进化最近在折腾本地AI智能体,特别是OpenClaw,很多朋友都遇到了一个共同的痛点:这玩意儿怎么跟金鱼似的,聊完就忘?今天跟你聊了电商客服的退货政策&#xff0c…

2026/8/7 4:17:27 阅读更多 →

日新闻

为什么scrcpy成为Android投屏的终极解决方案:完整实战指南

为什么scrcpy成为Android投屏的终极解决方案:完整实战指南

为什么scrcpy成为Android投屏的终极解决方案:完整实战指南 【免费下载链接】scrcpy Display and control your Android device 项目地址: https://gitcode.com/GitHub_Trending/sc/scrcpy 想要将Android手机屏幕完美投射到电脑上,享受大屏操作的自…

2026/8/7 0:00:19 阅读更多 →
如何在5分钟内掌握Tom Select:打造现代化表单选择器的终极指南

如何在5分钟内掌握Tom Select:打造现代化表单选择器的终极指南

如何在5分钟内掌握Tom Select:打造现代化表单选择器的终极指南 【免费下载链接】tom-select Tom Select is a lightweight (~16kb gzipped) hybrid of a textbox and select box. Forked from selectize.js to provide a framework agnostic autocomplete widget wi…

2026/8/7 0:00:19 阅读更多 →
5分钟快速上手:NSZ压缩工具终极指南,轻松管理Switch游戏文件

5分钟快速上手:NSZ压缩工具终极指南,轻松管理Switch游戏文件

5分钟快速上手:NSZ压缩工具终极指南,轻松管理Switch游戏文件 【免费下载链接】nsz NSZ - Homebrew compatible NSP/XCI compressor/decompressor 项目地址: https://gitcode.com/gh_mirrors/ns/nsz 你是否在为Nintendo Switch游戏文件占用大量存储…

2026/8/7 0:00:19 阅读更多 →

周新闻

最大流算法详解:从水管网络到Ford-Fulkerson与Dinic实战

最大流算法详解:从水管网络到Ford-Fulkerson与Dinic实战

1. 从水管网络到最大流:一个核心问题的诞生想象一下,你是一个城市供水系统的总工程师。你的城市有多个水源(水库),需要通过一个复杂的地下管道网络,将水输送到各个居民区。每条管道都有其最大通水能力&…

2026/8/6 22:02:27 阅读更多 →
基于Springboot的企业门户网站(源码+LW+调试文档+讲解)

基于Springboot的企业门户网站(源码+LW+调试文档+讲解)

温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台…

2026/8/6 22:02:27 阅读更多 →
MATLAB xcorr函数详解:从互相关原理到四大实战应用

MATLAB xcorr函数详解:从互相关原理到四大实战应用

1. 从一次信号“找茬”说起:为什么我们需要互相关几年前,我在处理一组声学传感器数据时遇到了一个棘手的问题。我有两个麦克风记录了一段相同的音频信号,理论上它们接收到的声音波形应该非常相似,只是由于麦克风位置不同&#xff…

2026/8/6 22:02:27 阅读更多 →

月新闻

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 还在为百度网盘macOS版的龟速下…

2026/8/5 23:28:39 阅读更多 →
终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 还在为网易云音乐下载的NCM格式文件无法在其他播放器播放而烦恼吗?ncmdump解密工具帮你轻松解决这个困…

2026/8/6 22:02:28 阅读更多 →
HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

AgentCard 智能体卡片:为英语学习 App 打造桌面级学习助手适用平台:HarmonyOS 7.0 (API 26 Beta)一、引言 HarmonyOS 7.0(API 26 Beta)新增了 AgentCard 智能体卡片能力,这是继 HMAF(鸿蒙智能体框架&#x…

2026/8/5 23:46:51 阅读更多 →