鸿蒙Next如何获取网络视频的宽高信息

在鸿蒙Next开发中,如何获取网络视频的宽高信息?我尝试通过MediaPlayer获取但只能得到本地视频的尺寸,对于网络视频流该如何正确获取其分辨率?是否需要先下载完整视频才能读取元数据?求具体实现方法或示例代码。

2 回复

鸿蒙Next获取网络视频宽高?简单!用AVMetadataHelper,先setSource设置视频URL,再resolveMetadata获取元数据,最后用AVMetadataKey.VIDEO_WIDTH/HEIGHT拿宽高。注意:网络视频要先下载部分数据才能解析,建议异步处理,别卡主线程!代码写起来比追剧还丝滑~

更多关于鸿蒙Next如何获取网络视频的宽高信息的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


在鸿蒙Next中,获取网络视频的宽高信息可以通过MediaPlayerAVMetadata实现。以下是具体步骤和示例代码:

实现步骤

  1. 创建MediaPlayer实例:初始化播放器并设置数据源。
  2. 监听元数据就绪:通过onMetadataUpdate回调获取视频元数据。
  3. 解析宽高信息:从元数据中提取KEY_VIDEO_WIDTHKEY_VIDEO_HEIGHT

示例代码

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

// 创建MediaPlayer实例
let mediaPlayer: media.MediaPlayer = media.createMediaPlayer();

// 设置网络视频URL
let url = 'https://example.com/sample.mp4'; // 替换为实际视频地址
mediaPlayer.reset();
mediaPlayer.setSource(url);

// 监听元数据更新
mediaPlayer.on('metadataUpdate', (info: media.AVMetadata) => {
  // 获取视频宽度和高度
  let width = info.get(media.AVMetadataKey.KEY_VIDEO_WIDTH);
  let height = info.get(media.AVMetadataKey.KEY_VIDEO_HEIGHT);
  
  console.log(`视频宽度: ${width}, 视频高度: ${height}`);
});

// 准备播放器(触发元数据解析)
mediaPlayer.prepare((err: BusinessError) => {
  if (err) {
    console.error(`准备失败: ${err.code}, ${err.message}`);
  } else {
    console.log('准备成功,元数据已就绪');
  }
});

// 使用后释放资源
// mediaPlayer.release();

注意事项

  1. 网络权限:确保在module.json5中声明ohos.permission.INTERNET权限。
  2. 异步处理:宽高信息在元数据回调中获取,需异步处理。
  3. 错误处理:检查prepare结果,避免因网络或格式问题失败。

通过以上方法,可在不加载完整视频的情况下快速获取网络视频的尺寸信息。

回到顶部