HarmonyOS鸿蒙Next中把m3u8的ts切片下载到沙箱目录,如何使用avplay播放起来?

HarmonyOS鸿蒙Next中把m3u8的ts切片下载到沙箱目录,如何使用avplay播放起来?

4 回复

m3u8文件主要用于记录一系列视频片段的网络地址,它是一种文本文件,而不是存储实际的媒体数据,所以使用直接读取媒体文件的方式无法播放。一般通过设置avPlayer.url为网络地址实现播放直播码流。参考流媒体播放场景下设置URL情况二:HLS媒体资源播放(点播/直播)。想要下载到沙箱里面播放必须要是特殊的m3u8,即里面的ts分片的地址都是完整的。具体可参考流媒体播放场景下设置URL情况五:通过应用沙箱中的m3u8文件播放在线流媒体资源。

更多关于HarmonyOS鸿蒙Next中把m3u8的ts切片下载到沙箱目录,如何使用avplay播放起来?的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


1、可以先尝试file://xxx.m3u8能否直接播放。

2、本地服务器方式

试着使用 @cxy/webserver 三方仓库搜

ohpm i [@cxy](/user/cxy)/webserver

在沙箱的m3u8文件目录下开启一个本地服务器

使用 http ://localhost:8080/xxx.m3u8 在线播放。

在HarmonyOS Next中,将下载的TS切片存储至沙箱目录后,可使用avPlay.createAVPlayer()创建播放器实例。通过avPlayer.fdSrc()设置播放源,传入TS文件的文件描述符与偏移量信息。需确保文件路径指向沙箱内有效位置,并正确配置媒体数据源类型。调用avPlayer.prepare()avPlayer.play()即可播放。注意处理播放状态监听与资源释放。

在HarmonyOS Next中,使用avplay播放沙箱目录下的TS切片,核心在于正确构建播放源路径并配置播放器。以下是关键步骤:

  1. 获取沙箱路径:使用context.filesDir获取应用沙箱目录路径,并拼接TS文件的相对路径。
  2. 配置AVPlayer:创建AVPlayer实例,通过AVPlayer.setSource()设置本地文件源(使用file://协议)。
  3. 处理播放列表:若需连续播放多个TS文件,需监听播放完成事件,手动切换下一个文件。

示例代码:

import avSession from '@ohos.multimedia.avsession';
import media from '@ohos.multimedia.media';

// 1. 获取沙箱路径
let tsPath = context.filesDir + '/video.ts'; // 替换为实际TS文件路径

// 2. 创建并配置AVPlayer
let avPlayer = await media.createAVPlayer();
avPlayer.on('stateChange', (state: string) => {
  if (state === 'prepared') {
    avPlayer.play(); // 状态就绪后播放
  }
});

// 3. 设置播放源(本地文件需加file://前缀)
await avPlayer.setSource({ uri: `file://${tsPath}` });

注意事项:

  • 确保TS文件已完整下载至沙箱目录。
  • 若播放列表需无缝切换,需在playbackCompleted事件中动态更新setSource
  • 网络下载的TS文件需注意沙箱存储权限(使用ohos.file.fs API)。
回到顶部