解决方案

h264文件视频存储格式和音频存储格式

seo靠我 2023-09-24 05:22:24

mp4封装

目录

h264视频流格式介绍

aac音频流格式介绍

h264视频文件读取

通过帧索引解析h264文件

通过解析h264结构读取文件

aac音频文件读取

mp4封装

初始化

数据封装

关闭mp4文件句柄

注意点

目录SEO靠我

h264视频流格式介绍

视频数据帧分为I帧,P帧,B帧,其中I帧为关键帧,所包含的图像信息最全,因而数据量最大,其他帧都有I帧通过计算而来

H264网络传输的结构

NALU头结构

长度:1byte

forbidSEO靠我den_bit(1bit) + nal_reference_bit(2bit) + nal_unit_type(5bit)

a) 位信息

bit    desc

F    禁止位,0表示正常,1表示错误,一SEO靠我般都是0

NRI    重要级别,11表示非常重要,一般取值为11、10、01

Type    nal_unit_type(表示该NALU的类型是什么,类型的具体取值可见下表)

b) nal_unit_tySEO靠我pe

nal_unit_type    0    1    2    3    4    5    6    7    8    9    10    11    12    13-23    24-3SEO靠我1

NAL类型    未使用    非IDR的片    片数据A分区    片数据B分区    片数据C分区    一个序列的第一个图像叫做IDR图像(立即刷新图像),IDR图像都是I帧    补充增强SEO靠我信息单元(SEI)    序列参数集(SPS)    图像参数集(PPS)    分界符    序列结束    码流结束    填充    保留    未使用

c) H264要求I帧为:帧分隔符+SPSSEO靠我+帧分隔符+PPS+帧分隔符+IDR

帧分隔符    SPS    帧分隔符    PPS    帧分隔符    IDR

0x00 00 01    0x67…    0x00 00 01    0x68SEO靠我…    0x00 00 01    0x65…

d) NALU start-code:0x00 00 00 01/0x00 00 01

H264 AVCC格式

a) Annex-B:没有NALU长度字节,SEO靠我使用start code分隔NALU,start code为三字节或四字节,0x000001或0x00000001,一般是四字节;SPS和PPS按流的方式写在一组GOP之前。

b) AVCC:使用NALSEO靠我U长度,固定字节,通常为4字节,分隔NALU;一般在每个NALU头部为4字节大端格式的长度字节,在一组GOP的头部包含extradata结构,用于存储sequence-header、SPS、PPS数据SEO靠我

c) 虽然AVCC格式不使用起始码,防竞争字节仍然存在

d) SPS和PPS被存储在了非NALU包中(out of band带外),即独立于基本流数据

e) mp4文件即是采用这种存储方式

aac音频流格SEO靠我式介绍

aac有9中规格(LC/Main/SSR/LD…),LC为常用规格

aac文件格式有两种ADIF,ADTS

a) ADIF:头信息只在文件首部,解码必须在首部开始,获取头信息后,剩余全是音频数据

b)SEO靠我 ADTS:每一帧都含有头信息,解码可以在任意位置

ADTS的头信息为两部分组成,其一为固定头信息,紧接着是可变头信息

a) adts固定头结构

b) adts可变头结构

adts头字段含义

a) syncwoSEO靠我rd:同步字,一般为二进制"1111 1111 1111",用于找出帧头在比特流中的位置

b) ID:MPEG 标示符

c) layer:指示使用哪一层

d) protection_absent:表示是否误SEO靠我码校验

e) profile:表示使用哪个级别的AAC,如01:Low Complexity(LC)即为AACLC

f) sampling_frequency_index:表示使用的采样率下标,如下图

g)SEO靠我 channel_configuration:声道数

0x00    0x01    0x02    0x03    0x04    0x05    0x06    0x07    0x08-0x0f

SEO靠我声道    双声道    三声道    四声道    五声道    5.1声道    7.1声道    保留

h) aac_frame_length:aac一帧数据大小,一个ADTS帧的长度包括ADTSSEO靠我头和raw data block

i) adts_buffer_fullness:是否是码率可变码流(0x7FF:可变)

j) number_of_raw_data_blocks_in_frame:表示ASEO靠我DTS帧中有number_of_raw_data_blocks_in_frame + 1个AAC原始帧,

所以说number_of_raw_data_blocks_in_frame == 0 表示说ADSEO靠我TS帧中有一个AAC数据块并不是说没有

h264视频文件读取

h264文件读取有两种方式:通过帧索引和通过解析h264结构

通过帧索引解析h264文件

所谓帧索引即是通过专门软件将h264文件中每一帧的信息做SEO靠我成索引存储在一个文件中,索引文件需要存储的信息有:

每一帧的地址(在源文件中的位置)

每次都从对应地址开始读取本帧数据

每一帧的数据大小

帧格式

需要表明是否为I帧

时间戳

该方法比较简单,在此不做赘述

通过解析h2SEO靠我64结构读取文件

h264文件每一帧都由分隔符隔开,分隔符或为0x00,0x00,0x00,0x01,或为0x00,0x00,0x01,解析时遇分隔符即为一帧起始,两个分隔符之间的即为一帧数据,紧跟分隔SEO靠我符的是该帧类型。

aac音频文件读取

adts头部信息包含一帧音频数据的大小,该大小包含7字节的头部,因此实际数据需要跳过头部读取,相应大小也应减去7。
“SEO靠我”的新闻页面文章、图片、音频、视频等稿件均为自媒体人、第三方机构发布或转载。如稿件涉及版权等问题,请与 我们联系删除或处理,客服邮箱:html5sh@163.com,稿件内容仅为传递更多信息之目的,不代表本网观点,亦不代表本网站赞同 其观点或证实其内容的真实性。

网站备案号:浙ICP备17034767号-2