【Qt】ffmpeg解码—照片提取、视频播放▲

目录

一、图像的成像原理:

RGB成像原理:

YUV成像原理:

二、多线程

三、ffmpeg解码(照片提取)

1.准备工作

(1)在工程文件夹里面新建三个文件夹

(2)在main函数中加入这两个

(3)在要解码的多线程子线程中加入

(4)在.pro文件工程里面加入

2.注册主键

3.打开视频文件

4.获取视频信息

5.判断是否有视频流

6.查找编码器

7.打开编码器

8.读取一帧压缩数据

9.读取一帧压缩数据,解码一帧数据

四、视频播放

1.paintEvent界面重绘事件

2.普通类如何使用信号与槽

3.在子线程中发送图片信号

4.在UI主线程槽函数接收


一、图像的成像原理:

RGB 和 YUV 是两种常见的颜色空间模型

  • RGB成像原理:

RGB 即红(Red)、绿(Green)、蓝(Blue),是一种基于三原色原理的颜色空间,在显示设备(如电脑显示屏、手机屏幕等)中,每个像素点都由红、绿、蓝三个子像素组成。通过控制这三个子像素的发光强度,就可以混合出各种不同的颜色

  • YUV成像原理:

YUV 是一种将亮度和色度分离的颜色空间。其中,Y 表示亮度,它反映了图像的明亮程度;U 和 V 表示色度,用于描述颜色的色调和饱和度,它们携带了图像的颜色信息

二、多线程

因为耗时逻辑就会造成UI卡顿,卡死或则白屏,所以不能在槽函数里面做太耗时操作(文件、解码都不行),所以使用了多线程,在UI主线程中,不执行耗时逻辑,耗时逻辑放在子线程去完成

三、ffmpeg解码(照片提取)

1.准备工作

(1)在工程文件夹里面新建三个文件夹

(2)在main函数中加入这两个

(3)在要解码的多线程子线程中加入

(4)在.pro文件工程里面加入

2.初始化文件相关操作

(1)注册主键

注册所有可用的编解码器、格式和协议等组件,这是使用 FFmpeg 进行编解码操作的第一步

av_register_all();

(2)打开视频文件

为 AVFormatContext 分配内存,然后打开指定的视频文件。AVFormatContext 用于存储输入视频文件的格式信息

    AVFormatContext *formatContext;

    //开空间

    formatContext=avformat_alloc_context();

    //打开输入视频文件

    int res=avformat_open_input(&formatContext,"../video/Warcraft3_End.avi",nullptr,nullptr);

    if(res<0)

    {

        qDebug()<<"open avformat_open_input fail";

    }

    else {

        qDebug()<<"success";

    }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值