H264 NAL_AUD
AUD
一般文档没有对AUD进行描叙,其实这是一个帧开始的标志,字节顺序为:00 00 00 01 09 f0
从结构上看,有start code, 所以确实是一个NALU,类型09在H264定义里就是AUD(分割器)。大部分播放器可以在没有AUD的情况下正常播放。
紧随AUD,一般是SPS/PPS/SEI/IDR的组合或者简单就是一个SLICE,也就是一个帧的开始。像Flash这样的播放器,每次需要一个完整的帧数据,那么把2个AUD之间的数据按照格式打包给播放器就可以
from: http://blog.csdn.net/wutong_login/article/details/39178593
相关实例
Apple产品系列中,使用HLS实现直播,HLS可以简单理解为HTTP+M3U8+TS。
一、问题引出
最近遇到一个问题,MP4文件转成TS后,在Apple上播放会有帧错乱现象(前后帧显示时来回跳),但在Windows下的播放器如VLC显示都没有问题。
二、初探
小武同学根据十几年的经验判断,第一感觉认为是DTS或PTS错乱导致,但通过分析后发现DTS和PTS显示正常。
I,B,P帧的时间戳都没有问题。
问题可能出在哪里了呢?伟大的架构师LiuQi同学使用FFMPEG把无法正常播放的TS流文件重新打包了一下(不做转码),发现播放变得正常了。好吧,开始比较两个TS文件的区别(b-1.ts为原始文件,c-1.ts为FFMPEG转封装后的文件)。
先用StreamAnalyzer看一下吧:
SPS和PPS完全一样。
再使用ElecardEye看一下:
Gop结构,Slice信息,也都没有问题。
搞了两天,不管是TS层面,PES信息,还是ES信息上都没有看出有什么区别,见了鬼了!
三、深入分析
看来得用最后的手段了,二进制比较。但从哪个层面比较呢?由内到外吧,先把ES内容剥出来比较一下。
照妖镜一出,小鬼无藏身之处,图中红色部分为原文件中多出的内容。
分析一下吧,00 00 00 01 09 E0,这是NAL_AUD吗(Access Unit Delimiter),访问单元分隔符,表示一个帧数据的结束,只是多一个结束就会导致显示错乱吗?试着把原文中多出的部分删除掉,显示果然正常了。
还是不解,为什么VLC显示没有问题呢?看一下FFMPEG中解码H.264的代码吧:
在FFMPEG的解码过程中,遇到NAL_AUD直接跳过,查找下一个NAL去了,如果连续两个就跳两次,所以不会有问题;但在Apple的播放器中,如QuickTime,会严格把每帧数据和帧分隔符进行配对。
四、总结
在上文中之所以出现了两个NAL_AUD,是因为进行MP4转TS时,代码中没有判断帧后是否已经有了NAL_AUD,而是直接在每帧后面添加了一个,对于要求严格的播放器来讲,就出问题,看来代码要严谨,来不得半点马马虎虎啊!
H264 NAL_AUD相关推荐
- H264 nal_aud, TS格式分析;分析一帧数据包(H264)
一.分析一个TS文件的第一帧(SRS支持HLS协议产生的TS文件) 1. PAT(忽略) 2. PMT(忽略) 3. PES Packet(一帧数据) 通常一帧数据,就是一个PES包(一帧数据 = 一 ...
- 音视频开发(29)---深入浅出理解视频编码H264结构
深入浅出理解视频编码H264结构 编码流程: 那么 H.264 其编解码流程是怎么样的呢?其实可以主要分为 5 部分: 帧间和帧内预测(Estimation).变换(Transform)和反变换.量化 ...
- 使用librtmp进行H264与AAC直播
http://my.oschina.net/jerikc/blog/501948#OSC_h3_13 使用librtmp进行H264与AAC直播 发表于5个月前(2015-09-06 23:19) ...
- H264 帧、pps 、sps
H264帧 对于H.264而言,每帧的界定符为00 00 00 01 或者00 00 01. 例如下面是一个H264的文件片段 00 00 00 01 67 42 C0 28 DA 01 E0 08 ...
- php librtmp,使用librtmp进行H264与AAC直播
libx264 版本是 128 libfaac 版本是 1.28 1.帧的划分 1.1 H.264 帧 对于 H.264 而言每帧的界定符为 00 00 00 01或者 00 00 01. 比如下面的 ...
- 流媒体-H264协议-编码-x264学习-主要结构体(二)
流媒体-H264协议-编码-x264学习-相关概念x264编译及文件解析(一) 流媒体-H264协议-编码-x264学习-主要结构体(二) 流媒体-H264协议-编码-x264学习-主要函数(三) 流 ...
- 将视频 YUV 格式编码成 H264
首先开始的时候我们借用一张雷神的图帮助大家理解一下我们今天的操作究竟属于那一步. 从上图可以看出我们要做的,就是将像素层的 YUV 格式,编码出编码层的 h264数据. 首先熟悉一下今天我们要用到的 ...
- h264和h265多维度区别
h264和h265多维度区别 概述 h265旨在在有限带宽下传输更高质量的网络视频,仅需原先的一半带宽即可播放相同质量的视频,很多朋友不知道h264和h265如何区别,下面让我们一起来了解一下吧. 压 ...
- android ffmpeg 编码h264,Mac系统下ffmpeg+h264+flv编码的android录制屏幕实现2
接上一篇. activity_flv.xml xmlns:tools="http://schemas.android.com/tools" android:layout_width ...
最新文章
- 国内工业软件行业分析
- php和python哪个做第二语言-php之后如何选择第二语言?
- 拔号×××与站点×××的配置
- Ubuntu 重置MySQL密码
- 还是有点香!苹果官翻2018款iPad Pro及MacBook Air上架
- MongoDB - 分片管理
- 世界上公认最快的学习法 - 弗曼学习法
- Excel的Match函数详解
- Mac idea破解到2100年
- html5 元宵节送祝福,[元宵节祝福语简短5]元宵节祝福语简短
- 如何使用EasyNVR+CDN突破萤石云在直播客户端数量上的限制,做到低成本高性价比的直播...
- composer global require fxp/composer-asset-plugin:1.0.0的Not enough arguments解决
- iphone解锁那点事 (一)
- 服务器监控管理工具大全
- 问答系统QA的评价指标MAP、MRR、Accuracy@N
- win10快速关机_如何让win10开机默认开启小键盘?
- php做网站弊端,PHP 做网站真好用。
- 你知道怎么在wind上找公司评级信息吗?
- android os v2.0,免除升级烦恼 Android OS v2.2给力手机推荐
- uniapp路由跳转的六种方式
热门文章
- 操作系统-MIT6.S081学习
- 怎么画单极交流放大电路波形图_从吹风机电路中学习二极管的实际应用
- 【机器学习系列文章】第2.2部分:监督学习II
- Word2vec原理+实战学习笔记(一)
- fxp连接服务器显示密码错误,flashfxp连接提示连接失败 ()与列表错误
- 我们在企业里要做的不是抱怨,不是提意见和建议,而是真正地对公司作一些实质性的改进...
- 【数据层解决方案】NOSQL:Redis,MongoDB,ES
- No fallbackFactory instance of type class com.neuray.oa.security.service.system.api.factory.RemoteDe
- jq循环定时器动态切换网站标题
- 中文域名ping不通情况解决