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

介绍

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

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

解析

接着上文,我们继续解析 videooutput 的函数

首先,我们看构造函数

cpp 复制代码
VideoOutput::VideoOutput(AVSync* avsync, AVRational time_base, AVFrameQueue* frame_queue, int video_width, int video_height){
    this->avsync = avsync;
    this->time_base = time_base;
    this->frame_queue = frame_queue;
    this->video_width = video_width;
    this->video_height = video_height;
}

这比较好理解,就是一些私有成员变量的赋值

Init 函数
cpp 复制代码
int VideoOutput::Init(){
    if(SDL_Init(SDL_INIT_VIDEO)){
        return -1;
    }
    win = SDL_CreateWindow("player", SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED, video_width, video_height, SDL_WINDOW_OPENGL | SDL_WINDOW_RESIZABLE);
    if(!win){
        return -1;
    }

    renderer = SDL_CreateRenderer(win, -1, 0);
    if(!renderer){
        return -1;
    }

    texture = SDL_CreateTexture(renderer, SDL_PIXELFORMAT_IYUV, SDL_TEXTUREACCESS_STREAMING, video_width, video_height);
    if(!texture){
        return -1;
    }

    yuv_buf_size = video_width * video_height * 1.5;
    yuv_buf = new uint8_t[yuv_buf_size];
}

SDL_Init 初始化视频设备

SDL_CreateWindow 创建窗口,后面是参数,这里不做深究。

SDL_CreateRenderer 创建渲染器,后面的参数也不做深究

SDL_CreateTexture 创建纹理

然后,赋值 yuv 数组长度为 1.5 倍,这设计到 YUV420 原理,这篇文章不做深究

最后,创建 yuv 数组

好了,今天就解析到这里。下文解析后面的函数。

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

相关推荐
愚公搬代码7 小时前
【愚公系列】《剪映+DeepSeek+即梦:短视频制作》046-转场:短视频一气呵成的秘密(什么是转场)
人工智能·音视频
PiaoShiSun14 小时前
小米手机浏览器缓存视频如何导出
缓存·智能手机·音视频
艾为电子15 小时前
【新品发布】攻克音频切换痛点|艾为 AW35331FDR 高保真音频开关全新登场
音视频
愚公搬代码17 小时前
【愚公系列】《剪映+DeepSeek+即梦:短视频制作》047-转场:短视频一气呵成的秘密(转场类型)
人工智能·音视频
开开心心就好17 小时前
一键隐藏桌面图标任务栏的实用工具
人工智能·pdf·音视频·语音识别·媒体·测试覆盖率·威胁分析
ai大模型中转api测评18 小时前
锁定一致性与音画同步:Grok 2.0 预热释放了哪些 AI 视频商用信号?
人工智能·音视频
想你依然心痛18 小时前
HarmonyOS 5.0音视频开发实战:基于ArkMedia Kit的实时直播与AI增强处理系统
人工智能·音视频·harmonyos
AI周红伟1 天前
AI自动盯盘与定时行情分析:OpenClaw股票辅助Agent集成完整使用指南-周红伟
运维·服务器·人工智能·音视频·火山引擎
YWamy1 天前
国产视频会议核心技术解析:架构、特性与全场景落地
音视频
AI视觉网奇1 天前
webrtc 硬编码
ffmpeg·webrtc