使用MediaCodec对相h机数据进行编码,存储为h264文件之后发现播放的视频长度与实际相比或变长或变短(跟机型有关高端手机会变长)。

尝试在初始化时改变帧率:mediaFormat.setInteger(MediaFormat.KEY_FRAME_RATE, mFrameRate);

或者在编码时对presentationTimeUs时间戳做调整:mMediaCodec.queueInputBuffer(int index, int offset, int size, long presentationTimeUs, int flags)都不能解决。

经查发现原因及解决方案如下:

原因:

https://stackoverflow.com/questions/36114808/android-setting-presentation-time-of-mediacodec
这是stackoverflow上的解释,简单来说由于输出的是纯H264的文件,是没有时间戳概念的,就是一堆流文件,所以如果手机配置低的话,由于编码时间过长(大于两次帧刷新间隔的话),会导致很多帧数据丢掉,所以最终的流文件播放出来就会短。反之高端手机由于处理时间短而且相机帧率又高的话就会导致播放时间变长。

解决方案:
1、使用MediaMuxer即混合器进行时间戳对齐;
2、把每一帧相机数据都存储在一个池子里,每帧都不遗漏,编码时每次去池子里取;这样的缺点是,由于时间差会导致池子里数据会越来越多,在点击“录制结束”时池子中的很多数据其实还没取完,即编码要在录制结束操作之后很长时间才完成。

MediaCodec编码后视频时长不正确的问题相关推荐

  1. 视频融合云平台EasyCVR按时间调用MP4视频时长不正确,如何解决?

    EasyCVR视频融合云服务平台支持国标GB/T28181.海康SDK.大华SDK.ONVIF.RTSP协议.Ehome协议等,可实现安防视频流的快速采集.转流上云能力. 通过平台级联.二次开发等方式 ...

  2. android mp4 画面裁剪,Android视频时长裁剪

    大家好,我是程序员kenney,今天给大家介绍一下如何在Android里面实现视频时长的裁剪. 首先我们要知道视频是由一帧一帧的数据构成的,每一帧都有一个时间戳,这个时间戳就是我们在做视频编码的时候, ...

  3. Java代码获取网络和本地视频时长等信息

    目标 最近项目中需要对上传的本地视频和从其他服务器拷贝的视频进行校验功能,校验主要包括视频的时长,大小,格式等信息,那么如何获取这些信息呢? 思路 本地视频,从过文件流读取,再通过FFMpeg.exe ...

  4. 使用ffmpeg调整视频时长倍速

    简介:通过ffmpeg调整视频时长,既可以尽量因调整视频时长引起的对视频质量的侵害,也能避免使用第三方工具收费或者广告问题,从而更干净安全的获取目标视频时长转换. 相关攻略: 利用ffmpeg将avi ...

  5. 简智音科技:抖音短视频时长几何为好呢?

    抖音短视频自全网火的遍地开花后,发展便一路顺风顺水,且在同行类占据金字塔顶端,至今无任何社交媒体软件打破此记录.提及抖音,大多数人不得不提短视频创作功能何其强大,能使人一夜暴富,同时还能影响每个人的生 ...

  6. java获得U盘根目录、读取图片视频头文件信息、获取视频时长

    1.获得U盘根目录,例如我们取名U盘名称为"测试U盘",一般插入U盘后,在系统的H盘 /** * 得到系统U盘根目录 */ public String findURootPath( ...

  7. java获取视频时长(实测可行)

    因为数据库视频表有一段时间丢失维护duration字段, 现在有需求需要用到此字段,只能再重新获取一遍, 更新表.哎!!! 先奉上 https://github.com/opensourceteams ...

  8. 通过ffmpeg获取视频时长

    通过Java获取视频时长,可以通过jave和ffmpeg这两种工具来获取,jave和ffmpeg都能拿到本地视频文件的时长,可如果是播放视频URL,就只能通过ffmpeg来获取. 现在视频文件基本上都 ...

  9. 文件笔记之javaCV 视频工具|获取视频时长|缩略图

    文件笔记之javaCV 视频工具|获取视频时长|缩略图) 目录 简介 依赖引入 实现 目录 简介 通过javaCV 视频工具-截取视频缩略图.获取视频属性 依赖引入 <!--javaCV 视频工 ...

  10. 【懒人系列】快手获取当前播放视频时长

    文章目录 前言 实现方法 总结 前言 上一篇文章我们留了个不大不小的问题:如何获取当前播放视频时长,进而视频播放完毕后自动翻页? 现在我们通过快手极速版App进行探讨和实现. 众所周知,Android ...

最新文章

  1. 经验之谈|处理不平衡数据集的7个技巧
  2. 中文模糊查询性能优化 by PostgreSQL trgm
  3. Android 哥哥福利
  4. git fetch -p 获取远程仓库的新分支以及删除远程仓库已删除的分支
  5. Python定时任务调度——APScheduler
  6. 网络教育计算机 判断,北京师范大学网络教育计算机作业1、4、8
  7. Linux工作笔记-解决安装Qt时缺少libX11-xcb.so.1文件问题
  8. WebService学习总结(1)——WebService相关概念
  9. CV学习笔记-数字图像概述
  10. 程序员面试金典——11.6矩阵元素查找
  11. 巴菲特如何滚雪球的?
  12. MySQL5.7安装手册
  13. ppt地图分布图一块一块的怎么做_没想到PPT还能这样做动态地图,实在是太炫酷了,用了再也离不开...
  14. Linux电源管理(3)-Generic PM之reboot过程【转】
  15. extmail mysql数据库 重启_配置extmail过程详解 | 学步园
  16. PackageManager使用
  17. 安全高效的中小型网络
  18. 未来五年,保险平权的最大机会来了
  19. minecraft服务器stats文件夹,[教程]Minecraft 文件夹目录索引及各部分作用
  20. 易企秀怎么转换成html5,易企秀怎么免费制作h5?

热门文章

  1. 房东拿租金去还房贷是天经地义的嘛
  2. Android锁屏勒索病毒分析(4)秒抢红包
  3. ACM-ICPC 2016 沈阳赛区现场赛 I. The Elder HDU 5956(斜率DP)
  4. 加扣扣群所有脚本免费使用
  5. Qt ui 到底是什么?
  6. php用do while实现斐波那契数列,php实现斐波那契数列
  7. pe系统 服务器维护,FirPE 维护系统
  8. 小技巧:更改链接参数 提高京东秒杀成功率
  9. 智能无线网络的深度学习:一项综合调查
  10. ajax请求参数为数组解决方案