一、YUV的格式
1.planner模式
2.packet模式
3.半planner模式
https://www.jianshu.com/p/538ee63f4c1c YUV格式详解
二、H264基础概念
1.SPS
a.profile
b.视频长宽
2.PPS
a.I帧
b.P帧
c.B帧
3.PTS和DTS
PTS: 显示时间戳,表示解码后显示的时间
DTS: 解码时间戳,表示送入解码器的顺序
4.H264存储的两个形态
a.Annex B :
StartCode :NALU单元,开头一般是0001或者001
防竞争字节:为了区分 0 0 0 1,它采用0 0 0 0x3 1作为区分
多用于网络流媒体中:rtmp、rtp格式
b.AVCC :
表示NALU长度的前缀,不定长 用4、2、1来存储这个NALU的长度
防竞争字节
多用于文件存储中 mp4的格式
1.音频播放过快,视频慢,如何选择丢帧
2.码率和分辨率都会影响视频的清晰度
3.生产者和消费者多多的关系
4.C++死锁的成因:
A.忘记释放锁
B.单线程重复申请锁,对同一个事物加两遍锁
C.双线程多锁申请,都是指对一个事物加锁
D.环形锁申请 A锁B、B锁A
5.sps和pps的区别
SPS是序列参数集 0x67
PPS是图像参数集 0x68
在SPS序列参数集中可以解析出图像的宽,高和帧率等信息。而在h264文件中,最开始的两帧数据就是SPS和PPS,这个h264文件只存在一个SPS帧和一个PPS帧。
7.AAC和PCM的区别
AAC在数据开始时候加了一些参数:采样率、声道、采样大小
FFMPEG:
图片如何合成视频
编码流程:
1.av_register_all
2.为AVFormatContext 分配内存
3.打开文件
4.创建输出码流AVSream
5.找到编码器
6.打开编码器
7.写文件头,没有的就不写入
8.循环编码视频像素数据->视频压缩数据
循环编码音频采样数据->音频压缩数据 ———>AVFrame转化为AVPacket
9.将编码后的视频码流写入文件 ——>AVPacket转化为AVFormat函数
10.关闭编码器
11.写文件尾
12.关闭资源文件
解码流程:
1.av_register_all
2.创建AVFormatContext的对象上下文
3.打开文件
4. avformat_find_stream_info
5.找到解码器
6.打开解码器
7.创建AVCodecContext上下文
8.av_read_frame :将avPacket数据转换为avFrame数据
glUniform1i() ——>这个可以设置对应纹理的第几层
glTexSubImage2D() 和glTexImage2D区别————>替换纹理的内容