![](https://img-blog.csdnimg.cn/20201014180756930.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
H264
H264
SXM19940913sxm
这个作者很懒,什么都没留下…
展开
-
H264---码率控制---率失真优化(Rate Distortion Optimation,RDO)
在 H.264 视频编码标准中仅仅规定了编码后比特流的句法结构和解码器的结构,而对于编码器的结构和实现模式没有具体的规定。然而无论编码器的结构如何,相应的视频编码的控制都是编码器实现的核心问题。在对数字视频信号进行压缩编码时,编码器通过相应的编码控制算法以确定各种编码模式,如宏块的划分类型、运动矢量以及量化参数等,已选定的各种编码模式进一步确定了编码器输出比特流的比特率和失真度。 H.264 编码器采用了基于 **Lagrangian** 优化算法的编码控制模型,其编码性能相较于以往的所有原创 2020-08-23 16:57:00 · 2139 阅读 · 0 评论 -
H.264开源解码器评测
H.264开源解码器评测Peter Lee 2006.05.07 videosky.9126.com 2003年5月,当H.264编码标准草案发布时,很多人都觉得H.264太复杂,不宜实用。眨眼间3年过去了,以往的论断、疑惑被如今的现实冲洗的干干净净。随着硬件性能的提高和视频编码工作者对H.264的不断优化,如今的H.264已完全实用,最新的达芬奇芯片上能实现D1分辨率(720*480)视频的实时编码,而对于解码,普通的PC机就能实现x264编码的DVDrip电影的流畅播放。纵观过去的三年转载 2020-08-23 15:55:58 · 265 阅读 · 0 评论 -
网络协议---RTP---NALU打包成RTP
nal_unit_type: 1~23----NALU包类型 24~31----RTP打包类型RTP包头RPT包头结构体:typedef struct { /**//* 1byte (0) */ unsigned char csrc_len:4;/* expect 0, csrc计数器,没啥用*/ unsigned char extension:1;/* e...原创 2020-08-23 15:21:31 · 299 阅读 · 0 评论 -
H264(代码)---序列参数集(SPS)---解析并获取帧率
H.264(H264)解码SPS获取分辨率和帧率 实例代码H264ParseSPS.h// H264ParseSPS.h#ifndef H264ParseSPS_h#define H264ParseSPS_h#include <stdio.h> typedef struct{ unsigned int profile_idc; unsigned int level_idc; unsigned int width; unsign原创 2020-08-23 15:08:44 · 2301 阅读 · 0 评论 -
H264---CPB(CodedBlockPattern)模式的识别 https://www.cnblogs.com/oldmanlv/p/6019025.html
在I_16x16宏块中,CPB通过mb_type确定而在其他宏块中,需要专门支出(传输)coded_block_pattern 表示六个bit亮度和色度 8x8 块可能含有非零的变换系数幅值。对预测模式不等于Intra_16x16 的 宏 块 , 比 特 流 中 存 在 coded_block_pattern 且 变 量 CodedBlockPatternLuma 和CodedBlockPatternChroma :2bit 色度CPB:CodedBlockPatternLuma = coded原创 2020-08-18 16:03:42 · 811 阅读 · 0 评论 -
H264---去块滤波deblocking
块效应(blocking artifact)在运动剧烈的场景常能观察到图像出现小方块,小方块在边界处呈现不连续的效果原因1、h.264在编码过程中对像素残差进行了DCT变换,变换后得到的DCT系数是与每个像素都相关的,这些系数代表了被变换数据的基础色调与细节。h.264在DCT变换后对DCT系数进行了量化,量化能有效去除相邻像素间的空间冗余,也就是说会抹去元素数据的部分细节。比较理想的情况是量化抹去人眼无法识别的细节部分,但是在低码率的情况下就会导致原始数据的细节丢失过多。而且,DCT变换时基于块的,原创 2020-08-17 15:07:32 · 1164 阅读 · 0 评论 -
H264---帧间编码---宏块的帧间预测解码
链接地址:H.264/AVC视频编解码技术详解GitHub代码地址一、帧间预测宏块类型在讨论帧内预测的章节中我们已经讨论过部分宏块类型的分类。我们知道,对于帧间编码的宏块,其划分方式可以分为两步,其一为宏块级划分,其二为子宏块级划分。下面分别讨论这两个步骤。1.1 帧间预测宏块划分我们知道,对于P宏块,其宏块级划分有4种方式:16×16、16×8、8×16和8×8。此外还存在两种模式即P_8x8ref0和P_Skip模式。其定义如下表所示:其中,P_8x8ref0表示虽然宏块是按照8×8划分,原创 2020-08-15 15:59:02 · 1408 阅读 · 0 评论 -
H264---参考列表----初始化、重排序、已解码图像的标记
一、参考帧列表在上一篇博文中我们已知,对于每一个P帧和B帧的解码都需要从解码图像缓存DPB中选择某个参考帧。DPB中的参考帧可分为短期参考帧和长期参考帧两种,分别按照PicNum和LongTermFrameIdx索引。通过这两个索引值可以在参考帧列表中获取对应的参考帧图像。解码不同的帧类型时,参考帧列表不同。当解码一个P或SP帧时,使用一个参考帧列表RefPicList0;当解码一个B帧时,使用两个参考帧列表RefPicList0和RefPicList1。执行过程如下:对参考帧列表进行初始化;若r原创 2020-08-15 14:13:01 · 1904 阅读 · 0 评论 -
H264---帧间编码---帧间预测编码(2):解码、显示顺序与图像管理
H.264/AVC视频编解码技术详解GitHub代码地一、基本概念nalu按照解码顺序frame_num送入解码器解码解码后的图像按照播放顺序POC(picture_order_count)进行存储和播放(由于B帧的存在,解码顺序和显示顺序会有差异)frame_num和POC通过slice_header传输:某一帧图像在解码完成后,可能会被保存于解码图像缓存中,用于后续图像帧间预测的参考帧。在解码图像缓存中,用于P帧或B帧帧间编码的参考帧图像保存为一个或两个参考帧列表,列表中参考帧的顺序可原创 2020-08-15 13:57:47 · 1470 阅读 · 0 评论 -
H264---码率控制---CBR、VBR、ABR、CVBR四种编码方式
1、CBR编码(固定比特率)在流式播放方案中使用CBR编码最为有效。使用CBR编码时,比特率在流的进行过程中基本保持恒定并且接近目标比特率,始终处于由缓冲区大小确定的时间窗内。CBR编码的缺点在于编码内容的质量不稳定。因为内容的某些片段要比其他片段更难压缩,所以CBR流的某些部分质量就比其他部分差。此外,CBR编码会导致相邻流的质量不同。通常在较低比特率下,质量的变化会更加明显。采用CBR编码方式时节目合成时间会短一些,但文件的长度会大一些(即相同时长的节目会占用更多的空间或者相同的空间只能容纳更短的节目原创 2020-08-23 17:11:17 · 2753 阅读 · 0 评论 -
H264---skip宏块(无像素残差,无MVd)与dierct预测模式(无MVd)
B_Skip类型宏块(200503版标准,表7-14最后一行): 解码时,通过Direct预测模式(时间或空间)计算出前、后向MV后,直接利用前、后向MV得到像素预测值。像素重构值=像素预测值B_Direct_16*16 类型宏块(200503版标准,表7-14第一行):有像素残差,无运动矢量残差(MVD)。解码时,通过Direct预测模式(时间或空间)计算出前、 后向MV后,利用前、后向MV得到像素预测值。然后,像素重构值=像素预测值 像素残差解码值B_Direct_16*16,它很特殊,它的名字里原创 2020-08-12 16:35:41 · 746 阅读 · 0 评论 -
H264---参考图像序列标记 (marking)操作的语义
重排序(reordering)操作是对参考帧队列重新排序,而标记(marking)操作负责将参考图像移入或移出参考帧队列。dec_ref_pic_marking( ) { if( nal_unit_type = = 5 ) { // no_output_of_prior_pics_flag 仅在当前图像是 IDR 图像时出现这个句法元素,指明是否要将前面已解码的图像全部输出。 no_output_of_prior_pic原创 2020-07-30 22:59:53 · 508 阅读 · 0 评论 -
H264---MV---MV(预测矢量)=MVP(预测运动矢量)+MVD(运动矢量残差)
MVP是根据帧内相领块A,B,C的MV预测得到的,然后把当前点o加上MVP,获得新的匹配点x,在新点x的基础上进行搜索,获得mcost最小的点y,y与x的差为MVD,那么o 与y之间的向量为MV=MVP+MVD(相邻块的运动矢量通常有很高的相关性,因而每个运动矢量可以用其相邻的预先编码的矢量进行预测。一个预测矢量MVp建立于先前运动矢量的计算,并且一般只有MVD(当前运动矢量与MVp的差值)被编码和传输。这种方法建立基于运动预测矢量与运动补偿分割和附近矢量的可用性的相关性上。帧间预测简要说明首先根据当原创 2020-07-27 13:43:07 · 1901 阅读 · 0 评论 -
H264---熵编码---CAVLC(上下文自适应的变长编码Context-based Adaptive Variable Length Coding)
https://blog.csdn.net/shaqoneal/article/details/54701241原创 2020-08-23 15:34:51 · 389 阅读 · 0 评论 -
H264---播放顺序POC(pic_order_cnt)---pic_order_cnt_type=0、1、2 + POC和framenum比较
一、基本概念1、编码顺序H.264的码流输出顺序便是编码顺序,所以在编码B帧的时候,由于B是双向预测,需要先编码后面编码帧P/I,这时候先输出I/P,后面才有B帧,我们在解码段拿到相应的I/P帧后,不能马上丢到buffer list里面,还需要等待后面的B帧,解码B帧后再reorder。2、frame_num每个参考帧都有一个依次连续的frame_num 作为它们的标识,这指明了各图像的解码顺序。在非参考帧的slice header中也会出现frame_num,不过该语法元素只有在参考帧才有意义。H原创 2020-07-23 14:15:37 · 3807 阅读 · 1 评论 -
H264---帧/场编码模式选择---PAFF MBAFF frame_mbs_only_flag mb_adaptive_frame_field_flag field_pic_flag
1、片头的field_pic_flag ,指定当前图像是帧编码(0)还是场编码(1)。这个元素在同一图像的所有片中应具有相同值。2、sps中的frame_mbs_only_flag 和mb_adaptive_frame_field_flag再加上本句法元素共同决定图像的编码模式。1、frame_mbs_only_flag (位于sps) = 0 表示编码视频序列的编码图像可能是编码场或编码帧。 = 1 表示编码视频序列的每个编码图像都是一个仅包含帧宏块的编码帧2、mb_a原创 2020-07-23 00:48:22 · 1793 阅读 · 0 评论 -
h264---熵编码---CABAC
H.264採用两种方法进行熵编码:CAVLC编码和CABAC编码算法。CABAC????熵编码模式标识entropy_coding_mode=1採用基于上下文的自适应二进制算术编码算法(CABAC),可以充分利用上下文信息和算术编码的长处,使得编码后的平均码长更逼近图像的信息熵,达到最佳的编码效率。採用CABAC算法进行编码,可以提高大约10%的编码率详细编码步骤:1二值化:CABAC使用二进制算术编码,所以要将数据先转换为二进制数据,这些原始数据包含变换系数和运动矢量等。转换后二进制数据为可变长编原创 2020-08-23 15:33:01 · 619 阅读 · 0 评论 -
H264---宏块与宏块对
假设 A、B 是上下相邻的两个 MB:在非宏块对的情况下:A、B宏块序号不连续,相差图像一行宏块个数。即按光栅扫描顺序编号。在帧宏块对的情况下:A、B宏块序号连续,即按锯齿扫描顺序编号。A、B 组成不变。A 称为顶帧宏块,B 称为低帧宏块。在场宏块对的情况下:A、B宏块序号连续,即按锯齿扫描顺序编号。但是这个时候的 A 是由原来 A、B 两个宏块中的奇数行像素组成,称为顶场宏块;而 B 是由原来 A、B 两个宏块中的偶数行像素组成,称为低场宏块。帧宏块对的构成场宏块对的构成采用MBAFF与不采原创 2020-07-03 15:35:50 · 379 阅读 · 0 评论 -
H264---I帧、P帧、B帧、IDR帧、序列GOP 帧内/帧间预测
1、I帧 帧内压缩(非参考帧 帧内编码帧 关键帧) 压缩率7(使用JPEG压缩)2、P帧 帧间压缩(前向参考帧) 压缩率20 采用运动补偿的方法传送它与前面的 I 或 P 帧的差值及运动矢量(预测误差) 解码时必须将 I 帧中的预测值与预测误差求和后才能重构完整的 P 帧图像; P 帧属于前向预测的帧间编码。它只参考前面最靠近它的 I 帧或 P 帧; 作为后面P帧、B帧的参考帧????可能造成解码错误的扩散;3、B帧 帧间压缩(前后参考帧) 压缩率50原创 2020-06-15 12:06:34 · 724 阅读 · 0 评论 -
H264---nalu
NALU结构//NALU单元之间用start_code间隔NALU:(Network Abstract Layer Unit)网络抽象层单元。SODB:String Of Data Bits (原始数据比特流, 长度不一定是8的倍数,故需要补齐,是由VCL产生)。RBSP:(Raw Byte Sequence Payload)原始字节序列载荷。EBSP为扩展字节序列载荷(Encapsulated Byte Sequence Payload//在h264的文档中,并没有EBSP这一名词出现,但是在原创 2020-06-14 18:45:29 · 609 阅读 · 1 评论 -
H264---重要参数:时间戳、量化参数QP、档次Profile、级别Level
时间戳rtp_timestamp:https://blog.csdn.net/jasonhwang/article/details/7316128RTP timestamp是用时钟频率(clock rate)计算而来表示时间的。timestamp表示每帧的时间标签RTP传输中如何判断两包是不是同一帧: 1、通过每帧最后一个RTP的marker标志区别帧 2、最可靠的方法是查看相同RTP timestamp包为同一帧。两帧之间RTP timestamp的增量 = 时钟频率 / 帧率 其中原创 2020-06-14 18:59:17 · 4710 阅读 · 0 评论 -
H264---片slice 和 宏块Macroblock
H.264(八)Slice HeaderH.264(九)Slice数据和宏块结构原创 2020-06-14 18:34:38 · 1213 阅读 · 0 评论 -
H264---图像参数集(PPS)---语法成员+读取
通常情况下,PPS类似于SPS,在H.264的裸码流中单独保存在一个NAL Unit中,只是PPS NAL Unit的nal_unit_type值为8;而在封装格式中,PPS通常与SPS一起,保存在视频文件的文件头中。图像参数集PPS的定义在H.264的协议文档中,PPS的结构定义在7.3.2.2节中,具体的结构如下表所示:1、pic_parameter_set_id slice会...原创 2020-06-15 12:38:46 · 385 阅读 · 0 评论 -
H.264---序列参数集(SPS)---宽高获取
Sequence Paramater Set(NAL Unit=7)SPS和PPS在某些视频处理框架通常作为解码器实例的初始化信息使用。SPS中保存了一组编码视频序列(Coded video sequence)的全局参数。所谓的编码视频序列即原始视频的一帧一帧的像素数据经过编码之后的结构组成的序列。而每一帧的编码后数据所依赖的参数保存于图像参数集中。SPS和PPS一般处于码流的起始位置,但...原创 2020-04-21 16:54:02 · 1319 阅读 · 0 评论 -
H264---H.264/AVC 的各大主流编解码器JM、x264、Xvid、T264、ffmpeg、ffdshow + JM&HM源码分析
在H.264标准文档里规定的数据流格式(即裸流格式,称为字节流格式),协议里并没有规定编解码器的具体结构和实现方法。下面介绍几款主流&开源的编解码器:1、JMJM是H.264/AVC的制定方,ISO/IEC官方提供的一个参考软件,就像ISO/IEC的其他MPEG标准一样。它的主要目的,是给出H.264标准的实现示例,而不是为了成为一个实用的软件。这一点成为了它与其他编解码器,明显区别...原创 2020-04-18 13:21:31 · 2316 阅读 · 1 评论 -
H264---H.264/AVC 三种配置Profiles(base、main、extended)和帧内/帧间预测 RDO外的模式选择方法
Profiles:Base Main Extended三种配置对应不同的应用场合:1、基本配置: 这种配置看名称也可以猜到,它具有基本的编解码性能和抗错能力,主要应用在低延时的电视会议,和可视电话中。这里的抗错能力是指,解码器在传输过程中,对出现的错误数据位流的一种应对能力。这种能力通常为:错误检测、重新传输、错误校正和其他错误处理措施。2、主流配置: 可以看到它在I像片帧内预测和P像片...原创 2020-08-12 16:58:21 · 1142 阅读 · 0 评论 -
H264---H.264/AVC 中的宏块、片、帧、场
1、H.264的宏块就像MPEG-1和MPEG-2一样,H.264的宏块,也是编码标准的基本处理单元,通常它的大小也为16x16像素。但在H.264的简介一文中我们就说过,H.264的预测图块可以小到4x4像素。所以这也促成了,16x16像素的宏块,可以接着再划分成子宏块这一操作。在实际的H.264编码时,可能会使用8x8、或4x8、或8x4、或4x4像素的子宏块,也有可能是它们的组合。/...原创 2020-04-18 12:50:14 · 1075 阅读 · 0 评论 -
H264---FMO(flexible Macroblock Order灵活宏块顺序)→多片组 slice_group_map_type 帧&片组&片的关系
可以参考毕厚杰的《新一代视频压缩编码标准》H.264的分层结构和画面划分是和MPEG-2、MPEG-1不同的地方,也是预测图块可以小到4x4像素的基础1、H.264/AVC(数据处理流程)的分层结构(1)视像编码层(Video Coding Layer, 简称VCL),用于有效的表达视像内容,主要负责数据编码。(2)网络抽象层(Network Abstraction Layer,简称NA...原创 2020-04-18 12:14:53 · 1326 阅读 · 0 评论 -
H264---从零实现一个H.264码流解析器
【从零实现一个H.264码流解析器】:(一):从码流中找到NALU(二):导入指数哥伦布解码实现并初步解析NALU(三):解析序列参数集SPS的句法元素(四):生成句法元素跟踪trace文件(五):解析图像参数集PPS的句法元素(六):解析片头部Slice_Header的句法元素...原创 2020-04-18 11:08:33 · 970 阅读 · 1 评论 -
H264---H264中的语法元素符 熵编码(基本4 哥伦布编解码4...)
I帧:关键帧,属于帧内压缩(空间冗余信息)P帧:前向参考(前向差别帧):参考前面的一个关键帧/p帧B帧:双向参考帧(双向差别帧)原创 2020-06-15 13:01:21 · 489 阅读 · 0 评论 -
H264---封装格式:字节流格式(AnnexB)、AVCC 、RTP打包格式
NALU可以封装成2种:有序字节流的封装AnnexB + IP网络的RTP打包封装字节流格式(AnnexB)和RTP格式流浅析①AnnexB格式:开始前缀(00000001或000001)+NALU数据,针对H.320电话会议。 绝大部分编码器的默认输出格式 一共有两种起始码start_code: ①3字节的0x000001 被一帧被拆分成多个slice时的NALU使用3...原创 2020-03-14 15:21:21 · 5584 阅读 · 1 评论 -
H264---H.264及结构组成 具体可去ITU-T官网下载H.264文档
H264基本原理H264基本原理https://www.jianshu.com/p/97b4dc8c7f00H264压缩技术主要采用了以下几种方法对视频数据进行压缩。包括: 帧内预测压缩,解决的是空域数据冗余问题。 帧间预测压缩(运动估计与补偿),解决的是时域数据冗徐问题。 整数离散余弦变换(DCT),将空间上的相关性变为频域上无关的数据然后进行量化。 CABAC压缩。经过压缩后的...原创 2020-02-14 20:08:51 · 1348 阅读 · 2 评论 -
x264 -----FFmpeg与libx264接口源代码简单分析
FFmpeg与libx264接口源代码简单分析–雷霄骅//libx264对应的AVCodec结构体AVCodec ff_libx264_encoder = { .name = "libx264", .long_name = NULL_IF_CONFIG_SMALL("libx264 H.264 / AVC / MPEG-4 AVC / M...原创 2020-02-29 15:31:57 · 223 阅读 · 0 评论 -
x264编码过程分析(二)核心函数x264_slice_write()
(1)调用x264_nal_start()开始输出一个NALU。//x264_macroblock_thread_init()设定了宏块编码数据指针p_fenc[0],p_fenc[1],p_fenc[2]在fenc_buf[]中的位置,//以及宏块重建数据指针p_fdec[0],p_fdec[1],p_fdec[2] 在fdec_buf[]中的位置(2)x264_macroblock_...原创 2020-02-28 21:37:11 · 284 阅读 · 0 评论 -
x264--log系统
libx264中输出日志的API函数x264_log()/**************************************************************************** * x264_log: ****************************************************************************//...原创 2020-02-28 17:34:40 · 879 阅读 · 0 评论 -
x264编码过程分析(一)概述
雷神 x264编码先看雷神的 再来看:待整理的一个栏目的博客这里只摘录个人觉得梗概的部分,详细跳转雷神x264源代码简单分析:概述x264编码主要分4部分:1、x264_encoder_open()用于打开编码器,其中初始化了libx264编码所需要的各种变量。它调用了下面的函数:x264_validate_parameters():检查输入参数(例如输入图像的宽高是否为正数)。...原创 2020-02-28 14:49:46 · 694 阅读 · 0 评论