camera录制视频的缩略图获取原理心得分享

2016-02-19 09:29 52 1 收藏

get新技能是需要付出行动的,即使看得再多也还是要动手试一试。今天图老师小编跟大家分享的是camera录制视频的缩略图获取原理心得分享,一起来学习了解下吧!

【 tulaoshi.com - 编程语言 】

1、在thumbnail.java文件里通过调用bitmap = retriever.getFrameAtTime(-1);
这句代码得到bitmap,

2、那么这句代码在MediaMetadataRetriever.java 中调用
getFrameAtTime(timeUs, OPTION_CLOSEST_SYNC)这句代码:
解释一下timeUs,和OPTION_CLOSEST_SYNC这2个变量的含义
timeUs The time position where the frame will be retrieved.
* When retrieving the frame at the given time position, there is no
* guarentee that the data source has a frame located at the position.
* When this happens, a frame nearby will be returned. If timeUs is
* negative, time position and option will ignored, and any frame
* that the implementation considers as representative may be returned

3.由于timeUs等于-1,那么在stagefrightMetadataRetriver.cpp中通过
extractVideoFrameWithCodecFlags()函数
代码如下:

if (frameTimeUs 0) {
if (!trackMeta-findInt64(kKeyThumbnailTime, &thumbNailTime)
|| thumbNailTime 0) {
thumbNailTime = 0;
}
options.setSeekTo(thumbNailTime, mode);
}else{
...................
}

取得thumbnailTime,
thumbnailTime是取同步帧中最大一帧数据,即有可能不是视频文件的第一个I帧。

4.extractVideoFrameWithCodecFlags()函数中,接着第3条,然后调用err = decoder-read(&buffer, &options);这句代码,其options-seekMode为SEEK_CLOSEST_SYNC这个值

5.如果video codec是mpeg4,则调用MPEG4Extractor.cpp中的read()的函数,
根据前面thumnailtime,找到此时间点的vidoe frame index,然后通过 video frame index,再找临近的同步帧(即I帧)

6.SampleTable.cpp中findSyncSampleNear()函数中,找临近同步帧,
视频文件中会存有所有的同步帧,这个同步帧也有可能是这个同步帧数组中第一个值,也有可能在第5步中得到的video frame index,也有可能位于2个同步帧之间,那么我们通过计算找到这2个同步帧最靠近video frame index的一个同步帧

7.通过上述步骤,找到同步帧,那么根据这个同步帧生成thumbnail的bitmap。

来源:http://www.tulaoshi.com/n/20160219/1590983.html

延伸阅读
iPhone显示更大缩略tuLaoShi.com图预览技巧   在iOS8相册中,可以按照年度或精选来查看照片,查看更多照片的缩略图。不过,这种缩略图比较小。其实也可以更大的缩略图方式预览。具体操作如下: 第一步,在年度用手指按住年度精选不放。 第二步,将其他手指放置在需要放大显示的照片位置,即可显示该照片更大一点的缩略图...
标签: Web开发
%@ page contentType="text/html;charset=gb2312" % %@ page language="java" import="java.util.*" % %@ page language="java" import="java.io.*" % %@ page language="java" import="java.awt.*" % %@ page language="java" import="java.awt.image.*" % %@ page language="java" import="com.sun.image.codec.jpeg...
标签: PHP
  其中db_mysql.inc.php,config.php,function.php不是真正使用到的,关键是$filename 文件名,我是通过读取数据库中的图片名称 <?php include_once ('inc/db_mysql.inc.php'); include_once ('inc/config.php'); include_once ('class/function.php'); global $picPath; if (strstr($_SERVER[HTTP_USER_AGENT],"MSIE")) {   $a...
在列表中使用缩略图,这样一个简单的需求,看似平淡无奇的设计,也有如此多的细节和原理可以挖掘。原文中推敲的过程非常值得学习和借鉴,来看今天TerryFan这篇译文。 译者微信号:开卷有译,欢迎关注哟 我们常常从客户或者来参加我们培训的人那儿听到这样一个问题,在移动端的列表设计中,是加图片缩略图好呢,还是不加好呢?那如果加的话,是...
标签: word
让word2013文档直接显示预览缩略图   通常情况下,我们通过windows的资源管理器可以查看word文档的名字列表,无法直接查看该word文档的内容缩略图。这样不够直观,有时候需要一个文档一个文档打开核对查看确认是否是自己需要的word文档。今天教大家用word2013文件保存时的一个选项来实现word文档的预览缩略图效果。 第一步:打开...

经验教程

504

收藏

38
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部