H264和MPEG4起始码(startcode)

视频文件解码与起始码(startcode) 研究 1. H.264起始码在网络传输h264数据时,一个UDP包就是一个NALU,解码器可以很方便的检测出NAL分界和解码。 但是如果编码数据存储为一个文件,原来的解码器将无法从数据流中分别出每个NAL的起始位置和终止位置,为此h.264用起始码来解决这一问题。(mpeg-4的startcode在后面讨论)   H.264编码时,在每个NAL前添加起始码 0x000001,解码器在码流中检 阅读详情

http://blog.chinaunix.net/space.php?uid=20751538&do=blog&id=165746

1. H.264起始码
  在网络传输h264数据时,一个UDP包就是一个NALU,解码器可以很方便的检测出NAL分界和解码。但是如果编码数据存储为一个文件,原来的解码器将无法从数据流中分别出每个NAL的起始位置和终止位置,为此h.264用起始码来解决这一问题。
 
  H.264编码时,在每个NAL前添加起始码 0x000001,解码器在码流中检测到起始码,当前NAL结束。为了防止NAL内部出现0x000001的数据,h.264又提出'防止竞争 emulation prevention"机制,在编码完一个NAL时,如果检测出有连续两个0x00字节,就在后面插入一个0x03。当解码器在NAL内部检测到0x000003的数据,就把0x03抛弃,恢复原始数据。
   0x000000  >>>>>>  0x00000300
   0x000001  >>>>>>  0x00000301
   0x000002  >>>>>>  0x00000302
   0x000003  >>>>>>  0x00000303
 
 附上h.264解码nalu中检测起始码的算法流程 
 for(;;)
 {
    if next 24 bits are 0x000001
    {
        startCodeFound = true
        break;
    }
    else
    {
        flush 8 bits 
    }
 }// for(;;)

 if(true == startCodeFound)
 {
     //startcode found
     // Flush the start code found
     flush 24 bits 
     //Now navigate up to next start code and put the in between stuff
     // in the nal structure.
     for(;;)
     {
         get next 24 bits & check if it equals to 0x000001
         if(false == (next 24 bits == 000001))
         {
             // search for pattern 0x000000
             check if next 24 bits are 0x000000
             if(false == result)
             {
                 // copy the byte into the buffer
                 copy one byte to the Nal unit              
             }
             else
             {
                 break;
             }
          }
          else
          {
              break;
          }
       }//for(;;)
   }
  2. MPEG4起始码
        MPEG4的特色是VOP,没有NALU的概念,仍使用startcode对每帧进行分界。MPEG4的起始码是0x000001. 另外MPEG4中很多起始码也很有用,比如video_object_sequence_start_code 0x000001B0 表示一个视频对象序列的开始,VO_start_code 0x000001B6 表示一个VOP的开始. 0x000001B6之后的两位,是00表示 I frame, 01 表示 P frame, 10 表示 B frame.


H.264码流格式 H.264码流格式 SODB: String Of Data Bits 原始数据比特流, 熵编码输出结果, 以bit为单位。 RBSP: Raw Byte Sequence Payload 原始字节序列负载, 在SODB最后加上trailing bits. EBSP: Extent Byte Sequence Payload 扩展字节序列负载, RBSP里面加入防伪起始码字节(0x03) 阅读详情

相关推荐

H264数据格式解析

H264和MP4的关系 MP4是H264的打包格式,H264是视频数据的格式 MP4由索引信息和H264视频数据组合而成,有索引信息可以保证丢了一包数据之后剩下的数据仍然可以继续使用 MP4的媒体信息(例如媒体长度)和视屏数据是分开存储的 MP4的数据组织很自由,不一定按照时间排序,可能后一秒的图像排序在前一秒图像的前面 MP4格式文件解析 https://www.cnblogs.com/ranson7zop/p/7889272.html MP4格式由若干个不同的box组成,打包和解包时都以box为单

qq_34613314的博客 9914

H264字节流编码格式

H264编码格式——字节流格式

weixin_44651073的博客 1847

音视频(3)---VCL层和NAL层的讲解

2.1.5.3. 当pic_order_cnt_type ==2;这种方法不会出现B帧,换言之就是不能出现连续的非参考帧并且解码输出的顺序和显示顺序一样。

m0_52298757的博客 228

视频文件头解析--mpeg-个人对mpg文件结构的理解

1、一个mpg文件可以只包含视频内容,那么文件开头以0x000001B3作为起始码 2、以0x000001BA 开头,就意味着同时包含音频数据和视频数据,如果没有音频数据,则以0x000001B3开头 3、一个mpg文件可以包含多个pack,每个pack的起始码都是0x000001BA ,pack没有结束码,一般遇到下一个0x000001BA 开头,就意味着此pack结束。 4、Pack

