码迷,mamicode.com
首页 > 其他好文 > 详细

获取视频的帧

时间:2015-07-01 10:23:25      阅读:114      评论:0      收藏:0      [点我收藏+]

标签:

1 本地文件

    MediaMetadataRetriever  ---android API 10 之前有 不对外开放 -可以反射

    http://developer.android.com/reference/android/media/MediaMetadataRetriever.html

private void initView() {
    imgPic = (ImageView) findViewById(R.id.img_pic);
    seekbar = (SeekBar) findViewById(R.id.seekbar);
    mmr = new MediaMetadataRetriever();
    mmr.setDataSource("/sdcard/3.mp4");
    // 取得视频的长度(单位为毫秒)
    String time = mmr.extractMetadata(MediaMetadataRetriever.METADATA_KEY_DURATION);
    seekbar.setMax(Integer.parseInt(time) * 1000);
    bt = (Button) findViewById(R.id.bt);
    bt.setOnClickListener(new OnClickListener() {
        @Override
        public void onClick(View v) {
	    Toast.makeText(MainActivity.this, " " + seekbar.getProgress(), 1).show();

	    Bitmap bitmap = mmr.getFrameAtTime(seekbar.getProgress(),
						MediaMetadataRetriever.OPTION_CLOSEST_SYNC);
	    // Bitmap bitmap = mmr.getFrameAtTime(seekbar.getProgress());
	    imgPic.setImageBitmap(bitmap);
	System.out.println(mmr.extractMetadata(MediaMetadataRetriever.METADATA_KEY_DATE)+ "");
	System.out.println(mmr.extractMetadata(MediaMetadataRetriever.METADATA_KEY_MIMETYPE)+ "");
//	mmr.release();
	}
    });
}


另外得说下

ThumbnailUtils.createVideoThumbnail(filePath, kind);  获取视频的缩略图  - 也可以获取图片 

源码 如下 --- 其实用的还是 MediaMetadataRetriever 

    public static Bitmap createVideoThumbnail(String filePath, int kind) {
        Bitmap bitmap = null;
        MediaMetadataRetriever retriever = new MediaMetadataRetriever();
        try {
            retriever.setDataSource(filePath);
            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;

        if (kind == Images.Thumbnails.MINI_KIND) {
            // Scale down the bitmap if it‘s too large.
            int width = bitmap.getWidth();
            int height = bitmap.getHeight();
            int max = Math.max(width, height);
            if (max > 512) {
                float scale = 512f / max;
                int w = Math.round(scale * width);
                int h = Math.round(scale * height);
                bitmap = Bitmap.createScaledBitmap(bitmap, w, h, true);
            }
        } else if (kind == Images.Thumbnails.MICRO_KIND) {
            bitmap = extractThumbnail(bitmap,
                    TARGET_SIZE_MICRO_THUMBNAIL,
                    TARGET_SIZE_MICRO_THUMBNAIL,
                    OPTIONS_RECYCLE_INPUT);
        }
        return bitmap;
    }


2 网络视频流

http://www.tuicool.com/articles/uqmUFfY  中接受两种方法 

方法一 

MediaMetadataRetriever.setDataSource(String uri,  Map<String, String> headers)  

---算法异常 ---问题更近 ---

方法二   --- 未验证  ---待验证

在github上找到了另一个扩展版的FFMPEG MediaMetadataRetriever ,提供了一个可以获取视频详细信息和缩略图的统一接口,支持API 7+,(android 自带MediaMetadataRetriever仅支持API 10+),同时支持Uri

,支持的文件类型 file, http, https, mms and mmsh 支持的编码格式(音频&视频): aac, acc+, avi, flac, mp2, mp3, mp4, ogg, 3gp and more! 扩展支持: ICY Metadata (SHOUTcast metadata) 使用方法异常简单,只需将下边的包下载到本地解压然后把libs中的文件拷贝到自己项目的libs目录下即可https://github.com/wseemann/FFmpegMediaMetadataRetriever/blob/master/fmmr-library/prebuilt-libs.tar.gz .


vitemio  在线测试流 http://devimages.apple.com/iphone/samples/bipbop/gear1/prog_index.m3u8


获取视频的帧

标签:

原文地址:http://my.oschina.net/kylinhuang/blog/472757

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!