鸿蒙Next中如何根据视频地址获取视频长度

在鸿蒙Next开发中,如何通过视频URL获取视频的时长?目前需要实现一个功能,根据用户输入的视频地址(如网络或本地路径)自动解析视频长度,但官方文档未找到明确API。求教具体实现方案或示例代码,是否需要依赖第三方库?

2 回复

鸿蒙Next里想获取视频长度?试试用AVPlayergetDuration()方法,先创建播放器设置视频源,调用方法就能拿到时长。注意:记得处理异步回调,不然可能等到花儿都谢了~

更多关于鸿蒙Next中如何根据视频地址获取视频长度的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


在鸿蒙Next(HarmonyOS NEXT)中,可以通过AVPlayer类来获取视频长度。以下是具体步骤和示例代码:

  1. 创建AVPlayer实例:传入视频地址(支持本地路径或网络URL)。
  2. 监听状态变化:通过stateChange回调,在状态变为initialized后获取视频时长。
  3. 获取时长:使用AVPlayer.duration属性(单位:毫秒)。

示例代码(ArkTS):

import { media } from '@kit.MediaKit';
import { BusinessError } from '@kit.BasicServicesKit';

let avPlayer: media.AVPlayer | null = null;

// 初始化AVPlayer
function initAvPlayer(videoUrl: string) {
  // 1. 创建AVPlayer实例
  avPlayer = media.createAVPlayer();
  
  // 2. 设置监听器
  avPlayer.on('stateChange', (state: media.AVPlayerState) => {
    if (state === media.AVPlayerState.initialized) {
      // 3. 获取视频时长(毫秒)
      const duration = avPlayer!.duration;
      console.log(`视频时长:${duration}ms`);
      // 转换为秒:duration / 1000
    }
  });

  // 设置数据源并准备播放
  avPlayer.url = videoUrl;
  avPlayer.prepare();
}

// 调用示例
initAvPlayer('https://example.com/sample.mp4');

// 使用完毕后释放资源
// avPlayer.release();

注意事项:

  • 需要申请网络权限(网络视频时)或在module.json5中声明ohos.permission.INTERNET
  • 实际开发中建议添加错误处理(如监听error事件)。
  • 时长获取是异步的,需在状态回调中处理。

此方法适用于HarmonyOS NEXT的Stage模型和API 9+版本。

回到顶部