首页 > 其他分享 >H.264

H.264

时间:2024-03-22 15:55:05浏览次数:13  
标签:编码 H.264 视频 解码 NAL 单元

什么是H.264

高度压缩数字视频编解码器标准。

H.264的数据格式是怎样的?

H.264是一种视频编码标准,定义了视频数据的压缩和编码方式,但没有规定特定的数据格式。然而,H.264编码生成的视频流通常会采用一种常见的容器格式来封装,以便存储和传输。常见的容器格式包括MP4 AVI MKV MOV等。
在H.264编码中,视频数据通常以帧为单位进行编码,每一帧都被分为多个宏块,并且通过帧内编码和帧间编码等技术进行压缩。具体的数据格式通常由所用的容器格式来定义,它决定了视频文件的组织结构、元数据、音频轨道和视频轨道等信息。

  • SPS和PPS这些都是H.264视频编码中的参数集,用于描述视频序列的特征和编码参数,保活分辨率、帧率、码率等。它们通常作为视频流的一部分存在,以便解码器能够正确解码视频流。

  • I帧、P帧和B帧:I帧是关键帧,完整地编码了一副图像;P帧和B帧则采用帧间预测技术,通过参考之前的帧来减少多余的数据。

  • NALU(Network Abstraction Layer Unit):NALU是H.264视频流的基本单元,它定义了视频数据的格式和传输方式。每个NALU包含了视频数据的一个片段,可以是SPS、PPS、I帧、P帧、B帧等。

  • 容器格式头信息:视频流通常会有一个容器格式的头部信息,用于存储视频的元数据、如视频时长、编码信息、音频轨道等。

  • H.264由视频编码层(VCL)和网络适配层(NAL)组成。其中VCL:H264编码/压缩的核心,主要负责将视频数据编码/压缩,再切分。

VCL是如何管理H264视频数据?

  • 压缩:预测(帧内预测和帧间预测)->DCT变化和量化->比特流编码;
  • 切分数据,主要为了第三。切边 宏块 是在VCL中的概念,一方面提高编码效率和降低误码率,另一方面提高网络传输的灵活性。

NAL的数据结构

struct NALUnitHeader {
    unsigned int forbidden_zero_bit: 1; // 禁止位,始终为0
    unsigned int nal_ref_idc: 2;        // NAL参考级别,指示NAL单元的重要性
    unsigned int nal_unit_type: 5;      // NAL单元类型,表示NAL单元的具体类型

    // 其他可选字段,如NAL单元类型为扩展类型时的扩展字段等
};
  • forbidden_zero_bit:1比特,始终为0,用于标记NAL头的起始。

  • nal_ref_idc:2比特,NAL参考级别,指示NAL单元的重要性,一般用于标记NAL单元的重要性,例如关键帧和非关键帧之间的区别。

  • nal_unit_type:5比特,NAL单元类型,表示NAL单元的具体类型,例如序列参数集SPS 图像参数集PPS I帧 P帧 B帧等。

H.264码流结构

  • Start Code Prefix:

  • 在H.264码流中,视频数据被划分为一系列的NAL单元(Network Abstraction Layers Units)。每个NAL单元都以一个起始码作为开头,通常是3或4个字节0x00 00 00 01或者0x00 00 01。

  • NAL头(NAL Unit Header)
    起始码之后的部分就是NAL头,包含了NAL单元的类型和一些控制信息,如参考级别、NAL单元类型等。

  • NAL单元数据:
    NAL单元头之后的部分是NAL单元的数据,具体内容取决于NAL单元的类型。
    不同类型的NAL单元包含了不同的信息,例如SPS(Sequence ParameterSet)、PPS(Picture Parameter Set)、I帧 P帧 B帧 等。

  • Slice数据:
    在编码的视频帧中,视频帧通常被分割为一个个的Slice,每个Slice包含了一部分宏块(macroblock)的数据。
    Slice的数据也被封装在NAL单元中,通过Slice头(SliceHeader)来描述Slice的类型和一些控制信息。

  • 音频数据(可选)
    在一些应用中,视频码流可能会包含音频数据,通常以AAC或其他音频编码格式进行压缩。

I帧 P帧 B帧

I帧:帧内编码图像帧,表示关键帧,采用类似JPEG压缩的DCT离散余弦变换压缩技术,可达1/6压缩比而无明显压缩痕迹。

P帧:前向预测编码图像帧,表示的是跟之前的一个关键帧或者P帧的差别,P帧是参考帧,它可能造成解码错误的扩散。

B帧:双向预测编码图像帧,本帧与前后帧的差别,B帧压缩率高,但解码耗费CPU;

IDR帧:即时解码刷新,首个I帧,是立刻刷新,使错误不致传播,IDR导致DPB(DecodedPictureBuffer参考帧列表--这是关键所在清空)清空;在IDR帧之后的所有帧都不能引用任何IDR帧之前的帧的内容;IDR具有随机访问的能力,播放器可以从一个IDR帧播放。

GOP:两个I帧之间是一个图像序列,一个GOP包含一个I帧。

