• 视频播放器的技术组成


    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在视频播放器中的工作主要是下图中绿色部分:

    播放器实现的主要工作

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

  • 相关阅读:
    CCF CSP 俄罗斯方块
    NVIDIA CUDA Win10安装步骤
    【JS高级】js面向对象三大特性之继承_06
    Windows 11 新材质 Mica Alt 效果展示
    Java面向对象之——封装
    启明欣欣STM32开发板闪烁LED实验
    ‘conda‘ 不是内部或外部命令,也不是可运行的程序 或批处理文件。
    C++--简单实现定长内存池
    MySQL之数据库编程(了解语言结构)
    2023做车载测试真的可以远离内耗!转行车载月入20K!
  • 原文地址:https://blog.csdn.net/ClamReason/article/details/133098466