
Android开发中,常常需要获取本地或者网络多媒体的一些基本信息。MediaMetadataRetriever类位于androidmedia包下,提供了用于从输入媒体文件检索帧和元数据的统一接口,可以很方便实现这些功能。
本例中提供了获取本地视频和网络视频第一帧的功能,首先初始化MediaMetadataRetriever,如果是本地视频设置数据源时通过 UrifromFile()转化为Uri对象,再通过MediaMetadataRetriever的getFrameAtTime()方法默认获取第一帧。如果是网络视频直接将url设置为数据源即可。
可以使用 jiecaovideoplayer,非常简单好用,功能强大
好用的视频播放库---jiecaovideoplayer推荐
>
前段时间在做视频播放器的时候碰到一个新需求:需要将视频的地理位置显示在视频的详情里面。第一反应就是每一个视频文件都可以记录下来一些信息,这些信息里面包含了经纬度等等,就像照片的ExifInterface类一样。于是就去查看了MediaRecorder类,便发现了这个类里面有public void setLocation(float latitude, float longitude)这么个方法可以给录制的视频设置经纬度。
所以说明视频文件里面是存储了经纬度的,现在的关键就是找到对应的API去获取视频文件存储的经纬度。回忆以前获取视频的某一帧图像使用的是MediaMetadataRetriever类,通过这个对象是否也可以获取一些别的信息呢?创建mediaMetadataRetriever对象后发现了这么个方法:mediaMetadataRetrieverextractMetadata(int keyCode);看见这个方法名就感觉找到了(提炼出元数据),现在还需要一个关键的keyCode。于是进入到这个类里面浏览源码,发现了一大堆的key:
这里我所需要的仅仅是:public static final int METADATA_KEY_LOCATION = 23;
返回的经纬度格式:+22000+119999,这里需要将经度部分和纬度部分分割开来。
最后通过Geocoder解析出经纬度对应的具体城市位置:
从API 8开始,新增了一个类:
androidmediaThumbnailUtils这个类提供了3个静态方法一个用来获取第一帧得到的Bitmap,2个对进行缩略处理。
public static Bitmap createVideoThumbnail (String filePath, int kind)
第一个参数是文件的路径,第二个参数是指定的大小,有两种选择ThumbnailsMINI_KIND与ThumbnailsMICRO_KIND。
第一种文档上说大小是512 x 384 ,我用一个MP4格式文件测试得到544 x 960,用一个wmv格式文件测试得到160 x 120。明显不靠谱。第二种参数两种格式文件得到的大小都是 96 x 96,这个才是缩略图。extractThumbnail(Bitmap source, int width, int height, int options)
extractThumbnail(Bitmap source, int width, int height)
这两种方法都是用来处理Bitmap的大小的,第一个参数是要处理的Bitmap,第二个参数是处理后宽度,第三个是高度,第四个参数options,如果options定义为OPTIONS_RECYCLE_INPUT,则回收资源。也就是说可以用第三种方法把截取到的第一帧的Bitmap转成任意想要的大小,第三个方法还可以获取内存卡内的缩略图。
Bitmap bitmap = ThumbnailUtilscreateVideoThumbnail(path1, ThumbnailsMINI_KIND);
bitmap = ThumbnailUtilsextractThumbnail(bitmap, 210, 210);
从API 10开始新增一类MediaMetadataRetriever可以用来获取媒体文件的信息
MediaMetadataRetriever mmr = new MediaMetadataRetriever();
mmrsetDataSource(/sdcard/33mp4);
Bitmap bitmap = mmrgetFrameAtTime();
imagesetImageBitmap(bitmap);
Systemoutprintln(mmrextractMetadata(MediaMetadataRetrieverMETADATA_KEY_DATE)+);
Systemoutprintln(mmrextractMetadata(MediaMetadataRetrieverMETADATA_KEY_MIMETYPE)+);
mmrrelease();
MediaMetadataRetriever可以获取任何一帧的缩略图。
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 = ClassforName(androidmediaMediaMetadataRetriever);
instance = clazznewInstance();
Method method = clazzgetMethod(setDataSource, Stringclass);
methodinvoke(instance, filePath);
// The method name changes between API Level 9 and 10
if (BuildVERSIONSDK_INT <= 9) {
return (Bitmap) clazzgetMethod(captureFrame)invoke(instance);
} else {
byte[] data = (byte[]) clazzgetMethod(getEmbeddedPicture)invoke(instance);
if (data != null) {
Bitmap bitmap = BitmapFactorydecodeByteArray(data, 0, datalength);
if (bitmap != null) return bitmap;
}
return (Bitmap) clazzgetMethod(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) {
Loge(TAG, createVideoThumbnail, e);
} catch (InvocationTargetException e) {
Loge(TAG, createVideoThumbnail, e);
} catch (ClassNotFoundException e) {
Loge(TAG, createVideoThumbnail, e);
} catch (NoSuchMethodException e) {
Loge(TAG, createVideoThumbnail, e);
} catch (IllegalAccessException e) {
Loge(TAG, createVideoThumbnail, e);
} finally {
try {
if (instance != null) {
clazzgetMethod(release)invoke(instance);
}
} catch (Exception ignored) {
}
}
return null;
}
可以下载个视频播放器,如QQ影音、暴风影音。打开软件后找到本地视频就好了,一般都会自动找到手机的视频。(如果是类似MP4格式的用优酷、爱奇艺点本地视频也行。前面说的两个软件能搜比较不常见格式的视频。望采纳)
以上就是关于Android多媒体信息获取全部的内容,包括:Android多媒体信息获取、android之前用的MediaStore获取视频,但是获取的视频信息非常不准确,根本没法用,请问有什么好的方法吗、Android获取Camera录制的视频的地理位置等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)