FFMPEG 的视频开发基础和FFMPEG 结合 LVGL 显示和FFMPEG 的对讲机实现
目录
FFMPEG 的视频开发基础和FFMPEG 结合 LVGL 显示和FFMPEG 的对讲机实现
回顾
- 上一篇的内容
音频播放
音频的编码
音频的解码
-- 明明可以在板子上安装播放器,为什么我要学习解码呢?
我现在想去听歌,得到了一个文件 1.mp3
拿到这个文件:程序解码播放呢还是直接来个 mpg123 播放更加方便呢?
为什么学习解码:
不是所有的音频都是固定的文件的! 电话、语音通话,有没有具体存入文件
这样就不是文件的播放,而是实时数据的解码 + 播放
任何的播放器都很难做到!
做一些产品:
实时的对话、实时视频通话的,实时解码工作
编码的意义:
我要把音频做压缩 降低带宽
FFMPEG 的视频开发基础
1、视频/摄像头基本参数
-- 分辨率:
19201080
1280720
800600
640480
320*240……
-- 帧率:
每秒输出的图片数量 如30FPS 60FPS 正常监控摄像头: 15FPS 25FPS 30FPS
运动摄像头/高速摄像头支持 60 、90、120、240、甚至更高
以正常手机为例子:
基本上手机都支持 60FPS 稍微好一点手机还支持 90FPS/120FPS
手机最高标准 240FPS
工业领域有超高频率的相机 甚至达到 1000 以上 FPS
-- 输出格式:
- RGB 格式->只在某个厂商的开发板(单片机)上带的摄像头 OV2640 见到过
- MJPEG/JPEG->图像流数据(比较常见的类型,一般只在相机领域用)
- YUV:今天应该第一次接触,也是你开发音视频中摄像头环境不可缺失的知识点
2、常见原始视频格式讲解
-- YUV 的来源什么时间:
YUV 早期来源于显示的显像管,早期的电视
早期的电视只有一个颜色标准: 黑和白,黑白电视
黑白电视像素 0-255 个等级 0 代表最黑 255 代表最白->灰度像素 当时为了表示这种像素,于是产生了一个 Y(亮度)
随着社会的发展,黑白电视不满足现状,发展了出彩色电视
在黑白电视的基础下增加了两个像素 U(饱和度) V(色度)
-- 彩色电视的每个像素点: Y(亮度)U(饱和度) V(色度)-3 个字节
跟 RGB 一样也是表示一个像素点格式
-- 研究表明:
人的眼睛是一个非常不敏感的器官
在看到 连续播放超过 24FPS 图片的时候,人就会认为这是动画、视频 人的眼睛对 颜色不敏感 对亮度很敏感
这就是为什么 OLED 屏幕在高亮度你会感觉屏幕显示好真实
为什么 亮度普遍 450-1000nit LCD 屏幕。你会感觉显示效果不如 OLED 原因
-- 人们发现了这个特点后:
- 认为 YUV 太过于浪费资源了,从最开始 YUV1:1:1 ->现在也叫做 YUV444
- 做了第一次压缩 得到了 YUV422 : Y:U:V=4:2:2 = 2:1:1
- 做了第二次压缩: YUV420 : Y:U:V = 4:1:1
其中y就代表一个像素点
-- 所有的摄像头最终输出的都是 YUV
-- YUV 分为很多的种类:
-
YUV420P, NV12都是 YUV 的不同的存储格式
-
YUV420P 为例:
YYYYYYYYYYYYY
UUUUUVVVVVV
- NV12:
YYYYYYYYYYYY