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 3.2 Beta源码分析之MediaLibrary的更多相关文章

  1. 鸿蒙内核源码分析(VFS篇) | 文件系统和谐共处的基础 | 百篇博客分析OpenHarmony源码 | v68.01

    子曰:"质胜文则野,文胜质则史.文质彬彬,然后君子." <论语>:雍也篇 百篇博客系列篇.本篇为: v68.xx 鸿蒙内核源码分析(VFS篇) | 文件系统和谐共处的基 ...

  2. 鸿蒙内核源码分析(根文件系统) | 先挂到`/`上的文件系统 | 百篇博客分析OpenHarmony源码 | v66.01

    百篇博客系列篇.本篇为: v66.xx 鸿蒙内核源码分析(根文件系统) | 先挂到/上的文件系统 | 51.c.h.o 文件系统相关篇为: v62.xx 鸿蒙内核源码分析(文件概念篇) | 为什么说一 ...

  3. 鸿蒙内核源码分析(索引节点篇) | 谁是文件系统最重要的概念 | 百篇博客分析OpenHarmony源码 | v64.01

    百篇博客系列篇.本篇为: v64.xx 鸿蒙内核源码分析(索引节点篇) | 谁是文件系统最重要的概念 | 51.c.h.o 文件系统相关篇为: v62.xx 鸿蒙内核源码分析(文件概念篇) | 为什么 ...

  4. 鸿蒙内核源码分析(文件概念篇) | 为什么说一切皆是文件 | 百篇博客分析OpenHarmony源码 | v62.01

    百篇博客系列篇.本篇为: v62.xx 鸿蒙内核源码分析(文件概念篇) | 为什么说一切皆是文件 | 51.c.h.o 本篇开始说文件系统,它是内核五大模块之一,甚至有Linux的设计哲学是" ...

  5. 鸿蒙内核源码分析(忍者ninja篇) | 都忍者了能不快吗 | 百篇博客分析OpenHarmony源码 | v61.02

    百篇博客系列篇.本篇为: v61.xx 鸿蒙内核源码分析(忍者ninja篇) | 都忍者了能不快吗 | 51.c.h.o 编译构建相关篇为: v50.xx 鸿蒙内核源码分析(编译环境篇) | 编译鸿蒙 ...

  6. 鸿蒙内核源码分析(GN应用篇) | GN语法及在鸿蒙的使用 | 百篇博客分析OpenHarmony源码 | v60.01

    百篇博客系列篇.本篇为: v60.xx 鸿蒙内核源码分析(gn应用篇) | gn语法及在鸿蒙的使用 | 51.c.h.o 编译构建相关篇为: v50.xx 鸿蒙内核源码分析(编译环境篇) | 编译鸿蒙 ...

  7. 鸿蒙内核源码分析(构建工具篇) | 顺瓜摸藤调试鸿蒙构建过程 | 百篇博客分析OpenHarmony源码 | v59.01

    百篇博客系列篇.本篇为: v59.xx 鸿蒙内核源码分析(构建工具篇) | 顺瓜摸藤调试鸿蒙构建过程 | 51.c.h.o 编译构建相关篇为: v50.xx 鸿蒙内核源码分析(编译环境篇) | 编译鸿 ...

  8. 鸿蒙内核源码分析(编译脚本篇) | 如何防编译环境中的牛皮癣 | 百篇博客分析OpenHarmony源码 | v58.01

    百篇博客系列篇.本篇为: v58.xx 鸿蒙内核源码分析(环境脚本篇) | 编译鸿蒙原来如此简单 | 51.c.h.o 本篇用两个脚本完成鸿蒙(L1)的编译环境安装/源码下载/编译过程,让编译,调试鸿 ...

  9. 鸿蒙内核源码分析(静态站点篇) | 五一哪也没去就干了这事 | 百篇博客分析OpenHarmony源码 | v52.02

    百篇博客系列篇.本篇为: v52.xx 鸿蒙内核源码分析(静态站点篇) | 五一哪也没去就干了这事 | 51.c.h.o 前因后果相关篇为: v08.xx 鸿蒙内核源码分析(总目录) | 百万汉字注解 ...

  10. 鸿蒙内核源码分析(编译环境篇) | 编译鸿蒙看这篇或许真的够了 | 百篇博客分析OpenHarmony源码 | v50.06

    百篇博客系列篇.本篇为: v50.xx 鸿蒙内核源码分析(编译环境篇) | 编译鸿蒙防掉坑指南 | 51.c.h.o 编译构建相关篇为: v50.xx 鸿蒙内核源码分析(编译环境篇) | 编译鸿蒙防掉 ...

随机推荐

  1. 4-request对象

    前端提交数据 必备知识点 前端form表单中action属性,不写默认是当前路由地址 前端form表单中的method属性,不写默认是GET请求 前端页面 templates\register.htm ...

  2. webservice之jersey简单实用

    前言 项目中更需要使用到webservice,具体的是使用jersey.那么首先需要了解jersey和webservice的关系,捋顺webservice框架的各种实现,通过查阅相关博客,我个人总结w ...

  3. 【Azure 事件中心】使用Kafka消费Azure EventHub中数据,遇见消费慢的情况可以如何来调节呢?

    问题描述 使用Kafka消费Azure EventHub中数据,遇见消费慢的情况可以如何来调节呢? 问题解答 查看Kafka Consumer的配置参数,其中最只要的一个参数为:max.poll.re ...

  4. 【Azure 应用服务】访问App Service突然出现 ERR_SSL_PROTOCOL_ERROR错误的解答

    问题描述 在中国区的Azure  App Service服务中,新创建的站点突然访问出现 " This site can't provide a secure connection,xxxx ...

  5. 链接服务器导致SQL Server停止响应

    概要 如果多个实例中同时存在数据源为对方实例的链接服务器,并且开启了"分发服务器"的属性,您可能会遇到这种情况. 1 现象 14:31时,在SSMS中检查HIS实例是否有复制订阅时 ...

  6. Java 常用类 String类与其他结构之间的转换-----String 与 char[]之间的转换

    1 /* 2 String 与 char[]之间的转换 3 4 String----> char[]:调用String的toCharArray() 5 char[] ---->String ...

  7. vue3使用路由keep-alive和监听路由实现transition

    随着vue3.0的发布,vue-router发布了4.0版本,文档 很明了,提供了vue2路由到vue3的变化和写法指导. vue2: // transition <transition nam ...

  8. Openssl命令详解 - 证书篇

    生成自签证书 # 设置CA证书subject CA_SUBJ="/C=CN/ST=ShanDong/L=JiNan/O=sec/OU=sec/CN=www.hxy.com/emailAddr ...

  9. 我为什么使用Linux做开发

    系统选择 目前市面上主流的桌面操作系统在大多数人眼里只有Windows和MacOS,那为什么我没选择它们两呢? 首先,不选MacOS的原因,就是太贵.当然这是我的原因不是苹果的原因,我最早使用Linu ...

  10. IDEA无限试用插件

    原文地址 之前一直在找激活方法,忽然想到IDEA不是可以试用吗?一直试用不就可以变相地达到了激活的效果? 本篇作废,本篇作废,本篇作废,由于IDEA插件的问题,导致并不能成功的进行重置试用 新整了个J ...