当前位置: 首页 > article >正文

音视频项目—基于FFmpeg和SDL的音视频播放器解析(六)

介绍

在本系列,我打算花大篇幅讲解我的 gitee 项目音视频播放器,在这个项目,您可以学到音视频解封装,解码,SDL渲染相关的知识。您对源代码感兴趣的话,请查看基于FFmpeg和SDL的音视频播放器

如果您不理解本文,可参考我的前一篇文章音视频项目—基于FFmpeg和SDL的音视频播放器解析(五)

解析

我们今天文章将会解析负责解码的线程 decodethread,我们先看看 .h 文件的代码:

#ifndef DECODETHREAD_H_
#define DECODETHREAD_H_

#include"thread.h"
#include"avpacketqueue.h"
#include"avframequeue.h"

class DecodeThread : public Thread
{
public:
    DecodeThread(AVPacketQueue* packet_queue, AVPacketQueue* frame_queue);
    ~DecodeThread();
    int Init(AVCodecParameters* par);
    int Start();
    int Stop();
    void Run();
private:
    AVCodecContext* codec_ctx = nullptr;
    AVPacketQueue* packet_queue = nullptr;
    AVFrameQueue* frame_queue = nullptr;
};

#endif

可以看到,其实结构上与负责解封装的线程 demuxthread 差不多,公有函数都有构造函数,析构函数,Init,Start,Stop,Run。不过私有成员发生了一些变化,之前的 AVFormatContext 变成了现在的 AVCodecContext,之前的包队列(AVPacketQueue)变成了现在的帧队列(AVFrameQueue)。

有兴趣的朋友可以看看下面的 demuxthread 源码对比一下:

#ifndef DECODETHREAD_H_
#define DECODETHREAD_H_

#include"thread.h"
#include"avpacketqueue.h"
#include"avframequeue.h"

class DecodeThread : public Thread
{
public:
    DecodeThread(AVPacketQueue* packet_queue, AVPacketQueue* frame_queue);
    ~DecodeThread();
    int Init(AVCodecParameters* par);
    int Start();
    int Stop();
    void Run();
private:
    AVCodecContext* codec_ctx = nullptr;
    AVPacketQueue* packet_queue = nullptr;
    AVFrameQueue* frame_queue = nullptr;
};

#endif

最后,我们看一些构造函数,其余的呢我们下一篇文章再讲。

DecodeThread::DecodeThread(AVPacketQueue* packet_queue, AVPacketQueue* frame_queue){
    this->packet_queue = packet_queue;
    this->frame_queue = frame_queue;
}

这比较好理解,就是将两个私有成员,一个包队列(AVodecPacket),一个帧队列(AVFrameQueue)进行初始化。

好了,今天的知识理解起来比较轻松,不做总结了。

欲知后事如何,请听下回分解。


http://www.kler.cn/a/133745.html

相关文章:

  • 202009 青少年软件编程等级考试C/C++ 二级真题答案及解析(电子学会)
  • 精选100+套HTML可视化大屏模板源码素材
  • Objective-C语言的数据类型
  • 将 AzureBlob 的日志通过 Azure Event Hubs 发给 Elasticsearch(1.标准版)
  • Excel 技巧15 - 在Excel中抠图头像,换背景色(★★)
  • 华为EC6110T-海思Hi3798MV310_安卓9.0_通刷-强刷固件包
  • 多线程(初阶)
  • 【IPC】消息队列
  • 针对CSP-J/S的每日一练:Day9
  • Sqlite安装配置及使用
  • vscode中Chinese (Simplified)汉化无效解决方法
  • 我叫:选择排序【JAVA】
  • 教程:使用 Keras 优化神经网络
  • qml制作简单的播放器--MediaPlayer
  • 如何使用贝锐花生壳内网穿透远程访问JupyterNotebook?
  • springboot项目yml文件中使用${}配置
  • linux下安装python3.8(有坑)
  • ping命令使用示例解析
  • ubuntu20.04在docker下运行ros-noetic进行开发
  • 【电路笔记】-最大功率传输
  • vulhub redis-4-unacc
  • ​软考-高级-系统架构设计师教程(清华第2版)【第14章 云原生架构设计理论与实践(P496~526)-思维导图】​
  • 文本向量化
  • PTA-6-42 设计门票(抽象类)
  • [C/C++] 数据结构 LeetCode:用队列实现栈
  • 【碰碰球】弹珠游戏-微信小程序项目开发流程详解