zoukankan      html  css  js  c++  java
  • Android视频处理 --处理视频第一帧缩略图

    从API 8开始,新增了一个类:

    android.media.ThumbnailUtils这个类提供了3个静态方法一个用来获取视频第一帧得到的Bitmap,2个对图片进行缩略处理。

    1
    public static Bitmap createVideoThumbnail (String filePath, int kind)

    第一个参数是视频文件的路径,第二个参数是指定图片的大小,有两种选择Thumbnails.MINI_KIND与Thumbnails.MICRO_KIND。

    第一种文档上说大小是512 x 384 ,我用一个MP4格式文件测试得到544 x 960,用一个wmv格式文件测试得到160 x 120。明显不靠谱。第二种参数两种格式文件得到的大小都是 96 x 96,这个才是缩略图。

    1
    2
    extractThumbnail(Bitmap source, int width, int height, int options)
    extractThumbnail(Bitmap source, int width, int height)

    这两种方法都是用来处理Bitmap的大小的,第一个参数是要处理的Bitmap,第二个参数是处理后宽度,第三个是高度,第四个参数options,如果options定义为OPTIONS_RECYCLE_INPUT,则回收资源。也就是说可以用第三种方法把截取到的视频第一帧的Bitmap转成任意想要的大小,第三个方法还可以获取内存卡内图片的缩略图。

    1
    2
    Bitmap bitmap = ThumbnailUtils.createVideoThumbnail(path1, Thumbnails.MINI_KIND); 
    bitmap = ThumbnailUtils.extractThumbnail(bitmap, 210, 210);

    从API 10开始新增一类MediaMetadataRetriever可以用来获取媒体文件的信息

    复制代码

    1
    2
    3
    4
    5
    6
    7
    MediaMetadataRetriever mmr = new MediaMetadataRetriever(); 
    mmr.setDataSource(/sdcard/33.mp4); 
    Bitmap bitmap = mmr.getFrameAtTime(); 
    image.setImageBitmap(bitmap); 
    System.out.println(mmr.extractMetadata(MediaMetadataRetriever.METADATA_KEY_DATE)+); 
    System.out.println(mmr.extractMetadata(MediaMetadataRetriever.METADATA_KEY_MIMETYPE)+); 
    mmr.release();

    复制代码

    MediaMetadataRetriever可以获取视频任何一帧的缩略图。

    复制代码

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    public static Bitmap createVideoThumbnail(String filePath) { 
        // MediaMetadataRetriever is available on API Level 8 
        // but is hidden until API Level 10 
        Class<!--?--> clazz = null
        Object instance = null
        try
            clazz = Class.forName(android.media.MediaMetadataRetriever); 
            instance = clazz.newInstance(); 
       
            Method method = clazz.getMethod(setDataSource, String.class); 
            method.invoke(instance, filePath); 
       
            // The method name changes between API Level 9 and 10. 
            if (Build.VERSION.SDK_INT <= 9) { 
                return (Bitmap) clazz.getMethod(captureFrame).invoke(instance); 
            } else
                byte[] data = (byte[]) clazz.getMethod(getEmbeddedPicture).invoke(instance); 
                if (data != null) { 
                    Bitmap bitmap = BitmapFactory.decodeByteArray(data, 0, data.length); 
                    if (bitmap != null) return bitmap; 
                
                return (Bitmap) clazz.getMethod(getFrameAtTime).invoke(instance); 
            
        } catch (IllegalArgumentException ex) { 
            // Assume this is a corrupt video file 
        } catch (RuntimeException ex) { 
            // Assume this is a corrupt video file. 
        } catch (InstantiationException e) { 
            Log.e(TAG, createVideoThumbnail, e); 
        } catch (InvocationTargetException e) { 
            Log.e(TAG, createVideoThumbnail, e); 
        } catch (ClassNotFoundException e) { 
            Log.e(TAG, createVideoThumbnail, e); 
        } catch (NoSuchMethodException e) { 
            Log.e(TAG, createVideoThumbnail, e); 
        } catch (IllegalAccessException e) { 
            Log.e(TAG, createVideoThumbnail, e); 
        } finally
            try
                if (instance != null) { 
                    clazz.getMethod(release).invoke(instance); 
                
            } catch (Exception ignored) { 
            
        
        return null
    }

    推推族,免费得门票,游景区:www.tuituizu.com

    结伴旅游,一个免费的交友网站:www.jieberu.com

  • 相关阅读:
    读《构建之法》第一,二,十六章的奇思妙想
    四则运算
    鉴权
    sql注入
    【信息安全作业5】散列函数的应用及其安全性
    结对作业 -GUI四则运算
    阅读《构建之法》四章、十七章
    2016012064+小学四则运算练习软件项目报告
    简单四则运算一
    梦想开花的地方
  • 原文地址:https://www.cnblogs.com/rabbit-bunny/p/4226935.html
Copyright © 2011-2022 走看看