SDL2音视频渲染入门

SDL, “Simple DirectMedia Layer”,它是一套开放源代码的跨平台多媒体开发库,使用C语言写成。其主要用于游戏开发中的多媒体处理,如视频渲染,音频播放,鼠标/键盘控制等操做。它对外接供了一套统一的接口,但在内部,它会根据不一样平台调用不一样的底层 API库。如在 Linux 系统下,它会使用 opengl 作渲染,而在 Window 下它会调用 D3D API进行渲染。php

SDL2安装

SDL官网下载:www.libsdl.org/download-2.…bash

下载Source Code(之后去看源代码也比较方便),而后进行编译安装:函数

configure --prefix=/usr/local
复制代码
sudo make && make install
复制代码

在/usr/local下就能够找到编译后的SDL2相关文件ui

SDL2使用

运行环境Windows + CLion,代码通用,不一样平台只须要更改依赖的SDL库便可spa

CMakeList

cmake_minimum_required(VERSION 3.12)
project(SimplePlayer C)

set(CMAKE_C_STANDARD 99)
set(SOURCE_FILES main.c)

# 这里我使用的是本身机器上安装的SDL库,根据本身的安装路径替换
set(INC_DIR_SDL C:/cygwin64/usr/local/include/SDL2/)
set(LINK_DIR_SDL C:/cygwin64/usr/local/lib/)

include_directories(${INC_DIR_SDL})
link_directories(${LINK_DIR_SDL})

add_executable(SimplePlayer ${SOURCE_FILES})
target_link_libraries(
        SimplePlayer
        SDL2
        SDL2main)
复制代码

SDL的基本流程

一、初始化SDL开放源代码

二、建立窗口3d

三、建立渲染器code

四、清空缓冲区cdn

五、绘制要显示的内容视频

六、最终将缓冲区内容渲染到window窗口上

七、销毁渲染器

八、销毁窗口

九、退出SDL

下面是一个最简单的SDL程序,会显示一个640*480的窗口,窗口内部为红色,显示3秒后消失

#include <SDL2/SDL.h>

int WinMain() {
    SDL_Window *window = NULL;
    SDL_Renderer *renderer = NULL;

    SDL_Init(SDL_INIT_VIDEO);// 初始化函数,能够肯定但愿激活的子系统

    window = SDL_CreateWindow("My First Window",
                              SDL_WINDOWPOS_UNDEFINED,
                              SDL_WINDOWPOS_UNDEFINED,
                              640,
                              480,
                              SDL_WINDOW_OPENGL | SDL_WINDOW_RESIZABLE);// 建立窗口

    if (!window) {
        return -1;
    }
    renderer = SDL_CreateRenderer(window, -1, 0);//基于窗口建立渲染器
    if (!renderer) {
        return -1;
    }
    SDL_SetRenderDrawColor(renderer, 255, 0, 0, 255); //设置渲染器颜色 r、g、b、a
    SDL_RenderClear(renderer);//用指定的颜色清空缓冲区
    SDL_RenderPresent(renderer); //将缓冲区中的内容输出到目标窗口上。
    SDL_Delay(3000); // 延时3秒
    SDL_DestroyRenderer(renderer); //销毁渲染器
    SDL_DestroyWindow(window); //销毁窗口
    SDL_Quit(); //退出SDL
    return 0;
}
复制代码

SDL API简介

  1. SDL_Init 初始化

    int SDL_Init(Uint32 flags) 复制代码
    flages:
    SDL_INIT_TIMER 定时器子系统
    SDL_INIT_AUDIO 音频子系统
    SDL_INIT_VIDEO 视频子系统,同时会初始化事件子系统
    SDL_INIT_EVENTS 事件子系统
    SDL_INIT_EVERYTHING 初始化全部子系统=
    复制代码
  2. SDL_CreateWindow 建立窗口

    SDL_Window* SDL_CreateWindow(const char *title, int x, int y, int w, int h, Uint32 flags);
    复制代码
    title:窗口标题
    x,y,w,h:窗口坐标
    flags:
     ::SDL_WINDOW_FULLSCREEN,//全屏         ::SDL_WINDOW_OPENGL,//使用OpenGL上下文
     ::SDL_WINDOW_HIDDEN, //窗口不可见       ::SDL_WINDOW_BORDERLESS, //无边框
     ::SDL_WINDOW_RESIZABLE,//窗口大小可变    ::SDL_WINDOW_MAXIMIZED, //窗口最大化
     ::SDL_WINDOW_MINIMIZED,//窗口最小化      ::SDL_WINDOW_INPUT_GRABBED,//输入捕获
    复制代码
  3. SDL_CreateRenderer 建立渲染器

    SDL_Renderer* SDL_CreateRenderer(SDL_Window* window, int index, Uint32 flags) 复制代码
    window: 指明在哪一个窗口里进行渲染
    index: 指定渲染驱动的索引号。通常指定为 -1.
    flags:
     SDL_RENDERER_SOFTWARE //The renderer is a software fallback 软件备份
     SDL_RENDERER_ACCELERATED //The renderer uses hardware acceleration 硬件加速
     SDL_RENDERER_PRESENTVSYNC //Present is synchronized with the refresh rate 刷新率同步
     SDL_RENDERER_TARGETTEXTURE //The renderer supports rendering to texture 支持渲染纹理
    复制代码
相关文章
相关标签/搜索