转自:https://blog.csdn.net/tracydawn123/article/details/31773153

一、MP4格式基本概念

MP4格式对应标准MPEG-4标准(ISO/IEC14496)


二、MP4封装格式核心概念

1  MP4封装格式对应标准为 ISO/IEC 14496-12(信息技术 视听对象编码的第12部分: ISO 基本媒体文件格式/Information technology Coding of audio-visual objects Part 12: ISO base media file format)

 附-- 标准免费下载: Freely Available Standards    http://standards.iso.org/ittf/PubliclyAvailableStandards/index.html

2  MP4封装格式是基于QuickTime容器格式定义,媒体描述与媒体数据分开,目前被广泛应用于封装h.264视频和ACC音频,是高清视频/HDV的代表。

3  MP4文件中所有数据都封装在box中(对应QuickTime中的atom),即MP4文件是由若干个box组成,每个box有长度和类型,每个box中还可以包含另外的子box(称container box)。

 一个MP4文件首先会有且只有一个“ftyp”类型的box,作为MP4格式的标志并包含关于文件的一些信息;之后会有且只有一个“moov”类型的box(Movie Box),它是一种container box,子box包含了媒体的metadata信息;MP4文件的媒体数据包含在“mdat”类型的box(Midia Data Box)中,该类型的box也是container box,可以有多个,也可以没有(当媒体数据全部引用其他文件时),媒体数据的结构由metadata进行描述。

4  MP4中box存储方式为大端模式。一般,标准的box开头会有四个字节的box size。

好的,铺垫做好了,下面直接进入正题!

近期本人在用自己的开发板对ffmpeg解码做一些改进,目标是将ffmpeg的解码部分交给硬件编解码单元VPU(Video Processing Unit)去做,而ffmpeg用来读取文件,并解析文件,以加快解码速度,并释放CPU资源(事实上单核ARM cotexA9解码1920x1088的视频,根本解不动啊...)。

这里补充两个概念:

解析:即解封装,封装格式有很多种,常见的如avi、mp4、rmvb等等。

解码:将压缩的多媒体数据格式还原,视频数据压缩格式也有很多,目前比较流行的有H.264、mpeg2、mpeg4等等。

使用VPU进行解码的时候,交给VPU的数据必须是严格的H.264数据,否则VPU是不认的。本以为ffmpeg的解析工作可以和VPU的解码完美配合,但事与愿违,ffmpeg解析后的一个packet(即一个视频帧)的格式为4byte的box大小+帧数据,而真正的H.264的数据为4byte的头(00 00 00 01)+帧数据。因此,每一帧的数据在丢给VPU之前,需要将头部的4bit用00 00 00 01替换。下图为ffmpeg提取的packet数据(我打印出来每个packet的前5位,和packet size)。

可以看到,每一个packet的前4byte是帧大小(mp4是大端存储),如第一组数据:0x14efa = 85754,即出去前4byte后的大小。

在使用VPU进行H.264解码的时候,还需要sps和pps数据,第一帧的数据头应当包含sps和pps。(至于这两个参数是干什么的,这里就不赘述了,网上的资料很多)。好的,下面来说如何找出sps和pps:

1、找到avcC,在mp4的包头中,包含了avcC这4个字母的asic码,对应的十六进制数分别是61 76 63 43。因此,需要在mp4包头中找出avcC。下图为用altraedit查看的mp4的包头数据。

可以看到,61 76 63 43对应了avcC。至于前面的mp4包头信息,可以参考mp4官方文档给出的解释,这里不再解释。

2、根据下表所示的信息,找出对应的sps和pps位:

因此,对应上表,可以得出如下信息:

avcC 61 76 63 43
版本号 1
AVCProfileIndication 64
profile_compatibility 0
AVCLevelIndication 29
reserved(6bit)+NALU长度(2bit) ff
reserver(3bit)+sps个数(5bit) E1
sps长度 00 0B
sps内容 67 64 00 29 AC CE C0 78 02 26 40
pps个数 01
pps长度 00 04
pps内容 68 EA 5B 83

好的,到此为止就在mp4的包头中找到了sps和pps数据,可以根据此方法写出你的code啦,很简单吧!

--------------------- 本文来自 Freesnail_ 的CSDN 博客 ,全文地址请点击:https://blog.csdn.net/tracydawn123/article/details/31773153?utm_source=copy

