Mediacodec编码后的h264视频出现马赛克问题
问题:在视频采集后,通过Mediacodec编码生成h264视频文件,播放时出现马赛克较多,无论调整帧率、码率、还是分辨率都不能解决问题
出现问题的原因:编码时传入的时间戳不对。时间戳是视频播放的标准,应该以采集一帧画面时的时间为准,而不应该是编码时的时间,所以编码时传入的时间戳可以使用采集该帧数据时的时间。
关于网上用固定步长增加的变量作为时间戳的方式,个人认为不是很准确。
个人认为比较准确的方法就是在获取摄像头采集到的原始数据之后,可以通过long stamptime = System.nanoTime()获取到当前时间戳,然后在编码时将stamptime传入queueInputBuffer(........)中,就可保证编码后的视频没有马赛克。
切忌stamptime在编码时才获取,因为在采集到编码之间,可能需要转换YUV格式(如采集的是YV12格式,编码需要传入的是YUV420sp格式),这会耗时(时间长短可能是变化的),就造成了此时的时间与原始画面的时间间隔存在差异,如果在此时获取stamptime传入queueInputBuffer(........),编码的帧在时间上不连续,形成马赛克
Mediacodec编码后的h264视频出现马赛克问题的更多相关文章
- iOS8系统H264视频硬件编解码说明
公司项目原因,接触了一下视频流H264的编解码知识,之前项目使用的是FFMpeg多媒体库,利用CPU做视频的编码和解码,俗称为软编软解.该方法比较通用,但是占用CPU资源,编解码效率不高.一般系统都会 ...
- 【Android 多媒体应用】使用MediaCodec将摄像头采集的视频编码为h264
MainActivity.java import android.app.Activity; import android.graphics.ImageFormat; import android.h ...
- 使用ffmpeg将BMP图片编码为x264视频文件,将H264视频保存为BMP图片,yuv视频文件保存为图片的代码
ffmpeg开源库,实现将bmp格式的图片编码成x264文件,并将编码好的H264文件解码保存为BMP文件. 实现将视频文件yuv格式保存的图片格式的測试,图像格式png,jpg, gif等等測试均O ...
- 使用X264编码yuv格式的视频帧使用ffmpeg解码h264视频帧
前面一篇博客介绍在centos上搭建点击打开链接ffmpeg及x264开发环境.以下就来问个样例: 1.利用x264库将YUV格式视频文件编码为h264格式视频文件 2.利用ffmpeh库将h264格 ...
- H264视频编码成MP4文件
firehood的专栏 Wince嵌入式开发 目录视图 摘要视图 订阅 赠书 | AI专栏(AI圣经!<深度学习>中文版) 每周荐书:Kotlin.分布式.Keras ...
- web flash推流h264视频取消cbr
flash as3.0 推视频H264关于视频质量 初次设置代码如下: h264Setting.setProfileLevel(H264Profile.BASELINE, H264Level.LEVE ...
- MediaCodec编码结合FFmpeg封装流
在Android平台上合成视频一般使用MediaCodec进行硬编码,使用MediaMuxer进行封装,但是因为MediaMuxer在某些机型上合成的视频在其他手机上播放会出现问题,而且只支持一个音频 ...
- H264视频压缩算法
H264视频压缩算法现在无疑是所有视频压缩技术中使用最广泛,最流行的.随着 x264/openh264以及ffmpeg等开源库的推出, 大多数使用者无需再对H264的细节做过多的研究,这大降低了人们使 ...
- MediaCodec编码OpenGL速度和清晰度均衡
## 概述 在安卓平台为了实现h264视频编码,我们通常可以使用libx264, ffmpeg等第三方视频编码库,但是如果对编码的速度有一定的要求,要实现实时甚至超实时的高速视频编码,我们并没有太 ...
随机推荐
- Win32编程API 基础篇 -- 3.消息处理 根据英文教程翻译
消息处理 例子:窗口点击 好的,现在我们已经得到一个窗口了,但我们什么也做不了除了DefWindowProc()允许窗口大小被调整,最大最小化等...这不是很激动人心啊 在接下来的一小节中我将向你展示 ...
- objective-c 通告
1. 通告和委托的区别 通告也能传递与事件相关的数据.通告不同于委托的地方在于,通告是在对象执行完成动作之后产生,而不是之前.受到通告的对象没有机会建议是否要执行动作,而且对象的通告可以有多个监听者( ...
- poj——2084 Game of Connections
Game of Connections Time Limit: 1000MS Memory Limit: 30000K Total Submissions: 8664 Accepted: 42 ...
- 人人都是 DBA
http://www.cnblogs.com/gaochundong/tag/DBA/
- eclipse 安装egit插件
一.Eclipse上安装GIT插件EGit Eclipse的版本eclipse-java-helios-SR2-win32.zip(在Eclipse3.3版本找不到对应的 EGit插件,无法安装) E ...
- 《WF in 24 Hours》读书笔记 - Hour 2(1) - 第一个Workflow程序
创建第一个Workflow项目 1. 创建Workflow项目 – 选择Workflow Console Application 2. 添加CodeActivity 3. 打开CodeActivity ...
- 交换机是干嘛的!!交换机如何学习MAC地址过程?
1.它收到一个帧的时候,先检查源MAC地址,看看自己维护的一个地址表中有没有这个地址.如果有,则2:如果没有,则将这个MAC地址.进入的端口.进入的时间放入这个表中: 2.检查目的MAC地址,然后到该 ...
- Solidworks在哪里找到内六角螺钉 内六角螺栓保准件
GB-screws-凹头螺钉-出来了
- 关于OleDB连接Excel的Extended Properties(扩展属性)HDR=YES; IMEX=2个人理解心得
近期在用C#写一个创建Excel并将数据导出到Excel的WinForm程序, 让我对OleDB连接Excel的Extended Properties(扩展属性)HDR=YES; IMEX=2有了深刻 ...
- Python学习笔记9:标准库之日期时间(time包,datetime包)
一 time包 sleep([float time]) 延迟一段以浮点数表示的秒数 time包基于C语言的库函数(library functions). Python的解释器一般是用C编写的,Pyth ...