视音频学习入门---ffmpeg篇(五)---基于windows平台的SDL显示

本文介绍如何在Windows环境下使用SDL库配合FFmpeg显示视频。首先讲解了SDL的作用,即作为跨平台的多媒体开发库,简化音视频操作。接着详细阐述了SDL的实现、库和子系统,以及显示流程。最后,提供了在Visual Studio中搭建SDL开发环境的步骤,包括下载源码、创建工程、设置头文件和库文件路径等,并给出了播放YUV视频的伪代码。
摘要由CSDN通过智能技术生成

先给自己打个广告,本人的微信公众号:嵌入式Linux江湖,主要关注嵌入式软件开发,股票基金定投,足球等等,希望大家多多关注,有问题可以直接留言给我,一定尽心尽力回答大家的问题。
在这里插入图片描述

一 what

前面的几篇博文详细介绍了ffmpeg的开发环境搭建,本篇来看一下SDL环境的搭建,在搭建SDL环境之前,先思考一个问题:SDL到底是什么?

在回答这个问题之前,我们先思考:如何将一张图显示在屏幕上,不知道大家是有有做过LCD/LED屏幕显示的驱动程序。这个过程简单的分为几个部分:硬件屏幕,驱动程序,应用程序。SDL不直接关注硬件屏幕,而是关注每个平台下的屏幕驱动程序。比如windows下的DirectX,linux下的X11,以及android下的OPENGL ES,SDL通过将这三个平台(甚至更多平台)的屏幕驱动,封装成一套对外统一的API调用,让使用者可以不用关注具体某个平台,快速开发图像的绘制操作。SDL是一套成熟的跨平台渲染引擎。
在这里插入图片描述

二 details about SDL

2.1 SDL实现介绍

SDL,全称为Simple DirectMedia Layer,参考SDL官网,它为用户封装了各个平台底层的音视频操作,SDL是一套开放源代码的跨平台多媒体开发库,是使用C语言实现的,它提供了各种控制声音,图像等等的API接口函数,开发者可以使用相同或者相似的代码就可以开发出跨多个平台(Linux,Windows,MacOS)的应用软件。目前SDL多应用于开发游戏,模拟器,视频播放器等多媒体应用领域。以下这款游戏就是基于SDL开发的,可以在SDL官网上看到。
在这里插入图片描述

SDL项目框架是将不同操作系统的库再包装成相同的函数,在windows平台上其实是DirectX的再包装,旧版本使用的是DIrectX5,新版本使用的是DirectX7;而在X11平台上(包括Linux),SDL是使用Xlib库输出图像。

SDL是使用C语言编写的,但是它可以被几乎所有的编程语言所使用,包括:C++、perl、python、pascal等等。SDL采用GNU的LGPL第二版许可发行。该许可允许你自由地链接其动态链接库,甚至可以在商业软件中自由地使用。

虽然SDL被称为跨平台的DirectX,然而事实上SDL是定位成以精简的方式来完成基础的功能,它大幅度简化了控制图像,声音,输入输出等工作所需的代码。更高级的绘图功能或者音效功能则需搭配OpenGL和OpenAL等API来实现,另外它本身没有方便创建图形用户界面的函数。

2.2 SDL库和子系统

SDL库分为video,audio,CD_ROM,Joystich和Timer等若干子系统,除此之外,还有一些单独的官方扩充函数库,这些库由官网提供,共同组成了SDL的标准库。

SDL_image—支持时下流行的图像格式:BMP、PPM、XPM、 PCX、GIF、JPEG、PNG、TGA。
SDL_mixer—更多的声音输出函数以及更多的声音格式支持。
SDL_net—网络支持。
SDL_ttf—TrueType字体渲染支持。
SDL_rtf—简单的RTF渲染支持。

在这里插入图片描述
SDL将功能分成下列数个子系统(subsystem):

Video(图像)—图像控制以及线程(thread)和事件管理(event)。
Audio(声音)—声音控制
Joystick(摇杆)—游戏摇杆控制
CD-ROM(光盘驱动器)—光盘媒体控制
Window Management(视窗管理)-与视窗程序设计集成
Event(事件驱动)-处理事件驱动

2.3 SDL显示流程

在这里插入图片描述
SDL视频显示API介绍,这些API都可以在SDL的头文件找到定义,在这里不单独介绍,后期会单独列一篇文章来介绍。此时我们需要掌握的程度,就是根据上面的流程图调用SDL的API能够显示出yuv。

SDL_Init():初始化SDL系统
SDL_CreateWindow():创建窗口SDL_Window
SDL_CreateRenderer():创建渲染器SDL_Renderer
SDL_CreateTexture():创建纹理SDL_Texture
SDL_UpdateTexture():设置纹理的数据
SDL_RenderCopy():将纹理的数据拷贝给渲染器
SDL_RenderPresent():显示
SDL_Delay():工具函数,用于延时。
SDL_Quit():退出SDL系统

在这里插入图片描述

三 how

3.1 搭建windows平台visual studio的sdl开发环境
(1)下载源码
在官网上SDL官网下载sdl的源码
(2)创建一个sdl的visual studio工程
(3)拷贝include头文件
将sdl源码下面的include文件件拷贝一份,并重命名为SDL2_include(以便后面和ffmpeg的include文件夹做区分,当然也可以不做区分),然后将SDL2_include文件夹拷贝到visual studio项目中
在这里插入图片描述
(4)拷贝lib文件
将sdl源码中的三个lib文件拷贝到visual studio项目下的lib目录下
在这里插入图片描述
(5)拷贝dll文件
将sdl源码中的dll文件拷贝到visual studio项目下。
在这里插入图片描述
(6)修改visual studio的平台为x64
在我前期的debug中,发现如果在visual studio选择的x84平台,发现和添加的dll库文件不兼容,添加进来的dll库文件是x64平台的,所以我们需要修改visual studio的平台为x64。
(7)设置visual studio的头文件路劲
鼠标定位到解决方案出的test项目,右键选择“属性”,在弹出的对话框中,选择“C/C++”–>“常规”–>“附加包含目录”,输入“SDL2_include”,就是之前拷贝进来的SDL2_include目录,然后点击右下方的“应用”即可
在这里插入图片描述
(8)设置visual studio的库文件路劲
选择“链接器”–>“常规”–>“附加库目录”,输入“lib”,就是之前拷贝进来的lib目录,然后点击右下方的“应用”即可。
在这里插入图片描述
(9)设置visual studio的库文件依赖项
选择“链接器”–>“输入”–>“附加依赖项”,输入lib名,中间以英文字符";"隔开,就是之前拷贝进来lib目录下的.lib文件
在这里插入图片描述
实际上,步骤(2)~(9)基本上和ffmpeg的环境配置一模一样。
3.2 项目源码
环境配置好之后,就可以用SDL进行开发一个播放器了,这里给出一个SDL播放YUV视频的伪代码程序,需要源码的小伙伴,请关注公众号:嵌入式Linux江湖,回复sdl1即可获取源码。

int main(int argc, char* argv[])
{
	SDL_init
	SDL_CreateWindow
	SDL_CreateRenderer
	SDL_CreateTexture
	SDL_CreateThread

	while (1) {
		SDL_WaitEvent
		SDL_UpdateTexture
		SDL_RenderClear
		SDL_RenderCopy
		SDL_RenderPresent
	}
	
	SDL_Quit;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值