解码时间戳和显示时间戳

当然,H264中还有两个重要的概念DTS和PTS
DTS(Decoding Time Stamp,解码时间戳解):读入内存中的比特流在什么时候开始送入解码器中进行解码。
PTS(Presentation Time Stamp,显示时间戳):解码后的视频帧什么时候被显示出来。

标签:编码,H.264,视频,解码,NAL,单元
From: https://www.cnblogs.com/doubleconquer/p/18089678

相关文章

  • ffmpeg 转码 H.265为 H.264
    树莓派3上omxplayer无法播放h.265编码的.mp4文件,需要进行转码.参考:  https://superuser.com/questions/1380946/how-do-i-convert-10-bit-h-265-hevc-videos-to-h-264-without-quality-loss单个文件:ffmpeg.exe-ixxx.mp4-map0-c:vlibx264-crf18-vfformat=......
  • I帧与IDR帧:H.264编码中的“图像守护者”
    目录导语I帧:图像传输的“基石”IDR帧:图像传输的“革新者”专业数据分析总结导语在数字视频传输领域,H.264编码标准是业界广泛采用的编码技术之一。H.264编码中的关键概念包括I帧和IDR帧。这两种帧在视频传输中扮演着“图像守护者”的角色,它们各自承担着不同的任务,共同确保视频数......
  • 流媒体播放器EasyPlayer播放H.265与H.264时进度条样式异常该如何解决?
    H5无插件流媒体播放器EasyPlayer属于一款高效、精炼、稳定且免费的流媒体播放器,可支持多种流媒体协议播放,可支持H.264与H.265编码格式,性能稳定、播放流畅,能支持WebSocket-FLV、HTTP-FLV,HLS(m3u8)、WebRTC等格式的视频流,并且已实现网页端实时录像、在iOS上实现低延时直播等功能。有用......
  • 流媒体播放器EasyPlayer播放H.265与H.264时进度条样式异常该如何解决?
    H5无插件流媒体播放器EasyPlayer属于一款高效、精炼、稳定且免费的流媒体播放器,可支持多种流媒体协议播放,可支持H.264与H.265编码格式,性能稳定、播放流畅,能支持WebSocket-FLV、HTTP-FLV,HLS(m3u8)、WebRTC等格式的视频流,并且已实现网页端实时录像、在iOS上实现低延时直播等功能。有......
  • H.264 和 H.265对比
    前言H.264标准正式发布于2003年3月,距今已经20多年了,但它仍然是当下最流行的视频编解码标准。H.265正式发布于2013年4月。虽然H.265标准是围绕着H.264进行制定的,也保留了原来的一些技术,但是在提升压缩率,改善码流质量,降低延时等方面使用了更为先进的技术。下面我将从编码原理,实际......
  • H.264中的帧
    导言高级视频编码(AVC)也称为H.264,是使用最广泛的视频压缩标准。它与所有主要的流式传输协议和容器格式兼容。当我们使用播放器播放一个视频时,通常会经过:解协议,解封装,音视频解码,音视频同步这几个步骤。其中H.264就是视频解码阶段的标准。通过解封装,可以将数据解析为H.264格式......
  • 码流格式: Annex-B, AVCC(H.264)与HVCC(H.265), extradata详解(转)
    原文:http://www.taodudu.cc/news/show-6091235.html?action=onClick1.前言介绍H.264结构的文章铺天盖地,无责任翻译、无责任转载以及部分经验之谈(目前搜索最靠前的一篇实际是对stackoverflow上答案的翻译。。链接后面给出了),所以缺的不是资料,是叙述准确的资料。来吧,看这篇整理就够......
  • EasyCVR视频融合平台Linux环境下CGO调用C接口推流异常,H.265转H.264失败的原因是?
    EasyCVR视频融合云平台采用云边端一体化架构,可以将分散在仓储各处的前端监控设备(如IPC、NVR等)集中接入,并提供实时视频监控、视频录像、云存储、录像检索与回放、智能告警、云台控制、平台级联、服务器集群等视频能力服务。通过实时高清视频监控,仓储管理人员可以高效地监管人员和货......
  • EasyCVR视频融合平台Linux环境下CGO调用C接口推流异常,H.265转H.264失败的原因是?
    EasyCVR视频融合云平台采用云边端一体化架构,可以将分散在仓储各处的前端监控设备(如IPC、NVR等)集中接入,并提供实时视频监控、视频录像、云存储、录像检索与回放、智能告警、云台控制、平台级联、服务器集群等视频能力服务。通过实时高清视频监控,仓储管理人员可以高效地监管人员和货......
  • 如何实现RTSP推送H.264、RTSP推送H.265(hevc)
    1.rtsp推送流程.主要分两部分:第一部分先发送信令;第二部分发送rtp包。信令流程:1.1先发送OPTIONS,OPTIONS比较常用,就不做详细说明了。1.2发送ANNOUNCE,发送ANNOUNCE主要是把要推送的音视频信息通过sdp格式传给服务器。关于sdp信息如何构造,对于h264请参考rfc6184.h265请参考r......