重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
本周给大家分享如何获取视频的每一帧的信息,说到这个那就得看我们的谷歌官方给我们的提供的api接口类:MediaMetadataRetriever,这个类是提供给我们用来获取视频信息的,
专注于为中小企业提供成都网站设计、网站制作服务,电脑端+手机端+微信端的三站合一,更高效的管理,为中小企业中站免费做网站提供优质的服务。我们立足成都,凝聚了一批互联网行业人才,有力地推动了上1000+企业的稳健成长,帮助中小企业通过网站建设实现规模扩充和转变。
官方文档:
通过文档我们知道,我们可以通过它提供的extractMetadata()方法获取视频基本信息,
例如:视频宽、高,时长,作者等,还有通过getFrameAtTime()方法获取对应时长位置的视频帧信息,返回的是一个bitmap对象
通过实践知道,这个方法好是好,但是获取视频帧的速度太慢了,我自己做的实验是,获取一个4分多钟的视频,每隔10秒取一帧,开了4个线程去取,时间大概在10秒左右,这样对于我们来说是不可以忍受的,所以最后在github上找到了一个很好的库推荐给大家:
这个库是基于ffmpeg实现的,同样的实验获取视频帧信息的速度在1秒左右,只开了一个线程,ffmpeg还是依旧的强大啊。
通过本周的学习,自己对于ffmpeg是越来越赶兴趣了,所以买了一本书来研究一下,但是本书讲的都是c语言,所以没办法又把我大学学习的c语言的书找了出来,继续开始着自己的爬坑之旅。
读数据库。Android中所有的多媒体文件除了存储在物理硬盘上,还会将文件信息(路径、id、类型、)保存到数据库中,这样当我们想要获取这些文件的信息时,就不需要耗时的扫描硬盘,只需要读数据库就可以了。Android平台中称手机终端内存为内部存储空间,称SD卡为外部存储空间。针对内部和外部存储空间中的媒体文件信息是分开管理的,各自有独立的数据库管理。外部存储空间和内部存储空间对应的卷标为”external”和”internal”。
一部分手机将eMMC存储挂载到 /mnt/external_sd 、/mnt/sdcard2 等节点,而将外置的SD卡挂载到Environment.getExternalStorageDirectory()这个结点,此时,调用Environment.getExternalStorageDirectory(),则返回外置的SD的路径。
而另一部分手机直接将eMMC存储挂载在Environment.getExternalStorageDirectory()这个节点,而将真正的外置SD卡挂载到/mnt/external_sd、/mnt/sdcard2 等节点。此时,调用Environment.getExternalStorageDirectory(),则返回内置的SD的路径。
我们只说第一种情况,并且视频文件在/Sdcard下面
String path = Environment.getExternalStorageDirectory().getPath() + "/文件所在子目录/../你的文件名.*";
String path2 = "文件.*";
File file = new File("/sdcard/../文件.*");
//加载视频:
VideoView videoView = (VideoView)findViewById(R.id.