博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
h264&acc
阅读量:5817 次
发布时间:2019-06-18

本文共 2342 字,大约阅读时间需要 7 分钟。

hot3.png

aac音频:

     打包aac音频必须加上一个adts(Audio Data Transport Stream)头,共7Byte,adts包括fixed_header和variable_header两部分,各28bit。

fixed_header

syncword 12b 固定为0xfff
id 1b 0表示MPEG-4,1表示MPEG-2
layer 2b 固定为00
protection_absent 1b 固定为1
profile 2b 取值0~3,1表示aac
sampling_frequency_index 4b 表示采样率,0: 96000 Hz,1: 88200 Hz,2: 64000 Hz,3:48000 Hz,4: 44100 Hz,5: 32000 Hz,6: 24000 Hz,7: 22050 Hz,8: 16000 Hz,9: 12000 Hz,10: 11025 Hz,11: 8000 Hz,12: 7350 Hz
private_bit 1b 固定为0
channel_configuration 3b 取值0~7,1: 1 channel: front-center,2: 2 channels: front-left, front-right,3: 3 channels: front-center, front-left, front-right,4: 4 channels: front-center, front-left, front-right, back-center
original_copy 1b 固定为0
home 1b 固定为0

variable_header

copyright_identification_bit 1b 固定为0
copyright_identification_start 1b 固定为0
aac_frame_length 13b 包括adts头在内的音频数据总长度
adts_buffer_fullness 11b 固定为0x7ff
number_of_raw_data_blocks_in_frame 2b 固定为00

mp3音频:

mp3音频不需要加adts头。

6.h264帧类型判断

当nalu type=5或1时,表示后面跟着的数据是视频数据,下面我们只列出前2项。

first_mb_in_slice Golomb编码 一般为0,一个slice为一帧图像
slice_type Golomb编码 帧类型,2、4、7、9表示I帧,0、3、5、8表示P帧
,1、6表示B帧。

7.mp4转ts

     我们假设mp4格式中的视频编码为h.264,音频编码为aac。我们从mp4中获取的视频信息包括:sps、pps、dts、pts、帧率、帧数据、ticks(每秒滴答数)。音频信息包括:pts、采样频率、声道数、帧数据。mp4文件的dts和ts文件的dts是需要进行换算的,都是初始值 + 增量,但是增量计算是不同的。

视频信息获取:

sps stsd.avc1.avcC
pps stsd.avc1.avcC
dts stts
pts stts + ctts
帧率 帧个数 / 总时长
timescale trak.mdia.mdhd
帧数据 stsc + stco + stsz

音频信息获取:

pts stts
采样频率 trak.mdia.mdhd
声道数 stsd.mp4a
帧数据 stsc + stco + stsz

8.mp4中关于h264和aac的说明

     mp4的stsd原子中包含很多关键的音视频编解码元信息。对于视频数据,不同的编解码格式stsd中包含的子原子类型是不同的。MP4的视频H.264封装有2种格式:h264和avc1,只要看到这两个FOURCC(四字节编码)。就可以肯定是h.264编码,区别在于slice是否有起始码。对于音频数据,stsd中包含的子原子只会是mp4a,mp4a又包含了一个子原子esds,判断音频编码格式的是esds中的第十一个字节,如果是0x40则说明是aac编码,如果是0x69则说明是mp3。

  • AVC1 描述:H.264 bitstream without start codes.一般通过ffmpeg转码生成的视频,是不带起始码0×00000001的,但是带有4字节的长度。

  • H264 描述:H.264 bitstream with start codes.一般对于一下HDVD等电影的压制格式,是带有起始码0×00000001的。

     除了avc1和h264还可能是下面的FOURCC,只是名字不同而已。

  • MEDIASUBTYPE_AVC1 'AVC1' H.264 bitstream without start codes.

  • MEDIASUBTYPE_H264 'H264' H.264 bitstream with start codes.

  • MEDIASUBTYPE_h264 'h264' Equivalent to MEDIASUBTYPE_H264, with a different FOURCC.

  • MEDIASUBTYPE_X264 'X264' Equivalent to MEDIASUBTYPE_H264, with a different FOURCC.

  • MEDIASUBTYPE_x264 'x264' Equivalent to MEDIASUBTYPE_H264, with a different FOURCC.

转载于:https://my.oschina.net/u/727148/blog/666829

你可能感兴趣的文章
6、Web Service-拦截器
查看>>
Flask 源码流程,上下文管理
查看>>
stream classdesc serialVersionUID = -7218828885279815404, local class serialVersionUID = 1.
查看>>
ffmpeg相关资源
查看>>
ZAB与Paxos算法的联系与区别
查看>>
java 读取本地的json文件
查看>>
Breaking parallel loops in .NET C# using the Stop method z
查看>>
Android Content Provider Guides
查看>>
修改故障转移群集心跳时间
查看>>
[轉]redis;mongodb;memcache三者的性能比較
查看>>
微软职位内部推荐-Sr DEV
查看>>
用计算器计算“异或CRC”
查看>>
LINK:fatal error LNK1123: 转换到 COFF 期间失败: 文件无效或损坏 (转)
查看>>
让你的WPF程序在Win7下呈现Win8风格主题
查看>>
深刻理解C#的传值调用和传引用调用
查看>>
Windows环境配置Apache+Mysql+PHP
查看>>
JDBC二查询(web基础学习笔记八)
查看>>
监听器(web基础学习笔记二十二)
查看>>
802.11 学习笔记
查看>>
Leetcode-Database-176-Second Highest Salary-Easy(转)
查看>>