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

介绍

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

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

解析

我们继续解析 videooutput 的函数

RefreshLoopWaitEvent:
cpp 复制代码
#define REFRESH_RATE 0.01
void VideoOutput::RefreshLoopWaitEvent(SDL_Event* event){
    double remaining_time = 0.0;
    SDL_PumpEvents();
    while (!SDL_PeepEvents(event, 1, SDL_GETEVENT, SDL_FIRSTEVENT, SDL_LASTEVENT)){
        if(remaining_time > 0.0){
            this_thread::sleep_for(chrono::milliseconds(int64_t(remaining_time * 1000.0)));
        }
        remaining_time = REFRESH_RATE;
        videoRefresh(&remaining_time);
        SDL_PumpEvents();
    }   
}

SDL_PumpEvents:用于更新事件队列并处理事件

SDL_PeepEvents:用于从事件队列中获取特定类型的事件

如果 remaining_time 大于 0,则等待一会

接着给 remaining_time 赋值 0.01

接着调用 videoRefresh,更新 SDL

MainLoop:
cpp 复制代码
int VideoOutput::MainLoop(){
    SDL_Event event;
    while (true)
    {
        RefreshLoopWaitEvent(&event);
        switch (event.type){
        case SDL_KEYDOWN:
            if(event.key.keysym.sym == SDLK_ESCAPE){
                return 0;
            }
            break;
        case SDL_QUIT:
            return 0;
        default:
            break;
        }
    }
    return 0;
}

主循环函数

检测 SDL_Event 的类型

SDL_KEYDOWN:检测到按键的按压,如果是 escape,则退出

SDL_QUIT:如果类型为 QUIT(停止),则退出

好了,videooutput 这个类解析完了,我们最后可以看一下,main 函数是如何运行的,把总体运行起来。

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

相关推荐
电商API&Tina15 分钟前
比价 / 选品专用:京东 + 淘宝 核心接口实战(可直接复制运行)
大数据·数据库·人工智能·python·json·音视频
不才小强1 小时前
ScreenRecorder 源码分析
音视频
枳实-叶1 小时前
音频基础知识
音视频
不才小强2 小时前
Windows Graphics Capture (WGC) 屏幕捕获简介
windows·音视频
云边散步4 小时前
godot2D游戏教程系列二(23)
笔记·学习·游戏·音视频·游戏开发
linkingvision5 小时前
国产操作系统和国产GPU 能代替Windows + Intel的安防视频客户端解码功能么
音视频·视频监控·国产显卡·vaapi·国产cpu·国产gpu
AI服务老曹5 小时前
打破协议孤岛:基于 GB28181/RTSP 的 AI 视频统一接入网关架构解析(源码级)
人工智能·架构·音视频
烧饼Fighting6 小时前
java+vue推rtsp流实现视频播放(由javacv+ffmpg转为vlcj)
java·开发语言·音视频
火山上的企鹅6 小时前
QGC二次开发本地媒体浏览实战(二)FFmpeg最小系统实战
qt·ffmpeg·媒体·qgc
Black蜡笔小新6 小时前
GB28181/GB35114/RTSP/ONVIF视频监控平台EasyCVR平台视频质量诊断扩展服务插件
音视频