播放器开发(二):了解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
在渲染目标上呈现最终的渲染结果,将其显示出来。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/169490.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C#每天复习一个重要小知识day5:枚举与switch是天生一对

因为枚举一般用来表示条件和类型等等,所以它一般用条件分支来表现。所以枚举与switch是天生一对,因为很方便。(用if语句也可,但是没switch方便) 简单的举例: namespace 精细练习 {enum E_Player {Main,Ot…

前端大厂(腾讯、字节跳动、阿里......)校招面试真题解析,让你面试轻松无压力!

前言 校招很重要,应届生的身份很珍贵!在校招的时候与我们竞争的大部分都是没有工作经验的学生,而且校招企业对学生的包容度高,一般对企业来说,社招更看重实际工作经验,而校招更愿意“培养人”,校…

node fs模板及蓝桥案例实战

文章目录 介绍文件写入writeFile 异步写入writeFileSync 同步写入appendFile / appendFileSync 追加写入createWriteStream 流式写入 文件读取readFile 异步读取readFileSync 同步读取createReadStream 流式读取 文件移动与重命名文件删除文件夹操作mkdir / mkdirSync 创建文件…

python操作redis

操作单redis 需要安装redis模块:pip install redis demo: #!/usr/bin/env python3 # coding utf-8import redis import threadingdef a():conn redis.Redis(host"192.168.1.66", port6379, password"123456", db6,# decode_res…

数据库表结构导出成Excel或Word格式

前言 该工具主要用于导出excel、word,方便快速编写《数据库设计文档》,同时可以快速查看表的结构和相关信息。 本博客仅作记录,最新源码已经支持多种数据库多种格式导出,有兴趣的可移步源码作者地址:https://gitee.co…

模运算Mod

模运算是一种数学运算,通常用于计算机编程和数论中。它表示的是两个整数相除后的余数。在编程中,模运算符(%)用于计算一个数除以另一个数的余数。在数论中,模运算可以用于解决一些与整数除法有关的问题,如最…

RK3568驱动指南|第八篇 设备树插件-第73章 设备树插件使用实验

瑞芯微RK3568芯片是一款定位中高端的通用型SOC,采用22nm制程工艺,搭载一颗四核Cortex-A55处理器和Mali G52 2EE 图形处理器。RK3568 支持4K 解码和 1080P 编码,支持SATA/PCIE/USB3.0 外围接口。RK3568内置独立NPU,可用于轻量级人工…

二十三种设计模式全面解析-深入探讨状态模式的高级应用技术:释放对象行为的无限可能

在软件开发中,状态管理是一个常见的挑战。当对象的行为随着内部状态的变化而变化时,有效地管理对象的状态和相应的行为变得至关重要。在这方面,状态模式提供了一种优雅而灵活的解决方案。它允许对象在运行时根据内部状态的改变而改变其行为&a…

【Redis】前言--redis产生的背景以及过程

一.介绍 为什么会出现Redis这个中间件,从原始的磁盘存储到Redis中间又发生了哪些事,下面进入正题 二.发展史 2.1 磁盘存储 最早的时候都是以磁盘进行数据存储,每个磁盘都有一个磁道。每个磁道有很多扇区,一个扇区接近512Byte。…

MYSQL基础之【创建数据表,删除数据表】

文章目录 前言MySQL 创建数据表通过命令提示符创建表使用PHP脚本创建数据表 MySQL 删除数据表在命令提示窗口中删除数据表使用PHP脚本删除数据表 后言 前言 hello world欢迎来到前端的新世界 😜当前文章系列专栏:Mysql 🐱‍👓博主…

三菱PLC编码器转速测量功能块(梯形图和ST代码)

编码器转速测量功能块算法公式详细讲解请参考下面文章链接: SMART PLC编码器转速测量功能块(高速计数器配置+梯形图)-CSDN博客文章浏览阅读427次。里工业控制张力控制无处不在,也衍生出很多张力控制专用控制器,磁粉制动器等,本篇博客主要讨论PLC的张力控制相关应用和算法,…

制作docker镜像

1. 什么是Docker镜像 Docker镜像是Docker容器的模板&#xff0c;是Docker容器运行的基础。 2. 制作docker镜像的方式与流程 2.1 基于Dockerfile制作镜像 2.1.1 Dockerfile的基本语法 # 指定基础镜像 FROM <image> # 维护者信息 MAINTAINER # 指定镜像标签 LABEL <…

Android frameworks 开发总结之十(lock screen message Battery Last full charge)

1.設置lock screen message後不显示 XXXt設備設置lock screen message後&#xff0c;發現鎖頻界面不顯示內容&#xff0c;像時間日期都不顯示。只在右上角顯示一個鎖圖標&#xff0c;需要向下滑動一下才能顯示出來。布局文件位置: frameworks/base/packages/SystemUI/res-keygu…

原生实现底部弹窗效果 h5 小程序

<template><div class"home"><div class"btn" click"showPopupshow">弹出底部蒙层</div><div class"popup " catchtouchmove"true" :class"showPopup" ><div class"mask&q…

element使用小结

1、tabel表头文字自定义效果&#xff08;换行&#xff0c;不同颜色&#xff09; 换行&#xff1a; // 方法一 <el-table-columnprop"otherCost":label"本期累计\n(元)"> // 通过:label添加\n </el-table-column>.xx .cell {white-space: pre-…

城市NOA加速落地,景联文科技高质量数据标注助力感知系统升级

当前&#xff0c;自动驾驶技术的演进正在经历着从基础L2到L3过渡的重要阶段&#xff0c;其中NOA&#xff08;自动辅助导航驾驶&#xff09;扮演着至关重要的角色。城市NOA&#xff08;L2.9&#xff09;作为城市场景下的NOA&#xff0c;被看作是车企向更高阶自动驾驶迈进的必经之…

无线网络下VMWare+CentOS7使用桥接模式无法联通网络问题

因为最近新配了台带无线网卡的主机&#xff0c;所以准备把所有的内容都转移到新电脑上&#xff0c;其中就包括虚拟机 安装好VMWareCentOS7选择桥接模式 然后我们去修改一下网络配置 cd /etc/sysconfig/network-scripts/进入这个ifcfg-ens33文件 我们修改箭头所示内容&#xff…

Eclipse安装EvoSuite插件

Eclipse安装EvoSuite插件 EvoSuite自动为Java类生成JUnit测试套件,针对分支覆盖率等代码覆盖率标准。为了提高可读性,生成的单元测试被最小化,并且捕获被测试类的当前行为的回归断言被添加到测试中。 EvoSuite的GitHub地址:https://github.com/EvoSuite/evosuite 📕Ecl…

BART - 磁共振重建库 linux系统安装 MATLAB 使用

本文主要介绍如何在linux系统中安装伯克利大学的磁共振重建库BART 和在matlab中的配置使用。 安装必要的库 (linux 命令行) $ sudo apt-get install make gcc libfftw3-dev liblapacke-dev libpng-dev libopenblas-dev 下载编译BART 文件 (官网链接:BART Toolbox) 命令行下…

UML建模图文详解教程08——部署图

版权声明 本文原创作者&#xff1a;谷哥的小弟作者博客地址&#xff1a;http://blog.csdn.net/lfdfhl本文参考资料&#xff1a;《UML面向对象分析、建模与设计&#xff08;第2版&#xff09;》吕云翔&#xff0c;赵天宇 著 部署图概述 部署图(deployment diagram)也被译作配置…