`
夏文权
  • 浏览: 243031 次
  • 性别: Icon_minigender_1
  • 来自: 贵州
社区版块
存档分类
最新评论

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;




二种方式:读取媒体文件数据库:
创建工具包:com.sky_dreaming.tools.media.provider
编写媒体信息封装类:MediaInfo.java
package com.sky_dreaming.tools.media.provider;

import java.io.UnsupportedEncodingException;

import android.graphics.Bitmap;

/**
* Media info beans
*
*
*/
public class MediaInfo {


        /**
         * play total time
         */
        private int playDuration = 0;
       
        /**
         * song name
         */
        private String mediaName = "";

        /**
         * album name
         */
        private String mediaAlbum = "";
       
        /**
         * artist name
         */
        private String mediaArtist = "";

        /**
         * mYear
         */
        private String mediaYear = "";

        /**
         * fileName
         */
        private String mFileName = "";
       
        /**
         * mFileType
         */
        private String mFileType = "";

        /**
         * mFileSize
         */
        private String mFileSize = "";

        /**
         * mFilePath
         */
        private String mFilePath = "";
       
       
        public Bitmap getmBitmap() {
                return mBitmap;
        }

        public void setmBitmap(Bitmap mBitmap) {
                this.mBitmap = mBitmap;
        }

        private Bitmap mBitmap = null;

        /**
         * getPlayDuration
         *
         * @return
         */
        public int getPlayDuration() {
                return playDuration;
        }

        /**
         * setPlayDuration
         *
         * @param playDuration
         */
        public void setPlayDuration(int playDuration) {
                this.playDuration = playDuration;
        }

        /**
         * getMediaName
         *
         * @param playDuration
         */
        public String getMediaName() {
                return mediaName;
        }

        /**
         * setMediaName
         *
         * @param playDuration
         */
        public void setMediaName(String mediaName) {
                try {
                        mediaName =new String (mediaName.getBytes("ISO-8859-1"),"GBK");
                } catch (UnsupportedEncodingException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                }
                this.mediaName = mediaName;
        }

        /**
         * getMediaAlbum
         *
         * @param playDuration
         */
        public String getMediaAlbum() {
                return mediaAlbum;
        }

        /**
         * setMediaAlbum
         *
         * @param playDuration
         */
        public void setMediaAlbum(String mediaAlbum) {
                try {
                        mediaAlbum =new String (mediaAlbum.getBytes("ISO-8859-1"),"GBK");
                } catch (UnsupportedEncodingException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                }
                this.mediaAlbum = mediaAlbum;
        }

        /**
         * getMediaArtist
         *
         * @param playDuration
         */
        public String getMediaArtist() {
                return mediaArtist;
        }

        /**
         * setMediaArtist
         *
         * @param playDuration
         */
        public void setMediaArtist(String mediaArtist) {
                try {
                        mediaArtist =new String (mediaArtist.getBytes("ISO-8859-1"),"GBK");
                } catch (UnsupportedEncodingException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                }
                this.mediaArtist = mediaArtist;
        }

        /**
         * getMediaYear
         *
         * @param playDuration
         */
        public String getMediaYear() {
                return mediaYear;
        }

        /**
         * setMediaYear
         *
         * @param playDuration
         */
        public void setMediaYear(String mediaYear) {
                this.mediaYear = mediaYear;
        }

        /**
         * getmFileName
         *
         * @param playDuration
         */
        public String getmFileName() {
                return mFileName;
        }

        /**
         * setmFileName
         *
         * @param playDuration
         */
        public void setmFileName(String mFileName) {
                this.mFileName = mFileName;
        }

        /**
         * getmFileType
         *
         * @param playDuration
         */
        public String getmFileType() {
                return mFileType;
        }

        /**
         * setmFileType
         *
         * @param playDuration
         */
        public void setmFileType(String mFileType) {
                this.mFileType = mFileType;
        }

        /**
         * getmFileSize
         *
         * @param playDuration
         */
        public String getmFileSize() {
                return mFileSize;
        }

        /**
         * setmFileSize
         *
         * @param playDuration
         */
        public void setmFileSize(String mFileSize) {
                this.mFileSize = mFileSize;
        }

        /**
         * getmFilePath
         *
         * @param playDuration
         */
        public String getmFilePath() {
                return mFilePath;
        }

        /**
         * setmFilePath
         *
         * @param playDuration
         */
        public void setmFilePath(String mFilePath) {
                this.mFilePath = mFilePath;
        }

}
编写数据提供工具类:MediaInfoProvider
package com.sky_dreaming.tools.media.provider;

import java.io.File;

import android.content.Context;
import android.database.Cursor;
import android.net.Uri;
import android.provider.MediaStore;
import android.provider.MediaStore.MediaColumns;
import android.util.Log;
import android.widget.Toast;

/**
* tools to get media file info
*
*
*/
public class MediaInfoProvider {

        /**
         * context
         */
        private Context mContext = null;

        /**
         * data path
         */
        private static final String dataPath = "/mnt";
       
        /**
         * query column
         */
        private static final String[] mCursorCols = new String[] {
                        MediaStore.Audio.Media._ID, MediaStore.Audio.Media.DISPLAY_NAME,
                        MediaStore.Audio.Media.TITLE, MediaStore.Audio.Media.DURATION,
                        MediaStore.Audio.Media.ARTIST, MediaStore.Audio.Media.ALBUM,
                        MediaStore.Audio.Media.YEAR, MediaStore.Audio.Media.MIME_TYPE,
                        MediaStore.Audio.Media.SIZE, MediaStore.Audio.Media.DATA };

        /**
         * MediaInfoProvider
         * @param context
         */
        public MediaInfoProvider(Context context) {
                this.mContext = context;
        }

        /**
         * get the media file info by path
         * @param filePath
         * @return
         */
        public MediaInfo getMediaInfo(String filePath) {

                /* check a exit file */
                File file = new File(filePath);
                if (file.exists()) {
                        Toast.makeText(mContext, "sorry, the file is not exit!",
                                        Toast.LENGTH_SHORT);
                }
               
                /* create the query URI, where, selectionArgs */
                Uri Media_URI = null;
                String where = null;
                String selectionArgs[] = null;
               
                if (filePath.startsWith("content://media/")) {
                        /* content type path */
                        Media_URI = Uri.parse(filePath);
                        where = null;
                        selectionArgs = null;
                } else {
                        /* external file path */
                        if(filePath.indexOf(dataPath) < 0) {
                                filePath = dataPath + filePath;
                        }
                        Media_URI = MediaStore.Audio.Media.EXTERNAL_CONTENT_URI;
                        where = MediaColumns.DATA + "=?";
                        selectionArgs = new String[] { filePath };
                }
               
                /* query */
                Cursor cursor = mContext.getContentResolver().query(Media_URI,
                                mCursorCols, where, selectionArgs, null);
                if (cursor == null || cursor.getCount() == 0) {
                        return null;
                } else {
                        cursor.moveToFirst();
                        MediaInfo info = getInfoFromCursor(cursor);
                        printInfo(info);
                        return info;
                }
        }

        /**
         * get the media info beans from cursor
         * @param cursor
         * @return
         */
        private MediaInfo getInfoFromCursor(Cursor cursor) {
                MediaInfo info = new MediaInfo();
               
                /* file name */
                if(cursor.getString(1) != null) {
                        info.setmFileName(cursor.getString(1));
                }
                /* media name */
                if(cursor.getString(2) != null) {
                        info.setMediaName(cursor.getString(2));
                }
                /* play duration */
                if(cursor.getString(3) != null) {
                        info.setPlayDuration(cursor.getInt(3));
                }
                /* artist */
                if(cursor.getString(4) != null) {
                        info.setMediaArtist(cursor.getString(4));
                }
                /* album */
                if(cursor.getString(5) != null) {
                        info.setMediaAlbum(cursor.getString(5));
                }
                /* media year */
                if (cursor.getString(6) != null) {
                        info.setMediaYear(cursor.getString(6));
                } else {
                        info.setMediaYear("undefine");
                }
                /* media type */
                if(cursor.getString(7) != null) {
                        info.setmFileType(cursor.getString(7).trim());
                }
                /* media size */
                if (cursor.getString(8) != null) {
                        float temp = cursor.getInt(8) / 1024f / 1024f;
                        String sizeStr = (temp + "").substring(0, 4);
                        info.setmFileSize(sizeStr + "M");
                } else {
                        info.setmFileSize("undefine");
                }
                /* media file path */
                if (cursor.getString(9) != null) {
                        info.setmFilePath(cursor.getString(9));
                }

                return info;
        }
       
        /**
         * print media info
         * @param info
         */
        private void printInfo(MediaInfo info) {
                // TODO Auto-generated method stub
                Log.i("playDuration","" + info.getPlayDuration());
                Log.i("mediaName","" + info.getMediaName());
                Log.i("mediaAlbum","" + info.getMediaAlbum());
                Log.i("mediaArtist","" + info.getMediaArtist());
                Log.i("mediaYear","" + info.getMediaYear());
                Log.i("fileName","" + info.getmFileName());
                Log.i("fileType","" + info.getmFileType());
                Log.i("fileSize","" + info.getmFileSize());
                Log.i("filePath","" + info.getmFilePath());
        }
}
可以避免乱码 
分享到:
评论

相关推荐

    传智播客_Andorid_20天精通Android开发视频_第14天视频_视频_15_MediaPlayer播放网络音频

    传智播客_Andorid_20天精通Android开发视频_第14天视频_视频_15_MediaPlayer播放网络音频.avi

    音频与视频合并,多个视频合并,单个视频编辑完整demo

    首先,需要配置`AudioRecord`,包括采样率、通道数、音频格式等。然后,启动录音,读取音频数据,并将其保存到文件。Android还提供了`MediaRecorder`类,它提供了一种更简单的录音方式,但在这个DEMO中可能更侧重于...

    传智播客_Andorid_Android基础视频video_第一天修

    【标题】"传智播客_Andorid_Android基础视频video_第一天修"指的是一个由传智播客教育机构推出的Android基础知识教学视频课程的第一部分。这个系列可能旨在帮助初学者或者对Android编程有一定兴趣的人建立坚实的...

    传智播客_Andorid_Android项目手机卫士视频video_day09视频

    在本资源中,“传智播客_Andorid_Android项目手机卫士视频video_day09视频.rar”是一个针对Android开发的教程,特别是关于构建“手机卫士”项目的第九天教学内容。这个压缩包可能包含了多个视频文件,这些文件通常会...

    传智播客_Andorid_20天精通Android开发视频_第12天视频_视频_07_bindservice开启服务

    传智播客_Andorid_20天精通Android开发视频_第12天视频_视频_07_bindservice开启服务.avi

    传智播客_Andorid_Android基础视频video_下载必看

    传智播客_Andorid_Android基础视频video_下载必看.doc

    andorid下从相册选取/拍照选取一张相片并剪切

    这个过程涉及到多个关键步骤,包括请求权限、启动相机应用、读取相册、显示图片以及执行裁剪操作。下面我们将详细探讨这些知识点。 1. **权限管理**: 在Android 6.0(API级别23)及更高版本,系统实行了运行时...

    传智播客_Andorid_Android项目手机卫士视频video_day07视频

    在本课程"传智播客_Andorid_Android项目手机卫士视频video_day07"中,我们将深入探讨Android应用程序开发的关键技术,特别是在构建类似“手机卫士”这样的实用工具应用时所需的知识点。该课程可能包括多个视频教程,...

    传智播客_Andorid_JNI视频_day01视频

    JNI在Android中的应用广泛,包括性能优化、调用C/C++库、访问硬件设备以及实现某些特定功能等。"传智播客_Andorid_JNI视频_day01视频"很可能是对这一主题的初级教程,旨在帮助开发者入门JNI编程。 JNI的核心是提供...

    ffmpeg 视频解析 for andorid

    FFmpeg 是一个强大的开源命令行工具,用于处理各种多媒体文件,包括视频、音频、图片等。在Android平台上,FFmpeg可以被集成到应用程序中,实现视频的解析、转码、剪辑等多种功能。本篇文章将深入探讨如何在Android...

    andorid完整天气源码

    1. **布局设计**:XML布局文件描述了各个界面元素的位置和样式,可能包括主页面、详细信息页、设置页等。 2. **自定义控件**:为了实现独特效果,源码可能包含了自定义View或自定义Adapter,如天气图标、滑动刷新...

    传智播客_Andorid_智慧北京视频_Day05视频

    "传智播客_Andorid_智慧北京视频_Day05视频" 这个标题表明这是一个关于Android开发的教育课程,由知名的IT培训机构“传智播客”提供。主题是“智慧北京”,可能涉及到如何利用Android技术为北京的城市智能化服务。...

    传智播客_Andorid_20天精通Android开发视频_第10天视频

    在本课程"传智播客_Andorid_20天精通Android开发视频_第10天视频"中,我们深入探讨了Android应用开发的核心概念和技术。这个压缩包包含的资源是第10天的视频教程,是整个学习路径中的一个重要阶段。通过这天的学习,...

    andorid 组件开发一

    Intent分为显式Intent和隐式Intent,前者指定要启动的Activity,后者则基于Action、Category等信息匹配能处理请求的Activity。 Service是运行在后台的组件,不提供用户界面,可以长时间执行任务。服务有两种启动...

    传智播客_Andorid_智慧北京视频_Day06视频

    "传智播客_Andorid_智慧北京视频_Day06视频.zip" 描述部分提供了文件格式信息,这是一个ZIP压缩包,里面包含的是“Day06视频”。这通常意味着这些视频是连续教学的一部分,存储在一个压缩文件中以便于下载和管理。...

Global site tag (gtag.js) - Google Analytics