基于学习ffmpeg和sdl,写一个视频播放器是个不错的练手项目。视频播放器的原理很多人的博客都有讲过,这里出于自己总结的目的,还是会做一些概况。 二. 视频播放器基本原理 2.1 解封装 视频文件基本上都是将编码好的音频和视频数据封装在一起形成的,因此拿到视频文件的第一步就是先将它解封装,分为视频流和音频流压...
SDL中播放音频有两种模式,第一种是推送模式(push),另一种是拉取模式(pull)。前者是我们主动将音频数据填充到设备播放缓冲区,另一种是SDL主动拉取数据到设备播放缓冲区。这里我们使用的是拉取模式进行播放,这种模式是比较常用的。本次我们的操作流程为初始化ffmpeg以及SDL2相关组件 编写SDL2的回调函数 编写解码函数...
SDL_UpdateYUVTexture(m_sdlTexture, NULL, frameYUV->data[0], frameYUV->linesize[0], frameYUV->data[1], frameYUV->linesize[1], frameYUV->data[2], frameYUV->linesize[2]); SDL_RenderClear(m_sdlRender); SDL_RenderCopy(m_sdlRender, m_sdlTexture, NULL, &m_sdlRect); // Present pictu...
具体的函数原型参考【FFmpeg】SDL 音视频开发 ① ( SDL 窗口绘制 | SDL 视频显示函数 | SDL_Window 窗口 | SDL_Renderer 渲染器 | SDL_Texture 纹理 )博客章节中第一章内容 ; 2、设置音频参数 在SDL 中 , 使用 SDL_AudioSpec 结构体来设置音频参数 , 该结构体种包含了音频的多个关键属性 , 创建一个 SDL...
使用SDL 库创建一个窗口,并在窗口中显示解码后的视频帧。你可以通过 SDL 的渲染函数将像素数据绘制到窗口中,实现视频的播放。在绘制过程中,你需要注意帧率和同步问题,以避免视频播放过快或过慢。 处理用户输入 为了实现视频播放器的交互性,你需要处理用户的键盘和鼠标输入。例如,你可以监听空格键来控制视频的播放和...
在视频播放器、音频编辑器等多媒体应用程序中,这个函数通常用于用户拖动进度条、跳转到指定时间点或进行其他用户交互操作。 源码 https://github.com/canaconZion/streaming-practice/blob/main/ffmpeg/src/video_player.cpp 关于视频播放部分的代码,可以参考文章《基于FFMPEG+SDL的简单的视频播放器分析 》...
1、初始化 SDL 2、设置音频参数 3、打开音频设备 4、设置播放回调函数 5、播放音频数据 6、关闭音频设备 7、SDL 播放 PCM 音频数据的 关键步骤 代码示例 三、完整代码示例 1、完整代码示例 2、执行结果 一、PCM 格式简介 1、PCM 简介 PCM , Pulse Code Modulation , 脉冲编码调制 , 使用数字表示模拟信号 ,...
运行程序:运行生成的可执行文件,验证FFmpeg和SDL功能是否正常。 2.2播放器框架和解复用模块开发 播放器框架和解复用模块开发是在音视频领域中常见的任务。以下是一般的步骤: 确定需求:首先,明确你需要开发一个什么样的播放器框架,包括支持哪些媒体格式、功能要求等。
在此我把自己做项目过程中实现的一个非常简单的音频播放器(大约200行代码)源代码传上来,以作备忘,同时方便新手学习FFMPEG。 该播放器虽然简单,但是几乎包含了使用FFMPEG播放一个音频所有必备的API,并且使用SDL输出解码出来的音频。 并且支持流媒体等多种音频输入。
经过前面一系列的 SDL2 学习,终于到最后实现一个完整的简易播放器了。 线程模型 这是实现的简易播放器的线程模型,通过这张图再结合我们之前博客中学习的内容,基本可以了解播放器的一个整体运行流程。具体代码也是根据这张图来实现。 重要结构体 VideoState ...