问题:在视频采集后,通过Mediacodec编码生成h264视频文件,播放时出现马赛克较多,无论调整帧率、码率、还是分辨率都不能解决问题

出现问题的原因:编码时传入的时间戳不对。时间戳是视频播放的标准,应该以采集一帧画面时的时间为准,而不应该是编码时的时间,所以编码时传入的时间戳可以使用采集该帧数据时的时间。

关于网上用固定步长增加的变量作为时间戳的方式,个人认为不是很准确。

个人认为比较准确的方法就是在获取摄像头采集到的原始数据之后,可以通过long stamptime = System.nanoTime()获取到当前时间戳,然后在编码时将stamptime传入queueInputBuffer(........)中,就可保证编码后的视频没有马赛克。

切忌stamptime在编码时才获取,因为在采集到编码之间,可能需要转换YUV格式(如采集的是YV12格式,编码需要传入的是YUV420sp格式),这会耗时(时间长短可能是变化的),就造成了此时的时间与原始画面的时间间隔存在差异,如果在此时获取stamptime传入queueInputBuffer(........),编码的帧在时间上不连续,形成马赛克

Mediacodec编码后的h264视频出现马赛克问题的更多相关文章

  1. iOS8系统H264视频硬件编解码说明

    公司项目原因,接触了一下视频流H264的编解码知识,之前项目使用的是FFMpeg多媒体库,利用CPU做视频的编码和解码,俗称为软编软解.该方法比较通用,但是占用CPU资源,编解码效率不高.一般系统都会 ...

  2. 【Android 多媒体应用】使用MediaCodec将摄像头采集的视频编码为h264

    MainActivity.java import android.app.Activity; import android.graphics.ImageFormat; import android.h ...

  3. 使用ffmpeg将BMP图片编码为x264视频文件,将H264视频保存为BMP图片,yuv视频文件保存为图片的代码

    ffmpeg开源库,实现将bmp格式的图片编码成x264文件,并将编码好的H264文件解码保存为BMP文件. 实现将视频文件yuv格式保存的图片格式的測试,图像格式png,jpg, gif等等測试均O ...

  4. 使用X264编码yuv格式的视频帧使用ffmpeg解码h264视频帧

    前面一篇博客介绍在centos上搭建点击打开链接ffmpeg及x264开发环境.以下就来问个样例: 1.利用x264库将YUV格式视频文件编码为h264格式视频文件 2.利用ffmpeh库将h264格 ...

  5. H264视频编码成MP4文件

    firehood的专栏 Wince嵌入式开发       目录视图 摘要视图 订阅 赠书 | AI专栏(AI圣经!<深度学习>中文版)      每周荐书:Kotlin.分布式.Keras ...

  6. web flash推流h264视频取消cbr

    flash as3.0 推视频H264关于视频质量 初次设置代码如下: h264Setting.setProfileLevel(H264Profile.BASELINE, H264Level.LEVE ...

  7. MediaCodec编码结合FFmpeg封装流

    在Android平台上合成视频一般使用MediaCodec进行硬编码,使用MediaMuxer进行封装,但是因为MediaMuxer在某些机型上合成的视频在其他手机上播放会出现问题,而且只支持一个音频 ...

  8. H264视频压缩算法

    H264视频压缩算法现在无疑是所有视频压缩技术中使用最广泛,最流行的.随着 x264/openh264以及ffmpeg等开源库的推出, 大多数使用者无需再对H264的细节做过多的研究,这大降低了人们使 ...

  9. MediaCodec编码OpenGL速度和清晰度均衡

      ## 概述 在安卓平台为了实现h264视频编码,我们通常可以使用libx264, ffmpeg等第三方视频编码库,但是如果对编码的速度有一定的要求,要实现实时甚至超实时的高速视频编码,我们并没有太 ...

随机推荐

  1. RabbitMQ-基本概念(一)

    整体架构模型 Producer 消息生产者,生产者创建消息然后发布到RabbitM中,消息一般包含2个部分 消息体(payload)和标签 消息体就是带有业务逻辑结构的数据,消息标签用来表述这条消息, ...

  2. spring boot jpa 事务管理

    spring boot 对jpa的支持极为方便,基本上不需要作太多配置,只需要加上注解就能支持事务: @Controller @Transactional(rollbackOn = Exception ...

  3. kendo中需要kendo.default.min.css

    kendo中需要kendo.default.min.css,这个默认是没有加入头文件的,还是需要手动加入一下 <link href="~/Scripts/kendo/styles/ke ...

  4. DELPHI新版本WEBSERVICE的变化

    DELPHI新版本WEBSERVICE,不仅可以编译成ISAPI DLL,依靠IIS部署, 并且还可以编译成单独的EXE,不再依赖IIS就可以独立运行,这一点未尝不可以说是非常方便的改进.

  5. [JavaEE] Testing the Java EE Application : Basic Arquillian integration test

    We have model like this: package com.pluralsight.bookstore.model; import javax.persistence.*; import ...

  6. C++学习之可变参数的函数与模板

    所谓可变参数指的是函数的参数个数可变,参数类型不定的函数.为了编写能处理不同数量实参的函数,C++11提供了两种主要的方法:如果所有的实参类型相同,可以传递一个名为initializer_list的标 ...

  7. sendredirect()和forward()的区别 (转)

    sendRedirect() 和forward()的区别 HttpServletResponse.sendRedirect与RequestDispatcher.forward方法都可以实现获取相应UR ...

  8. JQuery之replace以及给控件赋值

    <input type="hidden" name="ImgUrl" readonly="readonly"> <inpu ...

  9. about service in android

    注意:标红处! A Service is an application component representing either an application's desire to perform ...

  10. JBoss AS 7之简单安装(The Return Of The King)

    1.3 JBoss As 7安装 安装JBoss As 7分为以下几个步骤: 1.     下载JBoss 下载地址: <span style="font-size:18px;&quo ...