simon的天空 1万+

滑模控制算法——基本原理(附MATLAB程序)

选择一个滑模面和是设计参数。是滑模面函数,通常我们希望系统状态在的面上滑动。我们以一个简单的二阶系统作为示例,其状态空间方程为:是系统矩阵是输入矩阵是输出矩阵假设我们的系统如下:滑模控制算法的核心在于设计合适的滑模面和控制律,并分析系统在滑模面上的稳定性。通过上述公式和步骤,可以有效地设计滑模控制器,以处理具有非线性和不确定性的动态系统。总的来说,滑模控制算法因其鲁棒性和灵活性在处理复杂控制问题中表现出色,但在实际应用中需要精心设计以克服抖振现象和其他潜在问题。BuxuABDC。

qq_35623594的博客 2万+

XC95144XL-10TQG144I Xilinx XC9500XL 高性能 CPLD

XC95144XL-10TQG144I 属于 Xilinx 的 XC9500XL 高性能 CPLD 家族,是一颗面向 3.3V 低电压系统的可编程逻辑器件。该器件以小封装、高速响应和良好的系统兼容性为设计目标,常用作系统控制/ glue-logic、I/O 缓冲、状态机、总线桥接与接口协议前端等场景中的可重编程逻辑单元。产品支持现场(in-system)编程与 IEEE-1149.1 JTAG 边界扫描,能在系统板上直接更新逻辑。

2403_90082736的博客 1059

H264视频编码基础

​H.264是MPEG(Moving Picture Experts Group)和 VCEG(Video Coding Experts Group)联合开发的一个比早期研发的MPEG 和 H.263 性能更好的视频压缩编码标准,这就是被命名 为 AVC(Advanced Video Coding),也被称为 ITU-T H.264 建议和 MPEG-4 的第 10 部分的标准,简称为 H.264/AVC 或 H.264。这个国际标准已经与 2003 年 3 月正式被 ITU-T 所通过并在国际上正式颁布。

布里啾啾提不哩多的博客 1638

告别LM2596!用LM5175打造400W自动升降压数控电源(附完整电路图与代码)

本文详细介绍了如何利用LM5175芯片设计400W自动升降压数控电源,替代传统的LM2596方案。通过四开关Buck-Boost拓扑结构,LM5175实现了高达98%的转换效率和400W大功率输出,支持无缝升降压切换。文章涵盖芯片选型、电路设计、PCB布局及STM32数控实现,为工程师提供完整的实践指南。

weixin_27032989的博客 598

H.264和MPEG4起始码(startcode)

1. H.264起始码 在网络传输h264数据时,一个UDP包就是一个NALU,解码器可以很方便的检测出NAL分界和解码。但是如果编码数据存储为一个文件,原来的解码器将无法从数据流中分别出每个NAL的起始位置和终止位置,为此h.264用起始码来解决这一问题。 H.264编码时,在每个NAL前添加起始码 0x000001,解码器在码流中检测到起始码,当前NAL结束。为了防止NAL内部出现0x00

zhuqing_739的专栏 5688

基于PLC的矿用排水控制系统设计【附代码】

(3)矿用排水控制系统的软件设计 研究设计了矿用排水控制系统的软件,包括PLC程序的编写和上位机监控画面的设计。(2)矿用排水控制系统的硬件设计 研究对矿用排水控制系统的硬件进行了选型和设计,包括矿用多级耐磨离心泵、三相异步防爆电机等执行设备的选型,以及控制系统所需用到的各类型传感器、PLC的I/O点分配及选型。(1)矿用排水控制系统的现状分析 研究首先对矿井排水系统的现状进行了分析,指出了现有系统存在的问题,如自动化程度低、劳动强度大、设备维护困难等。✅ 具体问题可以私信或查看文章底部二维码。

lagougongzuoshi的博客 1173

告别unittest!用Pytest+Fixture重构你的Python测试代码(附实战案例)

本文详细介绍了如何从unittest迁移到Pytest框架,重点解析了Pytest的Fixture机制如何提升测试效率和代码简洁性。通过实战案例展示了Pytest在减少代码量、提升调试效率和资源管理方面的优势,帮助开发者重构Python测试代码。

weixin_26749245的博客 206

MPEG1和MPEG2码流结构分析

上次测试MPEG4和H264的时候,由于要进行分帧输入解码器测试,因此进行了MPEG4和H264码流的简单分析,MPEG4码流的分析见上次记录的那篇文章。 目前又要开始测试MPEG1和MPEG2码流的解码了,同样,对这两种码流也进行一下简单的分析,通过搜集资料和查看两种标准的协议13818-2和11172-2,了解这两种码流格式的一些基本结构,今天把它们也在此做一个简单的整理和记录,也便于以后的

