1# MediaLibrary组件<a name="ZH-CN_TOPIC_0000001147574647"></a> 2 3- [简介](#section1158716411637) 4- [目录](#section161941989596) 5- [使用说明](#usage-guidelines) 6 - [查询音频资产](#get-audioasset) 7 - [创建相册](#create-album) 8 - [拷贝图片资产](#copy-imageasset) 9- [相关仓](#section1533973044317) 10 11 12## 简介<a name="section1158716411637"></a> 13**图1** medialibrary组件架构图 14 15**medialibrary\_standard** 仓库提供了一系列易用的接口用于获取媒体文件元数据信息。 16MediaLibrary接口暂不对外部应用开放, 仅内部使用。 17 18支持能力列举如下: 19- 查询音频、视频和图片文件元数据信息 20- 查询图片和视频相册 21- 媒体文件操作如创建、重命名、拷贝和删除 22- 相册操作如创建、重命名和删除 23 24 25## 目录<a name="section161941989596"></a> 26 27仓目录结构如下: 28``` 29/foundation/multimedia/medialibrary_standard # 媒体库组件代码 30├── frameworks # 框架代码 31│ ├── innerkitsimpl # 内部接口实现 32│ │ └── media_library # Native MediaLibrary 实现 33│ └── kitsimpl # 外部接口实现 34│ └── medialibrary # 外部 MediaLibrary NAPI 实现 35├── interfaces # 接口代码 36│ ├── innerkits # 内部 Native 接口 37│ └── kits # 外部 JS 接口 38├── LICENSE # 证书文件 39├── ohos.build # 编译文件 40├── sa_profile # 服务配置文件 41└── services # 服务实现 42``` 43 44## 使用说明<a name="usage-guidelines"></a> 45### 查询音频资产<a name="get-audioasset"></a> 46可以使用接口如 **GetMediaAssets**、**GetAudioAssets**、**GetVideoAssets** 和 **GetImageAssets** 来查询不同类型的媒体文件元数据信息。 47以下步骤描述了如何使用 GetAudioAssets 接口来获取相应的音频元数据。 481. 使用 **GetMediaLibraryClientInstance** 接口来获取 **Medialibrary** 实例。 49 ```cpp 50 IMediaLibraryClient* mediaLibClientInstance = IMediaLibraryClient::GetMediaLibraryClientInstance(); 51 ``` 522. 在 **selection** 内设置音频文件的扫描目录。selection 代表媒体公共根目录的相对路径, i.e. "/storage/media/local/files"。接口会在指定目录内递归查找所有音频文件。 53 ```cpp 54 string selection = "audios/audio1"; 55 ``` 563. 使用 **GetAudioAssets** 接口来查询音频文件。输入参数 *selectionArgs* 暂无作用,接口会返回 *AudioAsset* 的列表。 57 ```cpp 58 vector<string> selectionArgs; 59 vector<unique_ptr<AudioAsset>> audioAssets = mediaLibClientInstance->GetAudioAssets(selection, selectionArgs); 60 ``` 614. 可以从列表内获取音频元数据信息。 62 ```cpp 63 for (size_t i = 0; i < audioAssets.size(); i++) { 64 cout << audioAssets[i]->uri_ << endl; 65 cout << audioAssets[i]->size_ << endl; 66 cout << audioAssets[i]->dateAdded_ << endl; 67 cout << audioAssets[i]->dateModified_ << endl; 68 cout << audioAssets[i]->albumName_ << endl; 69 cout << audioAssets[i]->duration_ << endl; 70 cout << audioAssets[i]->artist_ << endl; 71 } 72 ``` 73 74### 创建相册<a name="create-album"></a> 75MediaLibrary 给应用提供了操作相册的接口, 如创建、修改和删除。以下展示了创建一个新相册的步骤。 761. 使用 **GetMediaLibraryInstance** 接口来获取 **Medialibrary** 实例。 77 ```cpp 78 IMediaLibraryClient* mediaLibClientInstance = IMediaLibraryClient::GetMediaLibraryClientInstance(); 79 ``` 802. 选择一种相册类型, 可以是 *ASSET_GENERIC_ALBUM*、*ASSET_IMAGEALBUM* 或 *ASSET_VIDEOALBUM* 。 81 ```cpp 82 AssetType assetType = ASSET_VIDEOALBUM; 83 ``` 843. 创建一个 **AlbumAsset** 并提供相册名称。如下 "new_video" 相册将在 "/storage/media/local/files/videos" 内被创建。 85 ```cpp 86 AlbumAsset albumAsset; 87 albumAsset.albumName_ = "videos/new_video"; 88 ``` 894. 使用 **CreateMediaAlbumAsset** 接口来创建新相册, 返回值表示相册创建的成功与否。 90 ```cpp 91 bool errCode = mediaLibClientInstance->CreateMediaAlbumAsset(assetType, albumAsset); 92 ``` 93 94### 拷贝图片资产<a name="copy-imageasset"></a> 95文件操作通过如**CreateMediaAsset**、**ModifyMediaAsset**、**CopyMediaAsset**、**DeleteMediaAsset** 的接口支持。以下例子说明 **CopyMediaAsset** 接口的使用方法。 961. 使用 **GetMediaLibraryInstance** 接口来获取 **Medialibrary** 实例。 97 ```cpp 98 IMediaLibraryClient* mediaLibClientInstance = IMediaLibraryClient::GetMediaLibraryClientInstance(); 99 ``` 1002. 选择一种资产类型, 可以是 *ASSET_MEDIA*、*ASSET_IMAGE*、*ASSET_AUDIO* 或 *ASSET_VIDEO*. 101 ```cpp 102 AssetType assetType = ASSET_IMAGE; 103 ``` 1043. 确定 **ImageAsset** 的源和目标位置, 目标资产需要指定源拷贝的目标相册名。 105 ```cpp 106 MediaAsset srcMediaAsset; 107 MediaAsset dstMediaAsset; 108 109 srcMediaAsset.name_ = "image1.jpg"; 110 srcMediaAsset.uri_ = "/storage/media/local/files/images/001/image1.jpg"; 111 112 dstMediaAsset.albumName_ = "images/new_image"; 113 ``` 1144. 使用 **CopyMediaAsset** 接口来从源资产拷贝到目标资产相册目录, 接口返回值表示文件操作状态。源文件 "image1.jpg" 将会被拷贝到 "/storage/media/local/files/images/new_image" 。 115 ```cpp 116 bool errCode = mediaLibClientInstance->CopyMediaAsset(assetType, srcMediaAsset, dstMediaAsset); 117 ``` 118 119## 相关仓<a name="section1533973044317"></a> 120**[multimedia/medialibrary_standard](https://gitee.com/openharmony/multimedia_medialibrary_standard)** 121