HarmonyOS(鸿蒙) 中,AVMetadataExtractor 是一个非常有用的工具,它允许开发者从视频或音频文件中提取元数据信息。元数据通常包括文件的标题、时长、编码格式、分辨率、比特率、音频采样率等信息。这些元数据对于视频和音频管理、处理以及播放等场景是非常重要的。

✅ 一、AVMetadataExtractor 概述

AVMetadataExtractor 是 HarmonyOS 提供的一个工具类,专门用于从音视频文件中提取和解析元数据。通过这个类,开发者可以轻松获取音视频文件的关键信息,例如:

  • 视频时长
  • 编码格式(如 H.264、AAC 等)
  • 视频分辨率
  • 音频比特率
  • 音频采样率
  • 轨道信息(如视频轨道、音频轨道)

这使得开发者可以根据这些信息进行相应的处理,或者展示给用户。


✅ 二、AVMetadataExtractor 的基本功能

AVMetadataExtractor 主要具备以下几项功能:

  1. 提取音视频文件的基本信息
    • 包括文件时长、码率、分辨率、采样率等。
  2. 提取音视频流的信息
    • 提取视频轨道、音频轨道等详细信息。
  3. 支持多种文件格式
    • 支持主流的视频音频格式,如 .mp4.mkv.avi.mp3.aac 等。
  4. 灵活的数据获取
    • 可以获取单个元数据项,也可以一次性提取所有元数据。

✅ 三、如何使用 AVMetadataExtractor 提取元数据

1. 引入依赖

在使用 AVMetadataExtractor 之前,需要在项目中引入相关的音视频处理依赖。通常情况下,可以在 build.gradle 文件中添加相关的库。

dependencies {
    implementation 'com.huawei.hms:avmedia:5.0.0'
}

2. 创建 AVMetadataExtractor 实例

使用 AVMetadataExtractor 时,首先需要创建它的实例,并提供要分析的音视频文件路径。

import avmedia from '@ohos.avmedia';

// 创建 AVMetadataExtractor 实例
let metadataExtractor = avmedia.createAVMetadataExtractor();

3. 加载音视频文件

通过 AVMetadataExtractor 加载指定的音视频文件。这一步会解析音视频的元数据。

const mediaFilePath = '/path/to/video_or_audio.mp4';  // 音视频文件路径

async function loadMediaFile() {
  try {
    await metadataExtractor.load(mediaFilePath);
    console.log('媒体文件加载成功');
  } catch (error) {
    console.error('加载媒体文件失败:', error);
  }
}

4. 提取元数据信息

一旦加载了文件,可以通过 AVMetadataExtractor 提取文件的各种元数据信息。

async function extractMetadata() {
  try {
    const metadata = await metadataExtractor.getMetadata();
    console.log('元数据提取成功:', metadata);

    // 获取视频时长、编码格式等信息
    const duration = metadata.duration; // 获取视频时长
    const videoFormat = metadata.videoFormat; // 获取视频格式
    const audioFormat = metadata.audioFormat; // 获取音频格式

    // 输出信息
    console.log(`视频时长: ${duration}s`);
    console.log(`视频格式: ${videoFormat}`);
    console.log(`音频格式: ${audioFormat}`);
  } catch (error) {
    console.error('提取元数据失败:', error);
  }
}

5. 获取视频流和音频流的详细信息

AVMetadataExtractor 还可以获取更详细的音视频流信息,包括每个流的编码格式、比特率、分辨率等。

async function extractStreamsInfo() {
  try {
    const metadata = await metadataExtractor.getMetadata();
    
    // 获取视频流信息
    const videoStreams = metadata.videoStreams;
    console.log('视频流信息:', videoStreams);
    
    // 获取音频流信息
    const audioStreams = metadata.audioStreams;
    console.log('音频流信息:', audioStreams);
    
    // 遍历并输出每个流的信息
    videoStreams.forEach((stream, index) => {
      console.log(`视频流 ${index + 1}: 编码格式: ${stream.codec}, 分辨率: ${stream.width}x${stream.height}`);
    });

    audioStreams.forEach((stream, index) => {
      console.log(`音频流 ${index + 1}: 编码格式: ${stream.codec}, 采样率: ${stream.sampleRate}`);
    });
  } catch (error) {
    console.error('提取音视频流信息失败:', error);
  }
}

6. 处理提取失败的情况

提取元数据时,可能会遇到一些常见问题,如文件损坏、格式不支持等。AVMetadataExtractor 提供了相关的错误信息,开发者可以通过错误捕获机制来处理这些问题。

try {
  const metadata = await metadataExtractor.getMetadata();
  console.log('元数据提取成功:', metadata);
} catch (error) {
  if (error.code === 'FILE_NOT_FOUND') {
    console.error('文件未找到');
  } else if (error.code === 'UNSUPPORTED_FORMAT') {
    console.error('不支持的音视频格式');
  } else {
    console.error('提取元数据失败:', error);
  }
}


✅ 四、支持的元数据类型

AVMetadataExtractor 支持以下几类元数据:

  • 基本信息
    • 时长(Duration)
    • 编码格式(Codec)
    • 比特率(Bitrate)
  • 视频流信息
    • 视频分辨率(Resolution)
    • 帧率(Frame Rate)
    • 视频编码格式(Video Codec)
  • 音频流信息
    • 音频采样率(Sample Rate)
    • 音频比特率(Audio Bitrate)
    • 音频编码格式(Audio Codec)
  • 轨道信息
    • 音频轨道数量
    • 视频轨道数量

✅ 五、示例应用场景

  1. 视频播放器
    • 在视频播放器中,提取视频的时长、分辨率、编码格式等信息,以便于用户查看或选择视频播放质量。
  2. 音频播放器
    • 音频播放器可以根据音频的元数据信息(如采样率、比特率)来优化播放体验。
  3. 视频编辑软件
    • 在视频编辑软件中,提取视频的元数据来进行后续的编辑操作,例如根据分辨率或时长进行剪辑或处理。
  4. 媒体管理应用
    • 在文件管理或媒体管理应用中,提取文件的元数据以便进行分类、索引或搜索。

✅ 六、总结

特性描述
功能从音视频文件中提取各种元数据信息,如时长、编码格式、分辨率等。
常见应用视频播放器、音频播放器、视频编辑、媒体管理等。
支持格式支持主流音视频格式,如 .mp4.avi.mp3.aac 等。
错误处理提供详细的错误信息,帮助开发者处理文件损坏、格式不支持等问题。

📌 一句话总结:

AVMetadataExtractor 是 HarmonyOS 中用于从音视频文件中提取元数据信息的工具,它能提供关于文件时长、编码格式、音视频流等详细信息,广泛应用于媒体管理、播放器、视频编辑等场景。