HarmonyOS 鸿蒙Next中如何获取应用沙箱的视频的详细信息

HarmonyOS 鸿蒙Next中如何获取应用沙箱的视频的详细信息

如何获取应用沙箱的视频的详细信息

3 回复

【解决方案】

创建AVMetadataExtractor实例,根据开发情况确认资源有效性并设置资源描述符:

  • fdSrc(文件描述符):可以通过管理全局资源ResourceManager获取文件描述符,也可以通过应用沙箱路径访问对应资源。
  • dataSrc(dataSource描述符):使用应用沙箱路径访问对应资源,需设置callback属性确保资源能被正确调用。

获取沙箱目录中视频文件的相关信息:设置好资源描述符后,调用fetchMetadata()访问对象的各个属性,获取元数据。以获取视频宽高属性为例,参考代码如下:

import image from '@ohos.multimedia.image';
import { fileIo } from '@kit.CoreFileKit';
import fileIO from '@ohos.fileio';
import { media } from '@kit.MediaKit';

let context = getContext(this)
let filesDir = context.filesDir
let filePath = filesDir + "/" + "video.mp4"

@Entry
@Component
struct GetVideoInfoFromSandbox {
  @State message: string = 'Hello World';
  @State pixelMap: image.PixelMap | undefined = undefined;

  build() {
    Column({ space: 10 }) {

      Text("把视频保存到沙箱")
        .fontSize(50)
        .backgroundColor(Color.Blue)
        .fontWeight(FontWeight.Bold)
        .onClick(async () => {
          let value = await context.resourceManager.getRawFileContent('video.mp4')
          console.info(`${value.buffer.byteLength}`)
          let file = fileIo.openSync(filePath, fileIo.OpenMode.READ_WRITE | fileIo.OpenMode.CREATE)
          // 将rawfile目录下的文件写入沙箱路径
          fileIo.writeSync(file.fd, value.buffer)
          fileIo.closeSync(file.fd)
        })

      Text("获取视频文件宽高")
        .fontSize(50)
        .backgroundColor(Color.Green)
        .fontWeight(FontWeight.Bold)
        .onClick(async () => {
          // 创建AVMetadataExtractor实例
          let avMetadataExtractor = await media.createAVMetadataExtractor();

          avMetadataExtractor.fdSrc = fileIo.openSync(filePath);
          // 获取媒体元数据
          let metadata = await avMetadataExtractor.fetchMetadata()
          // 打印宽高数据
          console.info(`metadata.videoWidth:${metadata.videoWidth}`)
          console.info(`metadata.videoHeight:${metadata.videoHeight}`)
        })

    }
    .width("100%")
    .height("100%")
    .justifyContent(FlexAlign.Center)
  }
}

注意:在线视频获取元数据,需先将视频资源下载到本地沙箱,再通过上述方式获取相应信息。

更多关于HarmonyOS 鸿蒙Next中如何获取应用沙箱的视频的详细信息的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


在HarmonyOS Next中,通过FileManagerMediaLibraryManager获取应用沙箱内视频信息。使用getFileAssets()查询沙箱路径下的视频文件,通过MediaAsset对象访问元数据,包括文件名、大小、时长、分辨率及创建时间等属性。无需依赖Java或C语言,仅使用ArkTS API实现。

在HarmonyOS Next中,可以通过FileManagerFileAsset API获取应用沙箱内视频文件的详细信息。以下是关键步骤:

  1. 获取沙箱路径

    let context = getContext(this) as common.UIAbilityContext;
    let sandboxPath = context.filesDir;
    
  2. 查询视频文件

    let fileManager = fileManager.getFileManager();
    let fileAssets = await fileManager.listFileAssets({
      selections: fileManager.FileKey.MEDIA_TYPE + '=?',
      selectionArgs: [fileManager.MediaType.VIDEO.toString()]
    });
    
  3. 获取详细信息

    for (let asset of fileAssets) {
      let size = asset.size;           // 文件大小
      let mimeType = asset.mimeType;   // MIME类型
      let dateAdded = asset.dateAdded; // 创建时间
      // 其他元数据...
    }
    

注意:需要申请ohos.permission.READ_MEDIA权限,并在module.json5中配置:

"requestPermissions": [
  {
    "name": "ohos.permission.READ_MEDIA"
  }
]

这种方式可以获取到视频文件的基础元数据,如需更详细的媒体信息(如时长、分辨率等),建议使用@ohos.multimedia.mediaLibrary相关API。

回到顶部