写点什么

OpenHarmony 3.2 Beta 源码分析之 MediaLibrary

  • 2022 年 9 月 19 日
    上海
  • 本文字数:1620 字

    阅读完需:约 5 分钟

OpenHarmony 3.2 Beta源码分析之MediaLibrary

1.MediaLibrary 介绍

OpenAtom OpenHarmony(以下简称“OpenHarmony”)MediaLibrary 媒体库提供了一系列易用的接口用于获取媒体文件元数据信息。MediaLibrary 接口是 OpenHarmony 系统内部使用接口,不是外部三方应用使用的接口。

MediaLibrary 的功能支持扫描设备中所有媒体文件的能力,为相册、音视频播放器、文件管理器等应用提供统一的媒体元数据信息操作接口,目前可实现的具体能力如下:

● 查询音频、视频和图片文件元数据信息

● 查询图片和视频相册

● 媒体文件操作如创建、重命名、拷贝和删除

● 相册操作如创建、重命名和删除

MediaLibrary 媒体库代码仓的位置:foundation/multimedia/media_library


2.代码结构



代码的框架主要分为 Napi 和 Native 两部分。

NAPI 部分实现了媒体资源的查询、相册增删改查的实现及 JS 接口。

Native 部分:

(1)media_library_helper:

主要提供了资源的设置和创建功能,比如相册的操作、缩略图操作等,主要涉及到资源文件或者文件夹的创建。

(2)media_library_manager:

主要对媒体库的相关数据库进行操作。

(3)media_scanner:

media_library/frameworks/innerkitsimpl/media_scanner 中的代码没有添加到编译系统中,OpenHarmony 3.2 Beta 版本的扫描代码主要放在 media_library/frameworks/services/media_scanner 目录中。

(4)medialibrary_data_extension:

该目录中涉及到一些 C++源码和 Hap 包的应用代码,目前的扫描、截图等流程没有涉及到本目录的内容。


3.对外接口

getPublicDirectory 查看公共目录

根据参数传递的目录类型返回不同类型媒体库的相对目录。例如:"Cameras/"、"Videos/"、"Pictures/"、"Audios/"、"Documents/"和"Downloads/".

getFileAssets 获取文件资源

调用 DataShareHelper 的 Query 查询接口,获取文件资源,最终回调用 JsDataShareExtAbility 的 Query 接口实现。

getAlbums 获取相册

查询媒体中的相册目录信息。

createAsset 创建资源

调用 DataShareHelper 提供的 Insert()接口插入数据库,传入的 uri 通过“create_asset”字符表示创建数据资源。

deleteAsset 删除资源

调用 DataShareHelper 提供的 Insert()接口插入数据库,传入的 uri 通过“delete_asset”字符表示删除数据资源。


4. 媒体库相关服务

OpenHarmony 3.2 Beta 版本的目录结构进行了比较大的调整,将 Services 目录放到了 frameworks 路径下,并且相比 3.1 Release 版本去掉了 IPC 调用机制。目前,Services 目录下的 media_library_data_share 和 media_thumbnail 里面的文件内容为空,后续会完善。



5. 媒体库相关数据库

媒体库操作的数据是

在/data/app/el2/100/database/com.ohos.medialibrary.medialibrarydata/media_library.db 目录下。这是 SQLite3 数据库的文件,可以使用 SqliteManager 软件打开,主要看数据库的两部分:第一部分 Files 表数据



Files 表格字段:



第二部分是 VIEWS 中的几个表,比如相册查询、图片查询、视频查询。



6. 代码流程

截屏流程



截屏 App 通过调用 saveImage 方法来进行截屏图片的保存,这个方法通过 @ohos.multimedia.mediaLibrary 的 getMediaLibrary 接口获取到 MediaLibrary,调用它的接口会调用到 MediaLibraryNapi 提供的接口,这个对象是连接 JS 和 Native 的桥梁。

首先通过 getPublicDirectory 获取到相对路径,然后通过 createAsset 创建资源返回 fileAsset,再通过 fileAsset 对文件进行操作(将 jpegData 数据写入文件),最后关闭文件,完成截屏图片的保存。

启动图库流程



图库通过 MediaLibraryNapi 的 getFileAssets 接口获取文件资源,最终返回 pixelMap 给应用使用。

媒体文件扫描流程



MediaLibraryDataManager 的 InitMediaLibraryMgr 接口中最终会调用 ScanDir 来进行媒体文件扫描,这接口调用到 frameworks/services/media_scanner 目录下对应的实现。


7. 总结

本文主要介绍了 OpenHarmony 3.2 Beta 多媒体子系统的媒体库模块,本模块的接口暂不提供外部三方应用使用,仅提供 OpenHarmony 系统内部使用。相比于 OpenHarmony3.1 Release 版本,OpenHarmony 3.2 Beta 版本的目录结构进行了比较大的调整,相关功能期待广大开发者持续加入并完善。



用户头像

OpenHarmony开发者官方账号 2021.12.15 加入

OpenHarmony是由开放原子开源基金会(OpenAtom Foundation)孵化及运营的开源项目,目标是面向全场景、全连接、全智能时代,基于开源的方式,搭建一个智能终端设备操作系统的框架和平台,促进万物互联产业的繁荣发展

评论

发布
暂无评论
OpenHarmony 3.2 Beta源码分析之MediaLibrary_OpenHarmony_OpenHarmony开发者社区_InfoQ写作社区