Android之使用MediaMetadataRetriever类获取视频第一帧
一.首先,来介绍一下MediaMetadataRetriever类,此类位于android.media包下,这里,先附上可查看此类的API地址:MediaMetadataRetriever类。大家能够自行查看。
1.MediaMetadataRetriever类概述:MediaMetadataRetriever class provides a unified interface for retrieving frame and meta data from an input media file.
翻译过来是Mediametadataretriever类提供了一个统一的接口取回帧和取回从一个输入媒体文件里的元数据。
2.MediaMetadataRetriever类提供的常量:MediaMetadataRetriever类提供的常量有非常多。都是int常量,有些用来取得媒体文件的元数据,有些用来对获得视频的帧的操作,这里大家能够查看API,这里列举几个常量:
第一个是获得我们设置的媒体文件的专辑标题,第二个是获得我们设置的媒体文件的专辑艺术家,第三个获得我们设置的媒体文件的艺术家,第四个获得我们设置的媒体文件的作者。
3.MediaMetadataRetriever类的构造方法:MediaMetadataRetriever() 无參构造方法。
4.MediaMetadataRetriever类的公有方法。例如以下图所看到的:
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast">
大家能够依据解释来知道这些方法的用处。当中一经常使用的方法为setDataSource方法。用来设置数据源,当中这个数据源能够从文件的路径,文件描写叙述符,uri地址和Uri对象来设置。
另外一经常使用的方法getFrameAtTime方法,用来获取帧,返回一个Bitmap对象,当中能够获取到第一帧和多少时间后的帧。
二.此篇文章主要是介绍怎样使用MediaMetadataRetriever类获取视频第一帧的,在编写我们的Android项目之前。还是要做下面三个步骤:
1.开启Android模拟器。
2.打开视图File Explorer,即展示Android模拟器中文件文件夹和文件,当中,必须注意的是Android模拟器的版本号问题,版本号不同存放在SD卡的位置也不同。Android2.x系统SD卡存放的位置为/mnt/sdcard或者/sdcard,而Android4.x系统SD卡存放的位置为/storage/sdcard/。
3.接着就把我们的视频文件放入SD卡的位置上。我的模拟器版本号为4.x的,所以就在下图的位置存放视频文件:
假设你存放的文件文件夹是没有权限放入文件的。就会在控制台输出红色警告。没有权限。
三.以下,就能够编写我们的Android项目,新建一个项目android_mediaMetadataRetriever:
1.打开我们的布局文件activity_main.xml,代码例如以下:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" > <ImageView
android:id="@+id/imageView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:src="@drawable/ic_launcher"/> <Button
android:id="@+id/button"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="获取视频缩略图"/> </LinearLayout>
2.打开我们的MainActivity.java文件。代码例如以下:
package com.android_mediametadataretriever; import java.io.File; import android.app.Activity;
import android.graphics.Bitmap;
import android.media.MediaMetadataRetriever;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.Toast; public class MainActivity extends Activity { private ImageView imageView;//声明ImageView对象
private Button button;//声明Button对象
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
imageView=(ImageView)findViewById(R.id.imageView);//获取布局管理器中的ImageView控件
button=(Button)findViewById(R.id.button);//获取布局管理器中的Button控件
//设置按钮点击事件监听器
button.setOnClickListener(new OnClickListener() { @Override
public void onClick(View v) {
MediaMetadataRetriever mmr=new MediaMetadataRetriever();//实例化MediaMetadataRetriever对象
File file=new File("/storage/sdcard/Movies/music1.mp4");//实例化File对象,文件路径为/storage/sdcard/Movies/music1.mp4
if(file.exists()){
mmr.setDataSource(file.getAbsolutePath());//设置数据源为该文件对象指定的绝对路径
Bitmap bitmap=mmr.getFrameAtTime();//获得视频第一帧的Bitmap对象
if(bitmap!=null){
imageView.setImageBitmap(bitmap);//设置ImageView显示的图片
Toast.makeText(MainActivity.this, "获取视频缩略图成功", Toast.LENGTH_SHORT).show();//获取视频缩略图成功,弹出消息提示框
}else{
Toast.makeText(MainActivity.this, "获取视频缩略图失败", Toast.LENGTH_SHORT).show();//获取视频缩略图失败,弹出消息提示框
}
}else{
Toast.makeText(MainActivity.this, "文件不存在", Toast.LENGTH_SHORT).show();//文件不存在时。弹出消息提示框
}
}
});
} }
当中上面代码中的File对象指定的路径为Android 4.x系统的SD卡路径下的文件夹,假设是较低版本号。还是要看下File Explorer视图的SD卡路径是哪个。当中/mnt/sdcard文件夹和/sdcard文件夹都属于/storage/sdcard文件夹的连接文件。所以真实存放路径为/storage/sdcard。
3.最后。千万记得一点,要在AndroidManifest.xml声明文件加入我们的许可。即权限。在此文件加上一行读取SD卡文件的权限代码就可以,代码例如以下:
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
注:当中必须注意的是使用MediaMetadataRetriever类要求android的minSdkVersion最小为14,所以假设你的AndroidManifest.xml文件里的android:minSDKVersion="8"即最小的sdk版本号小于14的话,将会报错,解决的方法能够在AndroidManifest.xml文件里改最小sdk版本号,也能够在MainActivity类中加上以下的代码:
@TargetApi(Build.VERSION_CODES.ICE_CREAM_SANDWICH)
使得我们使用这个MediaMetadataRetriever类不会报错。
四.部署此项目到Android模拟器,执行效果例如以下:
点击获取视频缩略图button,例如以下图所看到的:
五.以上内容仅供大家学习參考,写得不好。请见谅,如有错误,请指出。谢谢!
Android之使用MediaMetadataRetriever类获取视频第一帧的更多相关文章
- Android之使用MediaMetadataRetriever类获取媒体信息
一.昨天.介绍了使用MediaMetadataRetriever类来获取视频第一帧:http://blog.csdn.net/u012561176/article/details/47858099,今 ...
- Android -- 获取视频第一帧缩略图
干货 从API 8开始,新增了一个类: android.media.ThumbnailUtils这个类提供了3个静态方法一个用来获取视频第一帧得到的Bitmap,2个对图片进行缩略处理. public ...
- 关于video标签移动端开发遇到的问题,获取视频第一帧,全屏,自动播放,自适应等问题
最近一直在处理video标签在IOS和Android端的兼容问题,其中遇到不少坑,绝大多数问题已经解决,下面是处理问题经验的总结: 1.获取视频的第一帧作为背景图: 技术:canvas绘图 windo ...
- 通过 ffmpeg 获取视频第一帧(指定时间)图片
最近做一个上传教学视频的方法,上传视频的同时需要上传视频缩略图,为了避免用户上传的缩略图与视频内容不符,经理要求直接从上传的视频中截图视频的某一帧作为缩略图,并给我推荐了FFMPEG.FFMPEG 功 ...
- javacv获取视频第一帧
第一种是用ffmpeg工具,不过还得安装客户端软件,于是放弃了,还有一种是javacv开源工具,所以选择第二种: 第一种:ffmpeg工具 需要安装ffmpeg软件,支持windows和linux,视 ...
- python cv2获取视频第一帧,并转码
安装Python库 sudo pip install opencv-python 或者sudo pip install opencv-python -i https://pypi.douban.com ...
- Android视频处理 --处理视频第一帧缩略图
从API 8开始,新增了一个类: android.media.ThumbnailUtils这个类提供了3个静态方法一个用来获取视频第一帧得到的Bitmap,2个对图片进行缩略处理. ? 1 publi ...
- Android必知必会-获取视频文件的截图、缩略图
背景 公司最近要求给我负责的APP加上视频录制和发布的功能,我简单的完成了基本的录制和视频压缩功能,后来发现发布接口需要上传视频的截图,网上搜索了一下资料,在这里整理一下. 代码实现 /** * 获取 ...
- vue 截取视频第一帧
最近自己写项目,在项目中涉及功能点又截取视频帧的点:需求澄清:移动端封面展示,平台上传图片(多张上传)取第一张上传图片为封面图:如上传视频则截取视频第一帧作为封面图: 实现思路:h5 video标签 ...
随机推荐
- 关于debug.keystore文件用法以及错误处理
在开发过程中需要频繁的为测试的同事签名apk,非常很麻烦,把默认debug.keystore文件替换成发布用(生产环境)的签名文件,不用频繁地签名apk文件了. 如果直接使用生产keysto ...
- SQL基本操作——事务
事务是并发和恢复控制的基本单元. 事务四个属性:原子性.一致性.隔离性.持久性. 原子性:一个事务是一个不可分割的单位,事务中包括的诸多操作要么成功要么都失败. 一致性:事务必须使数据库从一个一致性状 ...
- 【译】x86程序员手册01
Intel 80386 Reference Programmer's Manual 80386程序员参考手册 Chapter 1 -- Introduction to the 80386 第1章 - ...
- RPU4+1视图(转)
4+1视图模型概况 Kruchten 提出了一个"4+1"视图模型,从5个不同的视角包括包括逻辑试图.进程视图.物理视图.开发视图.场景视图来描述软件体系结构.每一个视图只关心系统 ...
- ajax请求参数的格式
因为多写了一个contentType=“text/html”,请求的时候,参数总是转成了url&拼接的格式,导致请求不成功,调试了老半天 这个也是奇怪,为什么post只能接收json格式的数据 ...
- CAD处理键盘按钮被释放(com接口VB语言)
主要用到函数说明: MxDrawXCustomEvent::KeyUp 键盘按钮被释放,详细说明如下: 参数 说明 iVk 是按钮码,如F8,的值为#define VK_F8 0x77 返回0消息继续 ...
- 8.2.3 覆写 Equals
经过对四种不同类型判等方法的讨论,我们不难发现不管是 Equals 静态方法.Equals 虚方法 抑或==操作符的执行结果,都可能受到覆写 Equals 方法的影响.因此研究对象判等就必须将注意 力 ...
- OI数学知识清单
OI常用的数学知识总结 本文持续更新…… 总结一下OI中的玄学知识 先列个单子,(from秦神 数论 模意义下的基本运算和欧拉定理 筛素数和判定素数欧几里得算法及其扩展[finish] 数论函数和莫比 ...
- 18.match_phrase的用法
主要知识点: match_phrase的使用场景 match_phrase的用法 match_phrase的原理 一.什么是近似匹配 match_phrase的使用场景 现假设有两个句子 ...
- 【[Offer收割]编程练习赛14 D】剑刃风暴(半径为R的圆能够覆盖的平面上最多点数目模板)
[题目链接]:http://hihocoder.com/problemset/problem/1508 [题意] [题解] 求一个半径为R的圆能够覆盖的平面上的n个点中最多的点数; O(N2log2N ...