SDL2音視頻渲染入門

SDL, “Simple DirectMedia Layer”,它是一套開放源代碼的跨平臺多媒體開發(fā)庫意系,使用C語言寫成。其主要用于游戲開發(fā)中的多媒體處理饺汹,如視頻渲染蛔添,音頻播放,鼠標(biāo)/鍵盤控制等操作兜辞。它對外接供了一套統(tǒng)一的接口迎瞧,但在內(nèi)部,它會根據(jù)不同平臺調(diào)用不同的底層 API庫逸吵。如在 Linux 系統(tǒng)下夹攒,它會使用 opengl 做渲染,而在 Window 下它會調(diào)用 D3D API進(jìn)行渲染胁塞。

SDL2安裝

SDL官網(wǎng)下載:https://www.libsdl.org/download-2.0.php

下載Source Code(以后去看源代碼也比較方便),然后進(jìn)行編譯安裝:

configure --prefix=/usr/local
sudo make && make install

在/usr/local下就可以找到編譯后的SDL2相關(guān)文件

SDL2使用

運(yùn)行環(huán)境Windows + CLion压语,代碼通用啸罢,不同平臺只需要更改依賴的SDL庫即可

CMakeList

cmake_minimum_required(VERSION 3.12)
project(SimplePlayer C)

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

# 這里我使用的是自己機(jī)器上安裝的SDL庫,根據(jù)自己的安裝路徑替換
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的基本流程

1胎食、初始化SDL
2扰才、創(chuàng)建窗口
3、創(chuàng)建渲染器
4厕怜、清空緩沖區(qū)
5衩匣、繪制要顯示的內(nèi)容
6、最終將緩沖區(qū)內(nèi)容渲染到window窗口上粥航。
7琅捏、銷毀渲染器
8、銷毀窗口
9递雀、退出SDL

下面是一個(gè)最簡單的SDL程序柄延,會顯示一個(gè)640*480的窗口栋豫,窗口內(nèi)部為紅色懦鼠,顯示3秒后消失