心之所向,身之所往 3645

自抗扰控制(ADRC)理论与工程实践:8.1 自适应ADRC与参数在线整定

自适应自抗扰控制(AADRC)针对传统固定参数ADRC在动态变化系统中的局限性,提出通过在线调整关键参数(如观测器带宽ω₀、控制器带宽ω_c)以适应对象动态变化。主要方法包括基于稳定性理论的自适应律设计和基于性能指标的优化调节,前者保证闭环稳定但设计复杂,后者通过梯度搜索或模糊规则实现性能优化但缺乏严格稳定性证明。当前挑战在于非线性时变系统的稳定性分析、参数变化速率限制及工程实现的计算负担。AADRC拓展了ADRC在变参数系统(如无人机、软体机器人)中的应用,是迈向自主智能控制的关键技术。

技术工作者 214

MPEG4码流简单分析

文章转自:http://www.rosoo.net/a/201111/15315.html   测试解码器测试了很久,由于需要将H264和MPEG4的码流进行分析和判断,并逐帧输入解码器进行测试,如何正确的分析码流,并将Video送给我们的解码器做Decode的呢?耐着性子找了很多资料,主要也因为我本身对MPEG4和H264的码流的格式并不懂,自己在视频编码方面的积累也实在是太少了,所以也确实

探索。。。发现。。。 1035

【2026年米哈游春招 - 3月14日 -第一题- 行列相等】(题目+思路+Java&C++&Python解析+在线测试)

摘要 本文解决了一个矩阵行列和匹配问题:统计矩阵中行和等于列和的所有行列对数量。算法首先计算每行和每列的元素和,然后利用哈希表统计各行列和的出现次数。通过遍历列和并查询对应的行和出现次数,高效计算出匹配对数。该方法时间复杂度为O(nm),空间复杂度为O(n+m),适用于大规模矩阵数据。代码实现了Python、Java和C++版本,通过哈希表优化避免了暴力枚举,显著提高了计算效率。

m0_73659489的博客 83

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

H.264视频码流NALU分割

H264的主要目标是为了有高的视频压缩比和良好的网络亲和性,为了达成这两个目标,H264的解决方案是将系统框架分为两个层面,分别是视频编码层面(VCL:Video Coding Layer)和网络抽象层面(NAL:Network Coding Layer)

noevil的博客 1210

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

H264 Start Code (Annex B)

网上有很多信息,但是大多不全面; 详细了解这类问题,还是要看英文标准文档; 这里我查看的文档是(H264标准文档): Joint Video Team (JVT) of ISO/IEC MPEG & ITU-T VCEG (ISO/IEC JTC1/SC29/WG11 and ITU-T SG16 Q.6) 30th Meeting: Geneva, CH,

chinabinlang的专栏 2618

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

H264 视频文件 帧格式 传输封装等 杂碎

Standards Track [Page 2] RFC 3984 RTP Payload Format for H.264 Video February 2005 1. 按照RFC3984协议实现H264视频流媒体 nalu单元 包起始 0x 00 00 00 01 H.264 NAL格式及分析器 http://hi.baidu.com/zsw%5Fdavy/b ... c4

写写画画 976

Linux_10:编码、H264、GOP

负责以网络所要求的方式进行打包和传送NAL层一般由三部分组成,分别是StartCode(起始码:必须是00 00 00 01)、NALU Header(NALU 头部)、NALU Payload(具体传输的视频内容)比方说一串H264码流的NALU:00 00 00 01 68 43 A0 25 56 2E...[00 00 00 01]是StartCode也就是起始码[68] 是NAL头部[43 A0 25 56 2E...]就是NALU Payload的数据。

weixin_51368966的博客 976

AV1解码器DAV1D 源码分析:annexb.c

#include "config.h" #include <assert.h> #include <errno.h> #include <stdio.h> #include <stdint.h> #include <stdlib.h> #include <string.h> #include "input/d

DANFBAORE的博客 1955

VCL层和NAL层

VCL 层(视频编码层):H.264/H.265 等编码标准的核心层,负责视频数据压缩,包括帧内 / 帧间预测、变换量化、熵编码等,输出压缩后的原始视频数据流。 NAL 层(网络抽象层):封装 VCL 输出的数据为 NAL 单元(NALU),添加头部标识(如数据类型、优先级),适配网络传输(如 IP、广播),处理丢包、优先级控制等,实现编码数据与网络的解耦。

2501_90923997的博客 669
上一篇: 关于MPEG-4的Comment读取
下一篇: Android视频采集+H264编码
eustoma
博客等级 码龄18年 79粉丝 54原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值