从MP4头信息中提取sps和pps数据相关推荐

  1. 解析MP4文件中的sps和pps

    一.MP4格式基本概念 MP4格式对应标准MPEG-4标准(ISO/IEC14496) 二.MP4封装格式核心概念 1  MP4封装格式对应标准为 ISO/IEC 14496-12(信息技术 视听对象 ...

  2. H264中的SPS、PPS提取与作用

    From: http://blog.csdn.net/sunnylgz/article/details/7680262 牛逼的视频会议网站:http://wmnmtm.blog.163.com/blo ...

  3. 如何用oracle从身份证信息中提取出生日期?

    在项目开发中,有从身份证信息中提取出生日期的需求: 1.对18位身份证,因为有多个表,所以用到它们的关联,示例如下: update pfapperosoninformation  p set p.pb ...

  4. 获取头信息header中参数access_token失败,获取header头信息中带下划线参数失败

    今天获取header头信息中参数access_token返回为null,本地用postman测试没问题,发布到线上环境就出问题了.         后面发现是nginx代理的过程中参数被过滤了,ngi ...

  5. H264 数据提取sps 和 pps 信息

    PS:在项目中运用到了硬件编码卡编H264 数据,由于解码需要sps和pps才能解除帧,那么就需要提取sps 和pps. 在使用x264 编码中 可以直接通过帧类型获取到.但是使用硬件编码则需要自己运 ...

  6. nginx_rtmp中解析sps和pps

    摘要:一首先这里要啰嗦一下,为什么要提取sps和ppssps主要包含了视频的分辨率和profile类型信息.pps是什么暂时没有关注.二在nginx-rtmp中,如何提取到sps和pps信息呢?直接找 ...

  7. 【Android音视频开发】【032】Android从RTMP流中提取H264和AAC数据进行播放

    前篇 在上篇博客中,我们已经讲解过,如何从RTMP流中提取H264和AAC数据,并保存为FLV,AAC,H264等文件 这篇博客我们讲解,怎么通过Android多媒体框架播放这些数据 上篇博客的重点在 ...

  8. ffmpeg 推流 在H264中插入SPS、PPS 头

    1. SPS PPS头的重要性 SPS PPS 头在编解码H264时非常重要,里面不仅包含了许多关于视频流的相关信息:比如宽高等.还标志着一个视频流的开头. 一般视频流前开头第一帧是SPS 第二帧是P ...

  9. Android 视频边下边播,MP4头信息在后调整头信息

    mp4视频有两种格式,一种视频头信息在前,这种直接可以先缓存头信息,然后直接边下边播,还有一种是头信息在最后,这种情况下则需要处理mp4的头信息,并调整mp4的格式. mp4文件的格式如下图 图1 从 ...

最新文章

  1. ssh可以连接但sftp不可以连接解决方案
  2. WebService中因 URL 意外地以“/******”结束,请求格式无法识别。
  3. 苹果mac闪退_自从Mac有了WPS,从此和双系统说再见!
  4. net core体系-web应用程序-4asp.net core2.0 项目实战(1)-11项目日志解决方案
  5. [转]迭代、集合、字典表和列表
  6. 【转载保存】lucene正则查询使用注意
  7. pat乙级相当于什么水平_雅思6.5是什么水平?相当于托福多少分?
  8. python 的多线程执行速度
  9. MySQL学习笔记(六)-MySQL中库和表的管理
  10. Zookeeper权限控制ACL详解
  11. thinkphp3.2.3 找不到自定义模型_Orion HTC VIVE高性价比动作捕捉,虚拟直播 支持UE4.25 导入自定义模型...
  12. 18 ubuntu 远程原生_CNCF公布中国云原生调查报告:49%使用容器技术,Kubernetes 应用率达 72%...
  13. python0_python中0o1010是多少
  14. InteliJ Idea通过maven创建webapp
  15. Node.js:Express
  16. Internet 信息服务承载说明 即IIS安装说明
  17. ios 通知接收两次_苹果健康体系又进一步,iOS 14.3支持有氧适能通知
  18. 图标文字垂直居中对齐方法
  19. Unity 接入有道智云AI - 图片翻译
  20. 看完即会,抓取微信小程序数据包教程

热门文章

  1. 南京擎天科技公司java笔试题_南京擎天科技 笔试面试 经验
  2. 阿里云函数计算读写表格存储(跳坑指南)
  3. 一条SQL语句统计总数及各状态数
  4. AutoCAD如何移动坐标原点
  5. 论文上传arXiv步骤
  6. 全球及中国薄覆铜层压板行业发展前景预测与投资战略规划研究报告2022-2028年
  7. 【LOSOL】周志01:开题
  8. Spark Streaming概述
  9. 图解css3:核心技术与案例实战. 2.11 属性选择器
  10. 浙江高院称网上拍卖汽车不受《拍卖法》约束