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

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

更新时间:2013年06月02日 17:01:18   作者:

camera录制的视频的缩略图如何获取,想必有很多的朋友都不会吧,下面与大家分享下获取的原理,感兴趣的你可不要错过了哈

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。

相关文章

1a1b05c64693fbf380aa1344a7812747.png

这篇文章主要为大家详细介绍了android利用service完成计时功能,具有一定的参考价值,感兴趣的小伙伴们可以参考一下2017-05-05

4f55910a645b073bc4fc65dc10dc14bd.png

这篇文章主要为大家详细介绍了Android控件Chronometer定时器的实现方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下2016-11-11

0ea3c7666119d5615e582f823fb3fad6.png

这篇文章主要为大家详细介绍了Android UI实现广告Banner轮播效果,具有一定的参考价值,感兴趣的小伙伴们可以参考一下2016-12-12

4f96a78db829b1556ff16de21e013c7a.png

这篇文章主要介绍了Android ImageView实现图片裁剪和显示功能,非常不错,具有参考借鉴价值,需要的朋友可以参考下2017-02-02

8cc1031babc6aff2319f1c6af8544aa0.png

这篇文章主要介绍了Android开发之图片旋转功能实现方法,结合实例形式分析了Android基于matrix矩阵操作图形变换的相关实现技巧,需要的朋友可以参考下2017-09-09

0c932a99bb7b6f23c937db507070cc7b.png

浏览器控件是每个开发环境都具备的,这为马甲神功提供了用武之地,windows的有webbrowser,android和ios都有webview;本篇主要介绍android的webview之强大,感兴趣的朋友可以研究下2012-12-12

cca732bf65a93ed2ec0ac80c638460fe.png

这篇文章主要介绍了Android 验证码功能实现代码的相关资料,非常不错,具有参考借鉴价值,需要的朋友可以参考下2016-08-08

2d9f31f2af7b675a3d153d2b7f1035a7.png

这篇文章主要为大家详细介绍了Android流式布局FlowLayout的相关资料,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下2017-12-12

b452cee8ec5cd9e58ab98eba17281e59.png

本篇文章是对Android中MMS支持进行了详细的分析介绍,需要的朋友参考下2013-05-05

f4838ec7e2d4da28e0b57d4e852dadd4.png

这篇文章主要介绍了Android编程实现在一个程序中启动另一个程序的方法,结合实例形式分析了Android通过ResolveInfo类来取得启动Acitivty类名的方法来启动另一个程序的方法,需要的朋友可以参考下2017-02-02

最新评论

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值