MediaMetadataRetriever类 取得媒体文件信息

本文介绍了如何使用MediaMetadataRetriever类从音频文件中提取元数据,如标题、专辑、艺术家等信息,并展示了如何从视频文件中获取指定时间点的缩略图。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

MediaMetadataRetriever类 取得媒体文件信息

MediaMetadataRetriever类提供了一个统一的接口用于从一个输入媒体文件中取得帧和元数据

//从一个音乐中取得部分媒体信息

MediaMetadataRetriever mmr=new MediaMetadataRetriever();
String str=getExternalStorageDirectory()+"music/hetangyuese.mp3";
try{
    mmr.setDataSource(str);
    String title=mmr.extractMetadata(MediaMetadataRetriever.METADATA_KEY_TITLE);  //荷塘月色
    String album=mr.extractMetadata(MediaMetadataRetriever.METADATA_KEY_ALBUM);   //我从草原来
    String mime = mmr.extractMetadata(MediaMetadataRetriever.METADATA_KEY_MIMETYPE);  //audio/mpeg
    String artist = mmr.extractMetadata(MediaMetadataRetriever.METADATA_KEY_ARTIST);  //凤凰传奇
    String duration = mmr.extractMetadata(MediaMetadataRetriever.METADATA_KEY_DURATION);  //9172
    String bitrate = mmr.extractMetadata(MediaMetadataRetriever.METADATA_KEY_BITRATE);  //128000  
    // 从api level 14才有,即从ICS4.0才有此功能  
    String date = mmr.extractMetadata(MediaMetadataRetriever.METADATA_KEY_DATE);   //null

    //如果是视频文件,还可以通过getFrameAtTime()方法取得制定time位置的Bitmap,即可以实现抓图(包括缩略图)功能。
    }catch(){

    }

//2.2之后获得缩略图就简单了 因为用了ThumbnailUtils类
Bitmap b= ThumbnailUtils.createVideoThumbnail(path,Video.Thumbnails.MICRO_KING);
ImageView iv=new ImageView(this);

//获取视频的缩略图

public static Bitmap craeateVideoThumbnailBitmap(String filePath,FileDescriptor fd,int targetWidth){

    Bitmap bitmap=null;
    MediaMetadataRetriever retriever = new MediaMetadataRetriever();
    try {
        if (filePath != null) {
          retriever.setDataSource(filePath);
        } else {
          retriever.setDataSource(fd);
        }
        bitmap = retriever.getFrameAtTime(-1);   //获取的是图片    要获取视频的话,直接设置相应的帧数
     } 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.
          }
     }
     if (bitmap == null) 
        return null;
    int width = bitmap.getWidth();
    int height = bitmap.getHeight();
    if (width > targetWidth) {
        float scale = (float) targetWidth / width;
        int w = Math.round(scale * width);
        int h = Math.round(scale * height);
        bitmap = Bitmap.createScaledBitmap(bitmap, w, h, true);
    }
    return bitmap;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值