章节
- 像素存储格式 YUV & RGB
- I、B、P 帧
- pts & dts
- 音视频开发技术可以做的事情
前言
在学习音视频编程的过程中,在解决问题的过程中,总会遇到音视频当中的一些专业名词,而解决问题,这些专业名词是必须理解的,否则就会出现云里雾里的感觉-俗称-懵。这给我个人的学习过程带来不小的问题,遂决定将这段时间当中遇到的一些必须掌握的名词概念做个记录,以供速查之用。
1、像素存储格式 YUV & RGB
RGB
1.RGB 即 三原色,红、绿、蓝。
2.每个元素占用 1 个字节,即 24 bit。
YUV
1.YUV 也是一种像素存储格式,摄影机拍摄的影像文件存储格式即为 YUV,采用 YUV 像素存储格式对帧进行存
储,是为了保证这种文件能在黑白电视上能够播放。
2、I、B、P 帧
I 帧
I 帧是关键帧采用帧内压缩技术,I帧是全信息帧、一个视频文件当中的I帧越多,则文件体积越大。
B 帧
B 帧是前后参考帧,它属由帧间压缩技术。也就是说在压缩成 B帧前,它会参考它前面的非压缩视频帧,和后
面的非压缩的视频帧,记录下前后两帧都不存放的“残差值”,这样可以达到更好的压缩率;
所以加入当前视频帧的编排顺序为 I B B P 则当视频文件播放时,解码的顺序为I->P->B->B 即关键帧I、向前
参考帧 P、向前向后参考帧B、向前向后参考帧B。
P 帧
P帧是向前参考帧,也就是它参考的是前一个关键帧的数据。P帧也属于帧间压缩技术,相对于 B帧来说,P帧的压缩率要比B帧低。
3、pts & dts
pts (presentation timestamp)
视频渲染用的时pts、即以AVStream 的 AVRational (time_base)为计时单位的时间戳,加入 pts 时100
,AVStream 的 time_base 为 1/25 (即1s播放帧数为25,FPS为25),则对应到日常时间戳 为 100 * (1/25)
= 4s。
dts(decode timestamp)
视频packet 解码为 frame 时的时间戳。之所以需要dts 是因为 视频中除了I 帧还有可能含有 B帧。
DTS主要用于视频的解码,在解码阶段使用.PTS主要用于视频的同步和输出.在display的时候使用.在没有B frame的情况下.DTS和PTS的输出顺序是一样的.
4、音视频开发技术可以做的事情
视频编解码-后台
应用在后台的视频编解码技术常用的是 FFmpeg,一款优秀的视频编解码应用技术,属于软件编解码。
rtmp 协议,网络直播推流等。
视频编解码-移动终端
如iOS、Android移动端经常用到的音视频编解码sdk ijkplayer,是对ffplay.c的二次封装(ffmpeg)属于硬编硬解技术、因为硬件中内置了编解码芯片。
openCV
计算机视觉库、可以做图像识别、当然也可以实现音视频编解码,因为其底层也是调用 FFmpeg
openGL
图像渲染库,你以为微视、抖音上的小姐姐那么美若天仙的原因是什么?答:是渲染啊!问:靠什么渲染?答:openGL 啊。