zoukankan      html  css  js  c++  java
  • Android开发 获取视频中的信息(例如预览图或视频时长) MediaMetadataRetriever媒体元数据检索器

    前言

      在Android里获取视频的信息主要依靠MediaMetadataRetriever实现

    获取最佳视频预览图

    所谓的最佳就是MediaMetadataRetriever自己计算的

        /**
         * 获取视频缩略图
         * @param vedioFile
         * @return
         */
        public static Bitmap getVedioThumbnail(File vedioFile){
            if (!vedioFile.exists()){
                L.e("视频文件不存在");
                return null;
            }
    
            MediaMetadataRetriever retriever = new MediaMetadataRetriever();
            retriever.setDataSource(vedioFile.getAbsolutePath());
            Bitmap bitmap = retriever.getFrameAtTime();
            return bitmap;
    
        }

    如果你的视频文件是在assets文件里

    AssetFileDescriptor adf = context.getAssets().openFd(vedioFile.getAbsolutePath());//如果是app assets目录的视频文件
    retriever.setDataSource(adf.getFileDescriptor());

    获取指定时间位置的视频预览图

    /**
         * 获取视频缩略图
         * @param vedioFile
         * @return
         */
        public static Bitmap getVedioThumbnail(File vedioFile){
            if (!vedioFile.exists()){
                L.e("视频文件不存在");
                return null;
            }
    
            MediaMetadataRetriever retriever = new MediaMetadataRetriever();
            retriever.setDataSource(vedioFile.getAbsolutePath());
            Bitmap bitmap = retriever.getFrameAtTime(1000);//参数为毫秒,就是返回靠近这个时间的帧图
            return bitmap;
    
        }

    获取视频播放时长

        /**
         * 返回视频播放总时长
         * @param vedioFile
         * @return
         */
        public static Long getVedioTotalTime(File vedioFile){
            if (!vedioFile.exists()){
                L.e("视频文件不存在");
                return null;
            }
            MediaMetadataRetriever retriever = new MediaMetadataRetriever();
            retriever.setDataSource(vedioFile.getAbsolutePath());
            String timeString =  retriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_DURATION);
            Long time = Long.valueOf(timeString);
            return time;
    
        }

    获取其他信息参考表

        / **
        *元数据键,用于检索描述的数字字符串
        *原始录音中音频数据源的顺序。
        * /
        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;
        / **
        用于检索音轨数量的元数据键,例如音频,视频,文本,在数据源中,如mp4或3gpp文件。
        * /
        public static final int METADATA_KEY_NUM_TRACKS = 10;
        / **
        用于检索作者信息的元数据键(例如词作者)的数据源。
        * /
        public static final int METADATA_KEY_WRITER = 11;
        / **
        *于检索数据源的mime类型的元数据键。一些
        示例mime类型包括:“video / mp4”,“audio / mp4”,“audio / amr-wb”,等
        * /
        public static final int METADATA_KEY_MIMETYPE = 12;
        / **
        元数据键,用于检索有关表演者的信息
        与数据源关联的艺术家。
        * /
        public static final int METADATA_KEY_ALBUMARTIST = 13;
        / **
        元数据键,用于检索描述哪个的数字字符串
        音频数据源来自的一部分。
        * /
        public static final int METADATA_KEY_DISC_NUMBER = 14;
        / **
        用于检索音乐专辑编辑状态的元数据键。
        * /
        public static final int METADATA_KEY_COMPILATION = 15;
        / **
        *如果此密钥存在,则媒体包含音频内容。
        * /
        public static final int METADATA_KEY_HAS_AUDIO = 16;
        / **
        如果此密钥存在,则媒体包含视频内容。
        * /
        public static final int METADATA_KEY_HAS_VIDEO = 17;
        / **
        如果媒体包含视频,此密钥将检索其宽度。
        * /
        public static final int METADATA_KEY_VIDEO_WIDTH = 18;
        / **
        如果媒体包含视频,此密钥将检索其高度。
        * /
        public static final int METADATA_KEY_VIDEO_HEIGHT = 19;
        / **
        *此密钥检索平均比特率(以位/秒为单位)(如果可用)。
        * /
        public static final int METADATA_KEY_BITRATE = 20;
        / **
        此键检索文本轨道的语言代码(如果有)。如果存在多个文本轨迹,则返回值将如下所示:
        * /
        public static final int METADATA_KEY_TIMED_TEXT_LANGUAGES = 21;
        / **
        如果此密钥存在,则媒体受到保护。
        * /
        public static final int METADATA_KEY_IS_DRM = 22;
        / **
        此密钥检索位置信息(如果有)。
        位置应根据ISO-6709标准指定一个mp4 / 3gp的盒子“@xyz”。经度为-90度和纬度的位置
        例如,180度的将被检索为“-90.0000 + 180.0000”。
        * /
        public static final int METADATA_KEY_LOCATION = 23;
        / **
        此键以度为单位检索视频旋转角度(如果可用)。
        视频旋转角度可以是0度,90度,180度或270度。
        * /
        public static final int METADATA_KEY_VIDEO_ROTATION = 24;
        / **
        *此键检索原始捕获帧速率(如果是)可用。捕获帧率将是一个浮点号码。
        * /
        public static final int METADATA_KEY_CAPTURE_FRAMERATE = 25;
        / **
        如果此键存在,则媒体包含静止图像内容。
        * /
        public static final int METADATA_KEY_HAS_IMAGE = 26;
        / **
        *如果媒体包含静止图像,则此密钥将检索该编号静止图像。
        * /
        public static final int METADATA_KEY_IMAGE_COUNT = 27;
        / **
        *如果媒体包含静止图像,则此键将检索图像主图像的索引。
        * /
        public static final int METADATA_KEY_IMAGE_PRIMARY = 28;
        / **
        *如果媒体包含静止图像,则此键检索宽度主图像。
        * /
        public static final int METADATA_KEY_IMAGE_WIDTH = 29;
        / **
        *如果媒体包含静止图像,此键将检索高度主图像。
        * /
        public static final int METADATA_KEY_IMAGE_HEIGHT = 30;
        / **
        *如果媒体包含静止图像,则此键将检索旋转主图像的角度(顺时针方向)。图像旋转角度必须是0度,90度,180度或270度之一。
        * /
        public static final int METADATA_KEY_IMAGE_ROTATION = 31;
        / **
        *如果媒体包含视频且此密钥存在,则会检索视频序列中的总帧数。
        * /
        public static final int METADATA_KEY_VIDEO_FRAME_COUNT = 32;
  • 相关阅读:
    python大战机器学习——聚类和EM算法
    python大战机器学习——数据降维
    机器学习(西瓜书)——绪论
    算法设计与分析-HomeWork
    SocLib的安装
    CSS的IE6、IE7、FF兼容性写法
    CSS content内容生成技术以及应用
    js javascript:void(0) 真正含义
    Google Chrome七大新特性
    CSS中文字体对照表
  • 原文地址:https://www.cnblogs.com/guanxinjing/p/11057994.html
Copyright © 2011-2022 走看看