标签:
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