您的位置:首页 > 其它

Andorid 抽取视频/音频包含的标题、格式、艺术家等信息

2014-05-03 19:30 288 查看

Andorid 抽取视频/音频包含的标题、格式、艺术家等信息

android.media.MediaMetadataRetriever是Andorid内部的用于抽取视频/音频包含的标题、格式、艺术家等信息工具类.

//示例

MediaMetadataRetriever retriever = new MediaMetadataRetriever(); retriever.setMode(MediaMetadataRetriever.MODE_GET_METADATA_ONLY);

//时长

String duration = retriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_DURATION);

//艺术家

String artist = retriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_ARTIST);

//标题 String title = retriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_TITLE);

------------其它可以抽取的信息---------

public static final int METADATA_KEY_CD_TRACK_NUMBER = 0;

public static final int METADATA_KEY_ALBUM           = 1;

public static final int METADATA_KEY_ARTIST          = 2;

public static final int METADATA_KEY_AUTHOR          = 3;

public static final int METADATA_KEY_COMPOSER        = 4;

public static final int METADATA_KEY_DATE            = 5;

public static final int METADATA_KEY_GENRE           = 6;

public static final int METADATA_KEY_TITLE           = 7;

public static final int METADATA_KEY_YEAR            = 8;

public static final int METADATA_KEY_DURATION        = 9;

public static final int METADATA_KEY_NUM_TRACKS      = 10;

public static final int METADATA_KEY_IS_DRM_CRIPPLED = 11;

public static final int METADATA_KEY_CODEC           = 12;

public static final int METADATA_KEY_RATING          = 13;

public static final int METADATA_KEY_COMMENT         = 14;

public static final int METADATA_KEY_COPYRIGHT       = 15;

public static final int METADATA_KEY_BIT_RATE        = 16;

public static final int METADATA_KEY_FRAME_RATE      = 17;

public static final int METADATA_KEY_VIDEO_FORMAT    = 18;

public static final int METADATA_KEY_VIDEO_HEIGHT    = 19;

public static final int METADATA_KEY_VIDEO_WIDTH     = 20;

public static final int METADATA_KEY_WRITER          = 21; 

1、Video

对于视频,取第一帧作为缩略图,也就是怎样从filePath得到一个Bitmap对象。

private Bitmap createVideoThumbnail(String filePath) {

Bitmap bitmap = null;

MediaMetadataRetriever retriever = new MediaMetadataRetriever();

try {

retriever.setMode(MediaMetadataRetriever.MODE_CAPTURE_FRAME_ONLY);

retriever.setDataSource(filePath);

bitmap = retriever.captureFrame();

} catch(IllegalArgumentException ex) {

// Assume this is a corrupt video file

} catch (RuntimeException ex) {

// Assume this is a corrupt video file.

} finally {

try {

retriever.release();

} catch (RuntimeException ex) {

// Ignore failures while cleaning up.

}

}

return bitmap;

}

复制代码

Android提供了MediaMetadataRetriever,由JNI(media_jni)实现。

看得出MediaMetadataRetriever主要有两个功能:MODE_GET_METADATA_ONLY和MODE_CAPTURE_FRAME_ONLY

这里设mode为MODE_CAPTURE_FRAME_ONLY,调用captureFrame取得一帧。

另外还有两个方法可以用:

extractMetadata 提取文件信息,ARTIST、DATE、YEAR、DURATION、RATING、FRAME_RATE、VIDEO_FORMAT

和extractAlbumArt 提取专辑信息,这个下面的音乐文件可以用到。

2、Music

对于音乐,取得AlbumImage作为缩略图,还是用MediaMetadataRetriever

private Bitmap createAlbumThumbnail(String filePath) {

Bitmap bitmap = null;

MediaMetadataRetriever retriever = new MediaMetadataRetriever();

try {

retriever.setMode(MediaMetadataRetriever.MODE_GET_METADATA_ONLY);

retriever.setDataSource(filePath);

byte[] art = retriever.extractAlbumArt();

bitmap = BitmapFactory.decodeByteArray(art, 0, art.length);

} catch(IllegalArgumentException ex) {

} catch (RuntimeException ex) {

} finally {

try {

retriever.release();

} catch (RuntimeException ex) {

// Ignore failures while cleaning up.

}

}

return bitmap;

}

复制代码

retriever.extractAlbumArt()得到的是byte数组,还需要一步用BitmapFactory编码得到Bitmap对象。

3、Image

图片就很简单了

Bitmap bm = null;

Options op = new Options();

op.inSampleSize = inSampleSize;

op.inJustDecodeBounds = false;

bm = BitmapFactory.decodeFile(mFile.getPath(), op);

复制代码

能直接得到Bitmap对象,把图片缩小到合适大小就OK。

同样上面的Video和Music,retrive到Bitmap后也需要缩小处理。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: