精华内容
下载资源
问答
  • 多媒体数据库

    2018-06-23 15:20:41
    1)能够实现数据库与相关信息的保存和读取; 2)通过数据库访问基本信息; 3)实现图片保存、打开、显示等功能; 4)实现数据的增加、删除和修改等基本功能; 2、问题的解决方案: 根据系统功能要求,可以将问题...
  • 多媒体数据库管理系统 目录 引言 (1) 1多媒体数据库管理系统 (1) 2系统设计 (2) 2.1用户合法性的实现 (2) 2.2多媒体数据的管理 (3) 3结束语 (6)
  • 认识 Android 多媒体数据库 MediaStore MediaStore 这个类是 android 系统提供的一个多媒体数据库android 中多媒体信息都可以 从这里提取这个 MediaStore 包括了多媒体数据库的所有信息包括音频视频和图 像,android ...
  • 认识Andoid 多媒体数据库MdSo ediaStore这个类是nroid系统提供的一个多媒体数据库aroid中多媒体信息都可以从这里提取这个eStre包括了多媒体数据库的所有信息包括音频,视频和图像,ndroid把所有的多媒体数据库接口进行...
  • 多媒体数据库的互联机制与策略算法 摘 要多媒体数据库系统是数据库研究领域的热点之一主要介绍了多媒体数据库 DM3 及 DM3 数据库系统间的信息共享机制探索了多个 DM3 数据库系统间的信息共享 的策略算法 关键词...
  • 新华社多媒体数据库系统通过TRS Gateway(关系数据库网关)将原有各个部门系统中的信息采集到TRS Database Server(全文数据库服务器)中进行统一分类存储。对于互联网上有价值的新闻信息,则通过TRS InfoRadar(网络...
  • 多媒体数据库实验7

    2013-06-27 00:05:31
    这是云南大学软件学院多媒体数据库的实验报告。
  • 多媒体数据库实验6

    2013-06-27 00:04:30
    这是云南大学软件学院多媒体数据库的实验报告。
  • 多媒体数据库实验3

    2013-06-27 00:00:04
    这是云南大学软件学院多媒体数据库的实验报告。
  • 多媒体数据库实验2

    2013-06-26 23:15:58
    这是云南大学软件学院的多媒体数据库实验报告。
  • 多媒体数据库系统

    千次阅读 2018-04-25 09:19:07
    一般认为,数据模型化是数据库技术的基础和核心。广义地理解,数据模型化包括了概念模型、逻辑模型和物理模型的建立。其中概念模型是数据库设计者...多媒体数据库依托的是多媒体数据模型,首先需要把各种媒体所建立...

    一般认为,数据模型化是数据库技术的基础和核心。广义地理解,数据模型化包括了概念模型、逻辑模型和物理模型的建立。其中概念模型是数据库设计者对现实世界的抽象,逻辑 模型是对概念模型的逻辑表示,而物理模型是对逻辑模型的计算机表示。要把复杂的现实世界正确地描述出来,并将其数据及关系在数据库中进行存储和管理,关键的一步是要把现实世界抽象为概念模型。多媒体数据库依托的是多媒体数据模型,首先需要把各种媒体所建立的概念模型结合为一个有机地统一整体,使概念模型一体化,以形成一个“多媒体概念模型”,再以某种符号系统加以表示,形成多媒体数据模型的基础。

    1)多媒体数据模型具有的特性

    x①能支持媒体的独立性。这是因为多媒体数据库的目标应能实现诸如媒体的混合、媒体的扩充、媒体的互换,即应能使用户最大限度地可忽略各媒体间差别,而实现对复杂数据对象的管理和使用。

    ②要支持数据模型的三个基本要素:数据的结构性质,能描述实体及实体间的联系;具有与数据库相关的语义完整性限制;体现数据的操作特性,即要通过对各种媒体的符号化、抽象化,用户可以对各种媒体数据进行统一的处理和一致性管理。对不同内部表示的数据用同样的数据库语言进行操作,并提供能用于多媒体数据库语言接口。

    深圳IT外包   http://www.lankuai.info

    2)实现多媒体数据模型的方法

    ①基于关系数据模型的方法,即在关系数据模型中引入抽象数据类型,并对数据类型定义所必要的数据表示形式及其操作加以扩充。

    ②基于语义数据模型的方法,语义数据模型能提供更具自然的处理现实世界的数据及其联系能力,并在实体类型的表示及其联系上具有特点。当然还有其他的方法,如基于对象的数据建模方法等。目前对多媒体数据模型的研究还还很不充分,仍然缺乏完整的、具有普遍意义的理论。

    展开全文
  • 通过TRS系列产品搭建的新华社多媒体数据库搜索引擎,提高信息资源的使用效率,客户如此评价该系统:新华社是我国国家通讯社,是全球新闻信息总汇,TRS在新华社有广泛应用,已经成为新华社业务的核心支撑技术之一,仅...
  • 应网友要求,今天给大家讲android的多媒体数据库。MediaStore这个类是...这个MediaStore包括了多媒体数据库的所有信息,包括音频,视频和图像,android把所有的多媒体数据库接口进行了封装,所有的数据库不用自...

    引用:http://www.oschina.net/question/16_7603

    应网友要求,今天给大家讲android的多媒体数据库。MediaStore这个类是android系统提供的一个多媒体数据库,android中多媒体信息都可以从这里提取。这个MediaStore包括了多媒体数据库的所有信息,包括音频,视频和图像,android把所有的多媒体数据库接口进行了封装,所有的数据库不用自己进行创建,直接调用利用ContentResolver去掉用那些封装好的接口就可以进行数据库的操作了。今天我就介绍一些这些接口的用法。

      首先,要得到一个ContentResolver实例,ContentResolver可以这样获取,利用一个Activity或者Service的Context即可。如下所示:

      ContentResolver mResolver = ctx.getContentResolver();

      上面的那个ctx的就是一个context,Activity.this就是那个Context,这个Context就相当于一个上下文环境。得到这个Context后就可以调用getContentResolver接口获取ContentResolver实例了。ContentResolver实例获得后,就可以进行各种查询,下面我就以音频数据库为例讲解增删改查的方法,视频和图像和音频非常类似。

      在讲解各种查询之前,我给大家介绍下怎么看android都提供了哪些多媒体表。在adb shell中,找到/data/data/com.android.providers.media/databases/下,然后找到SD卡的数据库文件(一般是一个.db文件),然后输入命令sqlite3加上这个数据库的名字就可以查询android的多媒体数据库了。.table命令可以列出所有多媒体数据库的表,.scheme加上表名可以查询表中的所有列名。这里可以利用SQL语句来查看你想要的数据,记得最后一定要记住每条语句后面都加上分号。下面开始讲述怎么在这些表上进行增删改查。

    查询,代码如下所示:

      Cursor cursor = resolver.query(_uri, prjs, selections, selectArgs, order);

         ContentResolver的query方法接受几个参数,参数意义如下:

         Uri:这个Uri代表要查询的数据库名称加上表的名称。这个Uri一般都直接从MediaStore里取得,例如我要取所有歌的信息,就必须利用MediaStore.Audio.Media. EXTERNAL _CONTENT_URI这个Uri。专辑信息要利用MediaStore.Audio.Albums.EXTERNAL_CONTENT_URI这个Uri来查询,其他查询也都类似。

         Prjs:这个参数代表要从表中选择的列,用一个String数组来表示。

         Selections:相当于SQL语句中的where子句,就是代表你的查询条件。

         selectArgs:这个参数是说你的Selections里有?这个符号是,这里可以以实际值代替这个问号。如果Selections这个没有?的话,那么这个String数组可以为null。

         Order:说明查询结果按什么来排序。

         上面就是各个参数的意义,它返回的查询结果一个Cursor,这个Cursor就相当于数据库查询的中Result,用法和它差不多。

    增加,代码如下所以:

         ContentValues values = new ContentValues();

    values.put(MediaStore.Audio.Playlists.Members.PLAY_ORDER,0);

    resolver.insert(_uri, values);

      这个insert传递的参数只有两个,一个是Uri(同查询那个Uri),另一个是ContentValues。这个ContentValuses对应于数据库的一行数据,只要用put方法把每个列的设置好之后,直接利用insert方法去插入就好了。

      更新,代码如下:

    ContentResolver resolver = ctx.getContentResolver();

    Uri uri = MediaStore.Audio.Media.EXTERNAL_CONTENT_URI;

    ContentValues values = new ContentValues();

    values.put(MediaStore.Audio.Media.DATE_MODIFIED, sid);

    resolver.update(MediaStore.Audio.Playlists.EXTERNAL_CONTENT_URI,values, where, selectionArgs);

    上面update方法和查询还有增加里的参数都很类似,这里就不再重复叙述了,大家也可直接参考google的文档,那里也写的很清楚。

      删除,代码如下:

    ContentResolver resolver = ctx.getContentResolver();

      resolver.delete(MediaStore.Audio.Playlists.EXTERNAL_CONTENT_URI,where, selectionArgs);

      delete和更新的方法很类似,大家对照更新的方法看下马上就会明白,今天就写到这里了最近比较忙,打算一周发一篇心得体会吧,希望大家也把自己的开发心得写出来多多交流。

    展开全文
  • 下面将作者开发航材多媒体数据库管理系统的点滴经验做一介绍。 1 航材多媒体信息管理系统的组成和开发 l.1 航材多媒体信息管理系统的组成 航材仓库担负着航材的筹措、储存、管理、发付等任务。通常仓库中储存...
  • android 多媒体数据库

    千次阅读 2017-05-06 10:34:37
    android多媒体数据库表分析,深入学习android数据库。
    
    

    摘要: Android MediaProvider 使用 SQLite 数据库存储图片、视频、音频等多媒体文件的信息,供视频播放器、音乐播放器、图库使用。本文详细分析了 Android MediaProvider 多媒体数据库(以 SDK 2.3.3 为例)的模式(schema),并简要叙述与系统媒体扫描服务 MediaScanner 的交互。

    1. 如何提取数据库
    以 root 权限进入 adb shell,使用 sqlite3 打开位于手机上 /data/data/com.android.providers.media/databases 上的一个数据库。以 external 开头的数据库存储的是 SD 卡媒体信息,一张卡对应一个,所以如果手机使用过多张卡会有多个数据库。以 internal 开头的数据库存储手机内部存储器的媒体信息。因为一般用户无法访问手机内部存储器,而且这两个数据库结构是大体上是相同的,所以只需要关注 external 数据库即可。

    Note: 数据库都是以类似 external-ffffffff.db 的形式命名的, 后面的 8 个 16 进制字符是该 SD 卡 FAT 分区的 Volume ID。该 ID 是分区时决定的,只有重新分区或者手动改变才会更改,可以防止插入不同 SD 卡时数据库冲突。要简单了解 FAT 文件系统请看 Understanding FAT Filesystems

    接着在 sqlite3 执行命令 .schema 即可导出创建数据库的 SQL 语句,也就是数据库模式,具体如下:

    1 CREATE TABLE album_art (album_id INTEGER PRIMARY KEY,_data TEXT);
    2 CREATE TABLE albums (album_id INTEGER PRIMARY KEY,album_key TEXT NOT NULL UNIQUE,album TEXT NOT NULL);
    3 CREATE TABLE android_metadata (locale TEXT);
    4 CREATE TABLE artists (artist_id INTEGER PRIMARY KEY,artist_key TEXT NOT NULL UNIQUE,artist TEXT NOT NULL);
    5 CREATE TABLE audio_genres (_id INTEGER PRIMARY KEY,name TEXT NOT NULL);
    6 CREATE TABLE audio_genres_map (_id INTEGER PRIMARY KEY,audio_id INTEGER NOT NULL,genre_id INTEGER NOT NULL);
    7 CREATE TABLE audio_meta (_id INTEGER PRIMARY KEY,_data TEXT UNIQUE NOT NULL,_display_name TEXT,_size INTEGER,mime_type TEXT,date_added INTEGER,date_modified INTEGER,title TEXT NOT NULL,title_key TEXT NOT NULL,duration INTEGER,artist_id INTEGER,composer TEXT,album_id INTEGER,track INTEGER,year INTEGER CHECK(year!=0),is_ringtone INTEGER,is_music INTEGER,is_alarm INTEGER,is_notification INTEGER, is_podcast INTEGER, bookmark INTEGER);
    8 CREATE TABLE audio_playlists (_id INTEGER PRIMARY KEY,_data TEXT,name TEXT NOT NULL,date_added INTEGER,date_modified INTEGER);
    9 CREATE TABLE audio_playlists_map (_id INTEGER PRIMARY KEY,audio_id INTEGER NOT NULL,playlist_id INTEGER NOT NULL,play_order INTEGER NOT NULL);
    10 CREATE TABLE images (_id INTEGER PRIMARY KEY,_data TEXT,_size INTEGER,_display_name TEXT,mime_type TEXT,title TEXT,date_added INTEGER,date_modified INTEGER,description TEXT,picasa_id TEXT,isprivate INTEGER,latitude DOUBLE,longitude DOUBLE,datetaken INTEGER,orientation INTEGER,mini_thumb_magic INTEGER,bucket_id TEXT,bucket_display_name TEXT);
    11 CREATE TABLE thumbnails (_id INTEGER PRIMARY KEY,_data TEXT,image_id INTEGER,kind INTEGER,width INTEGER,height INTEGER);
    12 CREATE TABLE video (_id INTEGER PRIMARY KEY,_data TEXT NOT NULL,_display_name TEXT,_size INTEGER,mime_type TEXT,date_added INTEGER,date_modified INTEGER,title TEXT,duration INTEGER,artist TEXT,album TEXT,resolution TEXT,description TEXT,isprivate INTEGER,tags TEXT,category TEXT,language TEXT,mini_thumb_data TEXT,latitude DOUBLE,longitude DOUBLE,datetaken INTEGER,mini_thumb_magic INTEGER, bucket_id TEXT, bucket_display_name TEXT, bookmark INTEGER);
    13 CREATE TABLE videothumbnails (_id INTEGER PRIMARY KEY,_data TEXT,video_id INTEGER,kind INTEGER,width INTEGER,height INTEGER);
    14 
    15 CREATE VIEW album_info AS SELECT audio.album_id AS _id, album, album_key, MIN(year) AS minyear, MAX(year) AS maxyear, artist, artist_id, artist_key, count(*) AS numsongs,album_art._data AS album_art FROM audio LEFT OUTER JOIN album_art ON audio.album_id=album_art.album_id WHERE is_music=1 GROUP BY audio.album_id;
    16 CREATE VIEW artist_info AS SELECT artist_id AS _id, artist, artist_key, COUNT(DISTINCT album_key) AS number_of_albums, COUNT(*) AS number_of_tracks FROM audio WHERE is_music=1 GROUP BY artist_key;
    17 CREATE VIEW artists_albums_map AS SELECT DISTINCT artist_id, album_id FROM audio_meta;
    18 CREATE VIEW audio as SELECT * FROM audio_meta LEFT OUTER JOIN artists ON audio_meta.artist_id=artists.artist_id LEFT OUTER JOIN albums ON audio_meta.album_id=albums.album_id;
    19 CREATE VIEW search AS SELECT _id,'artist' AS mime_type,artist,NULL AS album,NULL AS title,artist AS text1,NULL AS text2,number_of_albums AS data1,number_of_tracks AS data2,artist_key AS match,'content://media/external/audio/artists/'||_id AS suggest_intent_data,1 AS grouporder FROM artist_info WHERE (artist!='<unknown>') UNION ALL SELECT _id,'album' AS mime_type,artist,album,NULL AS title,album AS text1,artist AS text2,NULL AS data1,NULL AS data2,artist_key||' '||album_key AS match,'content://media/external/audio/albums/'||_id AS suggest_intent_data,2 AS grouporder FROM album_info WHERE (album!='<unknown>') UNION ALL SELECT searchhelpertitle._id AS _id,mime_type,artist,album,title,title AS text1,artist AS text2,NULL AS data1,NULL AS data2,artist_key||' '||album_key||' '||title_key AS match,'content://media/external/audio/media/'||searchhelpertitle._id AS suggest_intent_data,3 AS grouporder FROM searchhelpertitle WHERE (title != '');
    20 CREATE VIEW searchhelpertitle AS SELECT * FROM audio ORDER BY title_key;
    21 
    22 CREATE INDEX album_id_idx on audio_meta(album_id);
    23 CREATE INDEX album_idx on albums(album);
    24 CREATE INDEX albumkey_index on albums(album_key);
    25 CREATE INDEX artist_id_idx on audio_meta(artist_id);
    26 CREATE INDEX artist_idx on artists(artist);
    27 CREATE INDEX artistkey_index on artists(artist_key);
    28 CREATE INDEX image_bucket_index ON images(bucket_id, datetaken);
    29 CREATE INDEX image_id_index on thumbnails(image_id);
    30 CREATE INDEX sort_index on images(datetaken ASC, _id ASC);
    31 CREATE INDEX title_idx on audio_meta(title);
    32 CREATE INDEX titlekey_index on audio_meta(title_key);
    33 CREATE INDEX video_bucket_index ON video(bucket_id, datetaken);
    34 CREATE INDEX video_id_index on videothumbnails(video_id);
    35 
    36 CREATE TRIGGER albumart_cleanup1 DELETE ON albums BEGIN DELETE FROM album_art WHERE album_id = old.album_id;END;
    37 CREATE TRIGGER albumart_cleanup2 DELETE ON album_art BEGIN SELECT _DELETE_FILE(old._data);END;
    38 CREATE TRIGGER audio_delete INSTEAD OF DELETE ON audio BEGIN DELETE from audio_meta where _id=old._id;DELETE from audio_playlists_map where audio_id=old._id;DELETE from audio_genres_map where audio_id=old._id;END;
    39 CREATE TRIGGER audio_genres_cleanup DELETE ON audio_genres BEGIN DELETE FROM audio_genres_map WHERE genre_id = old._id;END;
    40 CREATE TRIGGER audio_meta_cleanup DELETE ON audio_meta BEGIN DELETE FROM audio_genres_map WHERE audio_id = old._id;DELETE FROM audio_playlists_map WHERE audio_id = old._id;END;
    41 CREATE TRIGGER audio_playlists_cleanup DELETE ON audio_playlists BEGIN DELETE FROM audio_playlists_map WHERE playlist_id = old._id;SELECT _DELETE_FILE(old._data);END;
    42 CREATE TRIGGER images_cleanup DELETE ON images BEGIN DELETE FROM thumbnails WHERE image_id = old._id;SELECT _DELETE_FILE(old._data);END;
    43 CREATE TRIGGER thumbnails_cleanup DELETE ON thumbnails BEGIN SELECT _DELETE_FILE(old._data);END;
    44 CREATE TRIGGER video_cleanup DELETE ON video BEGIN SELECT _DELETE_FILE(old._data);END;
    45 CREATE TRIGGER videothumbnails_cleanup DELETE ON videothumbnails BEGIN SELECT _DELETE_FILE(old._data);END;

    Note: 如果手机没有 sqlite3 程序,可以搜索编译过的源代码的 out 目录找到可执行文件,大约 90kb,然后 adb push 到手机的 /system/bin/ 目录。安装 sqlite3、查询数据库均需要 adb root 权限。 Android 的多媒体数据库主要由表、视图、索引以及触发器组成。


    接着还需要把数据库转换成图,手工转换的话就是根据 SQL 语句自行画图;推荐懒人使用自动转换,先使用 adb pull 把数据库导出,再使用 Power Designer 或者 Visio 的逆向工程(Reverse Engineer)功能生成物理数据模型(Physical Data Model)。注意要连接 sqlite 数据库文件的话需要先安装 sqlite 的 ODBC 驱动,教程在这里:SQLite ODBC Driver

    2. 数据库模式分析

    图片数据库
    图片数据库由两个表组成,分别是 images 和 thumbnails,物理数据模型如下所示(Power Designer 逆向工程生成)


    Note: 如何数据库物理模型图:<pk> 表示此为主键。其余的表名、字段名、数据类型应该都能看明白。


    Note: SQLite 从 3.6.19 版才开始支持外键约束,Android 2.3.3 使用的是 3.7.x,但并没有使用此特性,而是通过操作数据库的程序(如 MediaScanner)以及触发器来维护数据库的一致性。这里可以了解 SQLite 的外键支持情况

    数据表字段解析如下:

    images:图片信息

    字段 解析
    _id 主键。图片 id,从 1 开始自增
    _data 图片绝对路径
    _size 文件大小,单位为 byte
    _display_name 文件名
    mime_type 类似于 image/jpeg 的 MIME 类型
    title 不带扩展名的文件名
    date_added 添加到数据库的时间,单位秒
    date_modified 文件最后修改时间,单位秒
    description  
    picasa_id 用于 picasa 网络相册
    isprivate  
    latitude 纬度,需要照片有 GPS 信息
    longitude 经度,需要照片有 GPS 信息
    datetaken 取自 EXIF 照片拍摄时间,若为空则等于文件修改时间,单位毫秒
    orientation 取自 EXIF 旋转角度,在图库旋转图片也会改变此值
    mini_thumb_magic 取小缩略图时生成的一个随机数,见 MediaThumbRequest
    bucket_id 等于 path.toLowerCase.hashCode(),见 MediaProvider.computeBucketValues()
    bucket_display_name 直接包含图片的文件夹就是该图片的 bucket,就是文件夹名
    thumbnails:缩略图
    字段 解析
    _id 主键。缩略图 id,从 1 开始自增
    _data 图片绝对路径
    image_id 缩略图所对应图片的 id,依赖于 images 表 _id 字段,可建立外键
    kind 缩略图类型,1 是大缩略图,2 基本不用,3 是微型缩略图但其信息不保存在数据库
    width 缩略图宽度
    height 缩略图高度

    视频数据库


    数据表字段解析如下:

    video:视频信息
    字段 解析
    _id 主键。视频 id
    _data 视频绝对路径
    _display_name 文件名
    _size 文件大小,单位为 byte
    mime_type 类似于 video/avi 的 MIME 类型
    date_added 添加到数据库的时间,单位秒
    date_modified 文件最后修改时间,单位秒
    title 不带扩展名的文件名
    duration 视频时长,单位毫秒
    artist 艺术家
    album 专辑名,一般为文件夹名
    resolution  
    description  
    isprivate  
    tags  
    category  
    language  
    mini_thumb_data  
    latitude  
    longitude  
    datetaken  
    mini_thumb_magic 取小缩略图时生成的一个随机数,见 MediaThumbRequest
    bucket_id 等于 path.toLowerCase.hashCode(),见 MediaProvider.computeBucketValues()
    bucket_display_name 直接包含视频的文件夹就是该图片的 bucket,就是文件夹名
    bookmark  
    videothumbnails:视频缩略图
    字段 解析
    _id 主键。缩略图 id
    _data 缩略图绝对路径
    video_id 缩略图所对应视频的 id,依赖于 video 表 _id 字段
    kind 缩略图类型,1 是大图,视频只能取类型 1
    width 缩略图宽度
    height 缩略图高度

    音频数据库


    音频数据库是最复杂的,由 10 个表组成。物理数据模型如下所示:

    album_art:专辑封面
    字段 解析
    album_id 主键。专辑 id
    _data 专辑封面缓存的路径
    albums:专辑信息
    字段 解析
    album_id 主键。专辑 id
    album_key 全大写字母,用于字母索引
    album 专辑名
    android_metadata:当前字符编码
    字段 解析
    locale 默认字符编码,例如 zh_CN
    artists:艺术家
    字段 解析
    artist_id 主键。艺术家 id
    artist_key 全大写字母,用于字母索引
    artist 艺术家
    audio_genres:流派
    字段 解析
    _id 主键。流派 id
    name 流派名称
    audio_genres_map:音频流派映射
    字段 解析
    _id 主键。映射 id
    audio_id 音频 id
    genre_id 流派 id

    Note: 为何要建立映射表:为了消除数据冗余。假如有大量音频属于同一流派,如果没有映射表则需要每个音频都需要记录同样的流派数据,有了映射表之后则只有一条记录就够了。这符合数据库设计的第三范式(the 3rd normal form)

    audio_meta:音频信息
    字段 解析
    _id 主键。音频 id
    _data 文件绝对路径
    _display_name 文件名
    _size 文件大小,单位 byte
    mime_type 类似于 audio/mpeg 的 MIME 类型
    date_added 添加到数据库的时间,单位秒
    date_modified 文件最后修改时间,单位秒
    title 来自 ID3 信息的标题,无则为不带扩展名的文件名
    title_key 全大写字母的标题
    duration 时长
    artist_id 艺术家 id
    composer 来自 ID3 信息,作曲家
    album_id 专辑 id
    track 来自 ID3 信息,音轨
    year 来自 ID3 信息,年代
    is_ringtone 是否铃声,0 或 1
    is_music 是否音乐,1 才会在音乐播放器显示
    is_alarm 是否闹钟铃声
    is_notification 是否通知铃声
    is_podcast 是否 podcast
    bookmark  
    audio_playlists:播放列表
    字段 解析
    _id 主键。播放列表 id
    _data  
    name 播放列表名
    date_added  
    date_modified  
    audio_playlists_map:音频播放列表映射
    字段 解析
    _id 主键。映射 id
    audio_id 音频 id
    playlist_id 播放列表 id
    play_order 播放顺序

    索引


    在 Android 数据库当中基本上使用自增 id 值作为主键,并建立了索引。索引可以加快数据查找速度,但由于需要维护索引所以插入/删除等写入操作速度会变慢。索引如下:

    1 CREATE INDEX album_id_idx on audio_meta(album_id);
    2 CREATE INDEX album_idx on albums(album);
    3 CREATE INDEX albumkey_index on albums(album_key);
    4 CREATE INDEX artist_id_idx on audio_meta(artist_id);
    5 CREATE INDEX artist_idx on artists(artist);
    6 CREATE INDEX artistkey_index on artists(artist_key);
    7 CREATE INDEX image_bucket_index ON images(bucket_id, datetaken);
    8 CREATE INDEX image_id_index on thumbnails(image_id);
    9 CREATE INDEX sort_index on images(datetaken ASC, _id ASC);
    10 CREATE INDEX title_idx on audio_meta(title);
    11 CREATE INDEX titlekey_index on audio_meta(title_key);
    12 CREATE INDEX video_bucket_index ON video(bucket_id, datetaken);
    13 CREATE INDEX video_id_index on videothumbnails(video_id);

    由于比较简单就不解释了,要深入了解索引可以参考这个关于 SQL Server 的分析MySQL索引背后的数据结构及算法原理,原理应该是差不多的。

    视图

    视图类似于表,但并非独立存在,是从其他表里面查询数据得到的。使用视图可以加快数据库查询速度,不用每次都执行复杂的 SQL 语句查询。图如下所示:


    Note: 如何看视图:图下面的部分是数据来源的表,中间是从表中选取的字段,但类似于 COUNT 等 SQL 查询操作无法在图上体现,最好还是看实际 SQL 语句。

    Note: SQLite 当中视图都是只读的,也就是说不能对视图进行插入、更新、删除等操作。但是可以在视图建立 INSTEAD OF 触发器来达到同样的目的,多媒体数据库当中的

     audio_delete 触发器就是如此。

    触发器


    触发器是为了维护数据库删除操作而建立的,因为所删除的表可能与另外的表有关系,需要同时删除另外一个表的字段。可以看以下一个例子:


    1 CREATE TRIGGER audio_meta_cleanup
    2 DELETE ON audio_meta
    3 BEGIN
    4 DELETE FROM audio_genres_map WHERE audio_id = old._id;
    5 DELETE FROM audio_playlists_map WHERE audio_id = old._id;
    6 END;

    这是关于 audio_meta 表的触发器,意思是当删除此表上的记录时,同时删除 audio_genres_map 表上 audio_id 与此表 id 相同的记录,删除 audio_playlists_map 表上 audio_id 与此表 id 相同的记录。这样当删除 audio_meta 表的记录时,另外两个表的相应记录也会自动删除,不会由于漏删除而残留多余数据。

    3. 如何维护数据库


    插入


    插入、更新主要由 MediaScanner 进行,当删除/移动媒体文件时 MediaScanner 会扫描磁盘并更新数据库。数据插入主要在 endFile() 方法中进行,例如插入音频记录时相关的表都会插入相应的记录。而图片、视频缩略图,专辑封面这几个则是第一次取图片的时候才会生成缩略图保存到磁盘,并把记录插入到数据库中。

    删除


    删除操作主要由触发器维护。例如当一个应用删除图片时,一般只会删除图片数据库,所以必须要有触发器同时删除缩略图数据库。

    删除操作主要由触发器维护。例如当一个应用删除图片时,一般只会删除图片数据库,所以必须要有触发器同时删除缩略图数据库。


    注:转发来自http://www.360doc.com/content/12/0814/19/7724936_230182794.shtml


    展开全文
  • android 多媒体数据库,对数据库表,存储做一个分析。
    主要分为几节:

    1. Android的媒体文件内部是如何存储的?
    2. Andoid的媒体文件如何获取?
    3. 在使用媒体文件的一些小技巧。
    1. Android的多媒体如何存储的?
    Android的多媒体文件主要存储在/data/data/com.android.providers.media/databases目录下,该目录下有两个db文件,一个是内部存储数据库文件(internal.db),一个是存储卡数据库(external-XXXX.db)。媒体文件的操作主要是围绕着这两个数据库来进行。这两个数据库的结构是完全一模一样的。
    我们先看一下这两个数据库包含了哪些表。
    album_art audio search
    album_info audio_genres searchhelpertitle
    albums audio_genres_map thumbnails
    android_metadata audio_meta video
    artist_info audio_playlists videothumbnails
    artists audio_playlists_map
    artists_albums_map images

    先从基本的分析:

    Images表:主要存储images信息。可以看一下这个表的结构:

    CREATE TABLE images (_id INTEGER PRIMARY KEY,_data TEXT,_size INTEGER,_display_name TEXT,mime_type TEXT,title
    TEXT,date_added INTEGER,date_modified INTEGER,description TEXT,picasa_id TEXT,isprivate INTEGER,latitude DOUBL
    E,longitude DOUBLE,datetaken INTEGER,orientation INTEGER,mini_thumb_magic INTEGER,bucket_id TEXT,bucket_displa
    y_name TEXT);
    包含了一些基本信息,其中大家一看就明白了。
    Thumbnails表:这个表和images表是有直接关系的。主要存储图片的缩略图,Android为每一张保存进系统的图片文件都会自动生成一张缩略图文件。关于这一点还有一些特殊的技巧后面再讲。我们可以看一下这个表的结构:
    CREATE TABLE thumbnails (_id INTEGER PRIMARY KEY,_data TEXT,image_id INTEGER,kind INTEGER,width INTEGER,height INTEGER);
    每一张image对应一条thumbnail记录。
    Video表:主要存储视频信息了。和images表类似。表结构如下:
    CREATE TABLE video (_id INTEGER PRIMARY KEY,_data TEXT NOT NULL,_display_name TEXT,_size INTEGER,mime_type TEXT,date_added INTEGER,date_modified INTEGER,title TEXT,duration INTEGER,artist TEXT,album TEXT,resolution TEXT,description TEXT,isprivate INTEGER,tags TEXT,category TEXT,language TEXT,mini_thumb_data TEXT,latitude DOUBLE,longitude DOUBLE,datetaken INTEGER,mini_thumb_magic INTEGER, bucket_id TEXT, bucket_display_name TEXT, bookmark INTEGER);
    Videothumbnails表:存储视频的缩略图信息。这个和thumbnails表类似。
    Audio表:音频信息比视频信息和图片信息要稍微复杂一些,主要是存储了一些专辑(album)、歌手(artists)信息,而专辑和歌手信息是单独的表格存储的,audio其实是一个视图,真正的音频数据信息存储在audio_meta表格中。我们可以看一下audio视图的定义:
    CREATE VIEW audio as SELECT * FROM audio_meta LEFT OUTER JOIN artists ON audio_meta.artist_id=artists.artist_id LEFT OUTER JOIN albums ON audio_meta.album_id=albums.album_id;
    Albums表:主要存储专辑信息。
    Artists表:主要存储歌手信息。不多赘述。
    其他的一些表格我们平时可能用的比较少,就不做描述了,有兴趣可以自行研究一下。
    2. Android的多媒体如何获取?

    Android提供了媒体获取与存储的相关API,主要包含在android.provider.MediaStorepackage中。

    MediaStore.Audio.AlbumColumns

    Columns representing an album

    MediaStore.Audio.ArtistColumns

    Columns representing an artist

    MediaStore.Audio.AudioColumns

    Columns for audio file that show up in multiple tables.

    MediaStore.Audio.GenresColumns

    Columns representing an audio genre

    MediaStore.Audio.PlaylistsColumns

    Columns representing a playlist

    MediaStore.Files.FileColumns

    Fields for master table for all media files.

    MediaStore.Images.ImageColumns

    MediaStore.MediaColumns

    Common fields for most MediaProvider tables

    MediaStore.Video.VideoColumns

    MediaStore

    The Media provider contains meta data for all available media on both internal and external storage devices.

    MediaStore.Audio

    Container for all audio content.

    MediaStore.Audio.Albums

    Contains artists for audio files

    MediaStore.Audio.Artists

    Contains artists for audio files

    MediaStore.Audio.Artists.Albums

    Sub-directory of each artist containing all albums on which a song by the artist appears.

    MediaStore.Audio.Genres

    Contains all genres for audio files

    MediaStore.Audio.Genres.Members

    Sub-directory of each genre containing all members.

    MediaStore.Audio.Media

    MediaStore.Audio.Playlists

    Contains playlists for audio files

    MediaStore.Audio.Playlists.Members

    Sub-directory of each playlist containing all members.

    MediaStore.Files

    Media provider table containing an index of all files in the media storage, including non-media files.

    MediaStore.Images

    Contains meta data for all available images.

    MediaStore.Images.Media

    MediaStore.Images.Thumbnails

    This class allows developers to query and get two kinds of thumbnails: MINI_KIND: 512 x 384 thumbnail MICRO_KIND: 96 x 96 thumbnail

    MediaStore.Video

    MediaStore.Video.Media

    MediaStore.Video.Thumbnails

    This class allows developers to query and get two kinds of thumbnails: MINI_KIND: 512 x 384 thumbnail MICRO_KIND: 96 x 96 thumbnail

    简单的观察一下,发现这些类也就是对数据库中的一些表的封装,弄懂了底层的存储结构,对于了解这些类的作用就很容易了。

    Android系统中的每一种媒体文件有两种地址描述方式。

    第一种模式,大家知道,在Android中,Content Provider是用来存储和获取公共数据的统一接口,Content Provider为每一类资源分配了URI地址,比如图片的地址就包括

    MediaStore.Images.Media.INTERNAL_CONTENT_URI和MediaStore.Images.Media.EXTERNAL_CONTENT_URI两个基础地址,其值分别是

    content://media/internal/images/media和content://media/external/images/media,对应内部库和外部库地址。每一张图片的地址基本上是上面的基础URL地址下加上图片的

    内部ID。打个比方一张存储卡上的图片ID为2,其对应的Uri地址就是content://media/external/images/media/2.知道了这个地址,基本上就可以操作这张图片的所有信息了。

    另外一种描述文件地址标识就是传统的文件路径模式了,比如一张存储卡上的图片地址可能描述为:/mnt/sdcard/images/1.jpg。其实这个路径存储在images表格中的data字

    段中,有了这点关联,我们可以在这两种模式下进行任意切换。

    前一种模式下,主要通过MediaStore.Images.Media、MediaStore.Audio.Media、MediaStore.Video.Media三个库中的query方法来查询或者获取特定条件的媒体了。

    基本用法1:从一个Content Uri地址中生成Bitmap

    可以采用android.provider.MediaStore.Images.Media.getBitmap(ContentResolver cr, Uri url)方法,其中ContentResolver是应用与资源之间的衔接人,它的示例通常可以通过

    在Activity中调用的getContentResolver()方法中获取。Uri地址就是上面描述的content://media/external/images/media/2类似地址,也就是Content Provider定义的地址形式。

    基本用法2:从一个传统地址中生成Bitmap

    有时候我们只知道一张图片的路径,并不知道图片的内部地址,想去获取该图片,可以采用android.graphics.BitmapFactory中的decodeXXX方法来搞定,比如decodeFile方法

    就是从文件路径中读取图片,原图片可以支持jpg,png,gif,bmp等各种格式。decodeByteArray就是从字节流中解码了。最后都是转换成Bitmap格式。

    基本用法3:获取一张图片的缩略图

    有时候我们需要显示图片的缩略图,可以采用android.provider.MediaStore.Images.Thumbnails的getThumbnail方法。另外其实也可以采用bitmap的compress的方法对图片

    进行一些压缩处理。


    转载来自:http://www.360doc.com/content/15/1010/09/22991113_504585902.shtml

    展开全文
  • Android 多媒体数据库

    2012-09-28 10:51:38
    MediaStore这个类是android系统提供的一个多媒体数据库,android中多媒体信息都可以从这里提取。这个MediaStore包括了多媒体数据库的所有信息,包括音频,视频和图像,android把所有的多媒体数据库接口进行了封装,...
  • 研究生课程,多媒体数据库方面的资源,属于计算机多媒体方面的内容
  • 在建模语言Apla中实现多媒体数据库应用的方法研究
  • android多媒体数据库

    2017-05-06 10:57:07
    前面学习了两篇大牛的多媒体数据库分析,觉得这里应该添加上一些基本操作方式,以前自己学习使用的时候没有做一个记录,这里为了让成一个系统,找到一篇相关文章,予以记录。 数据库的基本操作方式分析: MediaStore...
  • 多媒体数据库(M如IDB, Multimedia Database)是多媒体技术与产生的一种新型数据库。是指数据库中的信息不仅、字符等格式化的表达形式,而且还包括多媒体的非格,数据管理要涉及各种复杂对象的处理。多媒体数据库的...
  • Android的多媒体数据库

    千次阅读 2014-07-20 14:38:59
    这个MediaStore包括了多媒体数据库的所有信息,包括音频,视频和图像,android把所有的多媒体数据库接口进行了封装,所有的数据库不用自己进行创建, 直接调用利用ContentResolver去掉用那些封装好的接口就可以进行...
  • 这是关于云南大学多媒体数据库的实验报告,实验1熟悉实验环境
  • 多媒体数据库与网络应用》,老师推荐的数据库参考书,没事时看看,应该会有收获。
  • 新华社多媒体数据库底层采用TRS 和Oracle 协同工作的解决方式,由TRS 完成千万级数据的索引检索服务,由Oracle 完成信息制作流程,检索方式分为本地联机检索和远程网络检索两种方式,可进行精确检索、模糊检索、全文...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 3,945
精华内容 1,578
关键字:

多媒体数据库