播放器开发(二):了解FFmpeg与SDL常用对象和函数

学习课题:逐步构建开发播放器【QT5 + FFmpeg6 + SDL2】

前言

这一篇内容就是简单的了解一遍一些常用的函数名称和作用,混个眼熟。

能看源码的就去看源码!!!

能看源码的就去看源码!!!

能看源码的就去看源码!!!

技巧:

对于ffmpeg

1、函数名字带有alloc的一般都是分配空间分配结构

2、函数名带有free/unref的一般都是跟释放相关的

对于SDL

1、基本上所有函数、结构体都是"SDL_" 开头

FFmpeg6.0

类/结构体

AVFormatContext

用于表示音视频封装格式的上下文信息。该结构体包含了音视频文件的所有相关信息,如音视频流的数量、编解码器的参数、采样率、帧率、时长、封装格式等等。

AVCodec

编解码器,它定义了一组可供使用的编解码器。通过使用AVCodec,我们可以实现对音视频文件的读取、解码、转换和编码等操作。

AVCodecParameters

用于描述音视频编解码器参数的结构体

AVPacket

解复用后获取的包结构体

AVCodecContext

编解码器上下文,包含了编解码器的所有相关信息,例如编解码器类型、参数设置、输入输出格式等

AVFrame

从AVPacket中读到的帧结构体

SwsContext

用于执行图像格式转换和缩放的上下文数据结构。

SwrContext

用于执行音频格式转换和采样率调整的上下文数据结构。 【这里Sws....和Swr....就差一个字母,注意别写错了】

函数

avformat_alloc_context

分配一个AVFormatContext结构

avformat_free_context

释放AVFormatContext结构体内容

avformat_open_input

打开音视频文件或网络流

avformat_close_input

关闭音视频文件或网络流

avformat_find_stream_info

从AVFormatContext中读取流信息

av_find_best_stream

根据AVFormatContext和参数对应的流找到流索引标识和对应的AVCodec编解码器

av_read_frame

从音视频文件(AVFormatContext)中逐帧读取音视频数据包(AVPacket)

av_packet_unref

释放AVPacket结构体中引用的AVBufferRef缓冲区,并重置AVPacket结构体的各个字段,

一般在循环内,本次用完后调用。
av_packet_free

直接释放AVPacket结构体本身占用的内存,并将其置为NULL,一般是在整个循环完整结束后调用。

avcodec_alloc_context3

分配一个AVCodecContext结构体,并对其进行初始化。
avcodec_parameters_to_context

将AVCodecParameters结构体中的参数值复制到AVCodecContext结构体中。
avcodec_open2

初始化AVCodecContext,准备使用AVCodec编解码器。

av_frame_alloc

分配一个AVFrame结构体。

avcodec_send_packet

把AVPacket作为输入,交给编解码器进行解码
avcodec_receive_frame

返回解码器或编码器解码后的输出数据

sws_scale

对输入图像进行格式转换、尺寸调整等操作,得到输出图像。
swr_convert

对输入音频进行格式转换、采样率调整、声道数调整等操作,得到输出音频。

SDL2.0

类/结构体

SDL_AudioSpec

音频数据格式、采样率、声道数等参数

SDL_AudioFormat

SDL中音频数据格式的枚举类

SDL_AudioDeviceID

SDL2.0中开始有的,表示音频设备的标识符,可以用来控制播放暂停和状态判断

SDL_Window

表示窗口的数据结构,它提供了一种创建、管理和操作窗口的机制,使得开发者可以方便地进行图形界面的设计和实现**。**

SDL_Renderer

渲染器

SDL_Texture

纹理

SDL_Rect

SDL中用于表示一个矩形区域的位置和尺寸。

函数

复制代码
SDL_Init
初始化SDL库

SDL_OpenAudioDevice
SDL2.0开始启用打开音频设备的函数,并返回SDL_AudioDeviceID,用于音频数据的输入和输出。

SDL_OpenAudio
旧版打开音频设备并设置音频参数,用于播放和录制音频,不返回设备对象。

SDL_LockMutex
锁定一个互斥锁,用于保护共享资源,确保在同一时间只有一个线程可以访问共享资源。
SDL_UnlockMutex
释放互斥锁,允许其他线程访问共享资源。

SDL_Delay
延迟一定的毫秒数,用于控制程序执行速度或实现简单的时间间隔。

SDL_PauseAudioDevice
对应SDL_OpenAudioDevice的暂停或恢复音频的播放。
SDL_PauseAudio
对应SDL_OpenAudio的暂停或恢复音频的播放。

SDL_CreateWindowFrom
创建一个SDL窗口,并从现有的窗口句柄创建,用于与其他图形库或窗口系统进行集成。可以与QT封装在一起,用的qwidget句柄,把SDL播放窗口创建在qt内。

SDL_CreateRenderer
创建一个渲染器,用于将图像渲染到窗口或纹理上。

SDL_CreateTexture
创建一个纹理,用于存储和操作图像数据。

SDL_UpdateTexture
更新纹理的像素数据,用于实时更新纹理上的图像。

SDL_UpdateYUVTexture
更新YUV格式的纹理的像素数据,用于实时更新纹理上的图像。RGB格式数据是不能用这个函数进行更新的。

SDL_RenderCopy
将纹理或部分纹理复制到渲染目标上,实现图像的绘制。

SDL_RenderPresent
在渲染目标上呈现最终的渲染结果,将其显示出来。
相关推荐
宇寒风暖33 分钟前
侯捷 C++ 课程学习笔记:Spaces in Template Expression、 nullptr and stdnull
开发语言·c++·笔记·学习
明月看潮生1 小时前
青少年编程与数学 02-010 C++程序设计基础 13课题、数据类型
开发语言·c++·青少年编程·编程与数学
Awkwardx1 小时前
C++初阶—list类
开发语言·c++
2501_902556231 小时前
C++ 中 cin 和 cout 教程
数据结构·c++
山河君1 小时前
音频进阶学习十六——LTI系统的差分方程与频域分析一(频率响应)
学习·音视频·信号处理
Cherry Xie2 小时前
阿里开源正式开园文生视频、图生视频模型-通义万相 WanX2.1
人工智能·音视频
肥or胖2 小时前
【入门音视频】音视频基础知识
笔记·音视频
gma9992 小时前
【音视频】编解码相关概念总结
音视频
avi91112 小时前
[AI相关]问问DeepSeek如何基于Python,moviePy实现视频字幕功能
python·音视频·moviepy·deepseek
萌の鱼2 小时前
leetcode 73. 矩阵置零
数据结构·c++·算法·leetcode·矩阵