harmony 鸿蒙使用AVMetadataExtractor获取元数据(C/C++)
使用AVMetadataExtractor获取元数据(C/C++)
使用AVMetadataExtractor可以实现从原始媒体资源中获取元数据,本开发指导将以获取一个音频资源的元数据作为示例,向开发者讲解AVMetadataExtractor元数据相关功能。视频资源的元数据获取流程与音频类似,由于视频没有专辑封面,所以无法获取视频资源的专辑封面。
获取音频资源的元数据的全流程包含:创建AVMetadataExtractor、设置资源、获取元数据、获取专辑封面、销毁资源。
开发步骤及注意事项
在 CMake 脚本中链接动态库。
target_link_libraries(entry PUBLIC libavmetadata_extractor.so libace_napi.z.so )
使用OH_AVFormat相关接口时,需引入如下头文件。
#include <multimedia/player_framework/native_avformat.h>
并在 CMake 脚本中链接如下动态库。
target_link_libraries(entry PUBLIC libnative_media_core.so)
使用OH_PixelmapNative_ConvertPixelmapNativeToNapi()接口将nativePixelMap对象转换为PixelMapnapi对象、OH_PixelmapNative_Release()接口释放OH_PixelmapNative对象资源,需引入如下头文件。
#include <multimedia/image_framework/image/pixelmap_native.h>
并在 CMake 脚本中链接如下动态库。
target_link_libraries(entry PUBLIC libpixelmap.so libpixelmap_ndk.z.so)
开发者使用系统日志能力时,需引入如下头文件。
#include <hilog/log.h>
并需要在 CMake 脚本中链接如下动态库。
target_link_libraries(entry PUBLIC libhilog_ndk.z.so)
开发者通过引入avmetadata_extractor.h、avmetadata_extractor_base.h和native_averrors.h头文件,使用获取元数据相关API。 详细的API说明请参考AVMetadataExtractor API参考。
使用OH_AVMetadataExtractor_Create()创建实例。
#include <multimedia/player_framework/avmetadata_extractor.h> // 创建OH_AVMetadataExtractor实例。 OH_AVMetadataExtractor* mainExtractor = OH_AVMetadataExtractor_Create();
设置视频资源的文件描述符:调用OH_AVMetadataExtractor_SetFDSoucre()。 > - 不同AVMetadataExtractor或者AVImageGenerator实例,如果需要操作同一资源,需要多次打开文件描述符,不要共用同一文件描述符。
#include "napi/native_api.h" #include <multimedia/player_framework/avmetadata_extractor.h> int64_t offset = 0; // 媒体源在文件描述符中的偏移量。 int32_t fileDescribe = -1; // 媒体文件描述符。 int32_t fileSize = 0; // 媒体文件大小。 // GetInputParams为辅助函数,用于获取FetchAlbumCover、FetchMetadata的输入参数,实现见完整示例。 if (!GetInputParams(env, info, offset, fileDescribe, fileSize)) { return nullptr; } // 设置视频资源的文件描述符。 OH_AVErrCode avErrCode = OH_AVMetadataExtractor_SetFDSource(mainExtractor, fileDescribe, offset, fileSize); // 异常处理。 if (avErrCode != AV_ERR_OK) { OH_AVMetadataExtractor_Release(mainExtractor); napi_throw_error(env, "EFAILED", "SetFDSource for metadata extractor failed"); return nullptr; }
获取元数据:调用OH_AVMetadataExtractor_FetchMetadata()。 > - 需要先调用OH_AVFormat_Create()函数创建一个OH_AVFormat对象,通过访问该对象的各个键值对,可以获取到元数据。使用完成需要调用OH_AVFormat_Destroy销毁该对象,防止产生内存泄漏,详细使用方法请参阅OH_AVFormat。
// 获取元数据。 avErrCode = OH_AVMetadataExtractor_FetchMetadata(mainExtractor, avMetadata);
(可选)获取专辑封面:调用OH_AVMetadataExtractor_FetchAlbumCover(),可以获取到专辑封面。 > - 使用完成需要调用OH_PixelmapNative_Release释放OH_PixelmapNative对象资源,详细使用方法请参阅Image_NativeModule。
#include <multimedia/image_framework/image/pixelmap_native.h> #include <multimedia/player_framework/avmetadata_extractor.h> #include <hilog/log.h> // 获取专辑封面。 OH_PixelmapNative* pixelMap = nullptr; avErrCode = OH_AVMetadataExtractor_FetchAlbumCover(mainExtractor, &pixelMap);
释放资源:调用OH_AVMetadataExtractor_Release()销毁实例,释放资源。
// 释放OH_AVMetadataExtractor资源。 OH_AVMetadataExtractor_Release(mainExtractor);
运行示例工程
参考以下示例,获取一个音频的元数据和专辑封面。
- 新建工程,下载完整示例工程,并将示例工程的资源复制到对应目录。
AVMetadataExtractorNDK entry/src/main/ets/ └── pages └── Index.ets (获取元数据界面) entry/src/main/ ├── cpp │ ├── types │ │ └── libentry │ │ └── Index.d.ts (NDK函数对应的js映射) │ ├── CMakeLists.txt (CMake脚本) │ └── napi_init.cpp (NDK函数) └── resources ├── base │ ├── element │ │ ├── color.json │ │ ├── float.json │ │ └── string.json │ └── media │ └── rawfile └── test.mp3 (音频资源)
- 编译新建工程并运行。
你可能感兴趣的鸿蒙文章
harmony 鸿蒙使用AVImageGenerator提取视频指定时间图像(ArkTS)
harmony 鸿蒙使用AVMetadataExtractor提取音视频元数据信息(ArkTS)
harmony 鸿蒙创建异步线程执行AVTranscoder视频转码(ArkTS)
harmony 鸿蒙使用AVPlayer设置播放URL(ArkTS)
harmony 鸿蒙使用AVPlayer播放流媒体(ArkTS)
- 所属分类: 后端技术
- 本文标签:
热门推荐
-
2、 - 优质文章
-
3、 gate.io
-
8、 golang
-
9、 openharmony
-
10、 Vue中input框自动聚焦