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

2016-02-19 09:29 51 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。

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

延伸阅读
在列表中使用缩略图,这样一个简单的需求,看似平淡无奇的设计,也有如此多的细节和原理可以挖掘。原文中推敲的过程非常值得学习和借鉴,来看今天TerryFan这篇译文。 译者微信号:开卷有译,欢迎关注哟 我们常常从客户或者来参加我们培训的人那儿听到这样一个问题,在移动端的列表设计中,是加图片缩略图好呢,还是不加好呢?那如果加的话,是...
如何重建win7缩略图缓存   1.打开开始菜单在搜索所有程序和文件框里输入磁盘清理,点击打开磁盘清理。如下图所示 2.点击确定,进入磁盘清理属性页面。如下图所示 3.等到磁盘清理计算win7(C)上可以释放多少空间。如下图所示 4.勾选缩略图,确认要删除的文件。如下图所示 5.确认要删除文件。如下图所示...
标签: 电脑入门
问:在Windows XP 系统下,使用缩略图的查看方式后,图片文件没有缩略显示出来,请问如何解决? 答:这个问题是由于Windows 图片和传真查看器的DLL没有注册造成的。解决的方法是:运行Regsvr32 shimgvw.dll注册该DLL即可。
标签: 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...
先把代码版出来 using System;using System.Drawing; namespace PubLib{ /// /// PicShow 的摘要说明。 /// public class PicShow { public PicShow() { // // TODO: 在此处添加构造函数逻辑 // } //查找图片文件是否存在 public static string ViewPIC(string PicPath, string PicName) { string BigPic = Checks.HM_PHYSICSROOT + &quo...

经验教程

640

收藏

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