从0开始写Qt视频播放器----视频播放器的技术组成

Qt视频播放器实现(目录)

什么是视频

我们这里讲的视频,通常也包括了音频。因为没有声音的画面播放几乎是不可接受的。

这样暗含了一个事实,那就是视频总是包括视频数据和音频数据两部分。

Video 表示视频;

Audio 表示音频;

视频播放器播放什么

如同本专栏介绍描述的一样,一个视频播放器通常可以播放本地的mp4等视频文件。

这些视频文件里都包括了视频数据和音频数据混在一起,但是结构化的混在一起。

而不是杂乱无章的混在一起。

早期的本地视频播放器

这是最早的视频播放器,比如 realplayer , 超级解霸。

这些播放器只能播放本地文件,主打一个格式适配的多。

rmvb, mp4, avi , mov , 等等。

现在的播放器

现在随着网络视频的普及,播放网络视频已经非常普遍。

播放网络视频通常是使用 rtmp webrtc 等视频传输协议,把服务器端的视频流拉拉取到电脑内存里,解码播放。比如抖音的客户端,YouTube网页客户端。

这些播放器不管是在浏览器里的插件,还是PC客户端的软件,都是一样的。

都是拉流解码渲染:

和早期的本地视频文件播放器一样,网络上传回来的数据包也是视频包根音频包交叉在一起的。

就像传送带上又又萝卜,又有白菜一样。

上图中,有的包里是视频数据,有的包里是音频数据。只有拿到包,拆开才知道里面到底是音频还是视频数据。

显卡GPU

将YUV数据送给GPU显卡去计算,按照对应的色彩空间解码转换为RGB数据才可以被显示器显示。

如果你的电脑没有独立显卡,那么你的电脑也一定有集成显卡。

Windows电脑,打开任务管理器,可以看到GPU利用率。这就是你电脑的显卡。

如上图所示,我的笔记本是Intel处理器,内置集成显卡有两个计算单元。

声卡

声卡不是我们的重点,因为计算量几乎都在视频数据部分。

解码器 FFmpeg

由于音视频格式五花八门,在压缩解压缩各个阶段格式又不一样。所以工作量庞大二繁琐。

这样的格式又是标准的,所以早就被大名鼎鼎的FFmpeg搞定了。

FFmpeg既可以编码也可以解码。

我们使用FFmpeg主要是用来从文件或者网络流中提取出Video 包和 Audio 包。

再利用FFmpeg将视频包解码得到H264格式,以及音频包解码得到 AAC 格式。

FFmpeg在视频播放器中的工作主要是下图中绿色部分:

播放器实现的主要工作

播放器主要的工作就是多线程处理上述各个模块的数据:

猜你喜欢

转载自blog.csdn.net/ClamReason/article/details/133098466