#include <SDL2/SDL.h>

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

    SDL_Init(SDL_INIT_VIDEO);// 初始化函數(shù),可以確定希望激活的子系統(tǒng)

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

    if (!window) {
        return -1;
    }
    renderer = SDL_CreateRenderer(window, -1, 0);//基于窗口創(chuàng)建渲染器
    if (!renderer) {
        return -1;
    }
    SDL_SetRenderDrawColor(renderer, 255, 0, 0, 255); //設(shè)置渲染器顏色 r、g坦胶、b杨凑、a
    SDL_RenderClear(renderer);//用指定的顏色清空緩沖區(qū)
    SDL_RenderPresent(renderer); //將緩沖區(qū)中的內(nèi)容輸出到目標(biāo)窗口上滤奈。
    SDL_Delay(3000); // 延時(shí)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 定時(shí)器子系統(tǒng)
    SDL_INIT_AUDIO 音頻子系統(tǒng)
    SDL_INIT_VIDEO 視頻子系統(tǒng),同時(shí)會初始化事件子系統(tǒng)
    SDL_INIT_EVENTS 事件子系統(tǒng)
    SDL_INIT_EVERYTHING 初始化所有子系統(tǒng)=
    
  2. SDL_CreateWindow 創(chuàng)建窗口

    SDL_Window* SDL_CreateWindow(const char *title,
                                 int x, int y, int w,
                                 int h, Uint32 flags);
    
    title:窗口標(biāo)題
    x,y,w,h:窗口坐標(biāo)
    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,//輸入捕獲
    
  1. SDL_CreateRenderer 創(chuàng)建渲染器

    SDL_Renderer* SDL_CreateRenderer(SDL_Window* window,
                                     int index,
                                     Uint32 flags)
    
    window: 指明在哪個(gè)窗口里進(jìn)行渲染
    index: 指定渲染驅(qū)動的索引號撩满。一般指定為 -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 支持渲染紋理
    
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末蜒程,一起剝皮案震驚了整個(gè)濱河市绅你,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌搞糕,老刑警劉巖勇吊,帶你破解...
    沈念sama閱讀 218,755評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異窍仰,居然都是意外死亡汉规,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,305評論 3 395
  • 文/潘曉璐 我一進(jìn)店門驹吮,熙熙樓的掌柜王于貴愁眉苦臉地迎上來针史,“玉大人,你說我怎么就攤上這事碟狞∽恼恚” “怎么了?”我有些...
    開封第一講書人閱讀 165,138評論 0 355
  • 文/不壞的土叔 我叫張陵族沃,是天一觀的道長频祝。 經(jīng)常有香客問我,道長脆淹,這世上最難降的妖魔是什么常空? 我笑而不...
    開封第一講書人閱讀 58,791評論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮盖溺,結(jié)果婚禮上漓糙,老公的妹妹穿的比我還像新娘。我一直安慰自己烘嘱,他們只是感情好昆禽,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,794評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著蝇庭,像睡著了一般醉鳖。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上哮内,一...
    開封第一講書人閱讀 51,631評論 1 305
  • 那天辐棒,我揣著相機(jī)與錄音,去河邊找鬼牍蜂。 笑死漾根,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的鲫竞。 我是一名探鬼主播辐怕,決...
    沈念sama閱讀 40,362評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼从绘!你這毒婦竟也來了寄疏?” 一聲冷哼從身側(cè)響起是牢,我...
    開封第一講書人閱讀 39,264評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎陕截,沒想到半個(gè)月后驳棱,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,724評論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡农曲,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,900評論 3 336
  • 正文 我和宋清朗相戀三年社搅,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片乳规。...
    茶點(diǎn)故事閱讀 40,040評論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡形葬,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出暮的,到底是詐尸還是另有隱情笙以,我是刑警寧澤,帶...
    沈念sama閱讀 35,742評論 5 346
  • 正文 年R本政府宣布冻辩,位于F島的核電站猖腕,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏恨闪。R本人自食惡果不足惜倘感,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,364評論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望凛剥。 院中可真熱鬧,春花似錦轻姿、人聲如沸犁珠。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,944評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽犁享。三九已至,卻和暖如春豹休,著一層夾襖步出監(jiān)牢的瞬間炊昆,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,060評論 1 270
  • 我被黑心中介騙來泰國打工威根, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留凤巨,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,247評論 3 371
  • 正文 我出身青樓洛搀,卻偏偏與公主長得像敢茁,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個(gè)殘疾皇子留美,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,979評論 2 355

推薦閱讀更多精彩內(nèi)容

  • 《請回答1988》講述的是一條街上幾戶人家彰檬,大人與小孩之間的故事伸刃。 這部劇拍的太真實(shí),讓我非常向往那種小胡同的生活...
    June梔子花閱讀 161評論 0 0
  • 那絕不是我的天堂 如果那里沒有美麗的女郎 天堂逢倍,也不是我的向往 我向往風(fēng)捧颅,風(fēng)的方向 我向往那美麗的女郎 有了方向。...
    言少卿閱讀 140評論 0 1
  • 有時(shí)候我在想较雕,我真的是文章無能起題二貨碉哑。 轉(zhuǎn)眼間,九月份了郎笆,很快又快一年了谭梗。一年里,我收獲反省自我宛蚓,一年里沒有任何...
    水舞月間閱讀 165評論 0 1
  • 嗯凄吏,在稍早前我在簡書受到「LostAbaddon」網(wǎng)友的邀請而寫這篇文章远舅,其實(shí)我一直很猶豫到底要不要寫這篇文,首先...
    空心二胡閱讀 486評論 5 3
  • 今天是合宿結(jié)束的日子痕钢,從山里回來图柏,正好又撞見臺風(fēng)。 日本的山區(qū)跟國內(nèi)倒有異曲同工之妙任连,至少我們這次去的秋川...
    夢游娃娃閱讀 212評論 0 1