HarmonyOS鸿蒙Next中avplayer只能播放网络和沙箱路径下的音频文件吗?
HarmonyOS鸿蒙Next中avplayer只能播放网络和沙箱路径下的音频文件吗? avplayer只能播放网络和沙箱路径下的音频文件吗?本地的音频文件怎么进行播放?
根据华为官方文档使用AVPlayer播放音频(ArkTS)-播放-媒体开发指导(ArkTS)-Media Kit(媒体服务)-媒体 - 华为HarmonyOS开发者,AVPlayer不止支持网络和沙箱路径的音频文件,还可播放系统媒体库、外部存储(如 SD 卡)等本地路径的音频文件,核心是根据文件存储位置匹配合法数据源格式与对应权限。
- 如果使用本地资源播放,必须确认资源文件可用,并使用应用沙箱路径访问对应资源,参考获取应用文件路径。应用沙箱的介绍及如何向应用沙箱推送文件,请参考文件管理。
- 如果使用网络播放路径,需声明权限:ohos.permission.INTERNET。
- 如果使用ResourceManager.getRawFd打开HAP资源文件描述符,使用方法可参考ResourceManager API参考。
- 需要使用支持的播放格式与协议。
此外,如果需要设置音频渲染信息,则只允许在initialized状态下,第一次调用prepare()之前设置,以便音频渲染器信息在之后生效。若媒体源包含视频,则usage默认值为STREAM_USAGE_MOVIE,否则usage默认值为STREAM_USAGE_MUSIC。rendererFlags默认值为0。为了确保音频行为符合使用预期,建议根据具体业务场景和实际需求,主动配置audio.AudioRendererInfo,为音频选择恰当的流类型usage。
更多关于HarmonyOS鸿蒙Next中avplayer只能播放网络和沙箱路径下的音频文件吗?的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
AVPlayer 可以播放本地音频文件,但需通过文件选择器获取用户授权后,将文件转换为文件描述符(fd)再播放。不支持直接使用设备绝对路径。
如果“本地音频文件”指设备存储中非沙箱路径的文件(如用户通过文件管理器保存的音频),需通过以下步骤播放:
步骤一:获取文件访问权限
- 使用文件选择器(如
AudioViewPicker)让用户选择文件,获取临时 URI。 - 示例代码:
import { picker } from '@kit.CoreFileKit';
import { common } from '@kit.AbilityKit';
const context = getUIContext().getHostContext() as common.UIAbilityContext;
const audioViewPicker = new picker.AudioViewPicker(context);
audioViewPicker.select(new picker.AudioSelectOptions()).then((uris: string[]) => {
let fileUri = uris[0]; // 获取选中文件的 URI
// 后续使用此 URI 播放
});
步骤二:将文件转换为 AVPlayer 可用的格式
-
方法 1:通过文件描述符(fd)播放(推荐)
使用
fs.openSync获取文件描述符,并设置为 AVPlayer 的fdSrc属性:
import { fileIo as fs } from '@kit.CoreFileKit';
import { media } from '@kit.MediaKit';
let avPlayer = await media.createAVPlayer();
let file = fs.openSync(fileUri, fs.OpenMode.READ_ONLY); // 通过 URI 打开文件
let avFileDescriptor: media.AVFileDescriptor = {
fd: file.fd,
offset: 0, // 文件起始位置
length: file.size // 文件大小(需通过 fs.statSync 获取)
};
avPlayer.fdSrc = avFileDescriptor; // 设置 fdSrc
-
方法 2:通过 fd:// 路径播放
将文件描述符拼接为
fd://路径并设置为url:
let fdPath = `fd://${file.fd}?offset=0&size=${file.size}`;
avPlayer.url = fdPath;
步骤三:正常播放流程
- 设置监听事件(如
stateChange、error)。 - 调用
prepare()进入准备状态。 - 调用
play()开始播放。
Avplayer的参数:媒体URL,只允许在idle状态下设置。
支持的视频格式(mp4、mpeg-ts、mkv)。
支持的音频格式(m4a、aac、mp3、ogg、wav、flac、amr)。
支持路径示例:
- fd类型播放:fd://xx。

-
http网络播放: http://xx。
-
https网络播放: https://xx。
-
hls网络播放路径:http://xx或者https://xx。
说明:
-
设置网络播放路径,需声明权限:ohos.permission.INTERNET,相关错误码: 201。
-
从API version 11开始不支持webm。
-
将资源句柄(fd)传递给 AVPlayer 实例之后,请不要通过该资源句柄做其他读写操作,包括但不限于将同一个资源句柄传递给多个 AVPlayer / AVMetadataExtractor / AVImageGenerator / AVTranscoder。同一时间通过同一个资源句柄读写文件时存在竞争关系,将导致媒体播放器数据获取异常。
鸿蒙Next的avplayer支持播放网络音频和沙箱路径文件,同时也能访问应用资源目录(resources/rawfile)中的本地音频文件。通过媒体库管理接口,可读取系统公共目录下的音频。播放时需配置相应权限,网络播放要求网络访问授权,本地文件访问需声明存储权限。
在HarmonyOS Next中,avplayer不仅支持播放网络音频(通过URL)和沙箱路径(应用私有目录)下的文件,还可以访问系统公共媒体库中的本地音频文件。需要使用媒体库管理接口(如@ohos.file.picker)选择文件,或通过权限申请访问公共目录(如Photos、Documents)。获取文件URI后,即可用avplayer加载播放。注意遵循数据安全规范,避免直接硬编码路径。


