Android多媒体信息获取

Android多媒体信息获取,第1张

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录制的视频的地理位置等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/9657301.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-30
下一篇2023-04-30

发表评论

登录后才能评论

评论列表(0条)

    保存