当前位置: 首页 > news >正文

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

相关文章:

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

学习课题:逐步构建开发播放器【QT5 FFmpeg6 SDL2】 前言 这一篇内容就是简单的了解一遍一些常用的函数名称和作用,混个眼熟。 能看源码的就去看源码!!! 能看源码的就去看源码!!! …...

【数据库】基于排序算法的去重,集合与包的并,差,交,连接操作实现原理,执行代价以及优化

基于两趟排序的其它操作 ​专栏内容: 手写数据库toadb 本专栏主要介绍如何从零开发,开发的步骤,以及开发过程中的涉及的原理,遇到的问题等,让大家能跟上并且可以一起开发,让每个需要的人成为参与者。 本专栏…...

Redis 主从架构,Redis 分区,Redis哈希槽的概念,为什么要做Redis分区

文章目录 Redis 主从架构redis replication 的核心机制redis 主从复制的核心原理过程原理Redis集群的主从复制模型是怎样的?生产环境中的 redis 是怎么部署的?机器是什么配置?你往内存里写的是什么数据?说说Redis哈希槽的概念&…...

极客大挑战2023 Web方向题解wp 全

最后排名 9/2049。 玩脱了,以为28结束,囤的一些flag没交上去。我真该死啊QAQ EzHttp 前言:这次极客平台太安全了谷歌不给抓包,抓包用burp自带浏览器。 密码查看源码->robots.txt->o2takuXX’s_username_and_password.txt获…...

kafka开发环境搭建

文章目录 1 安装java环境1.1 下载linux下的安装包1.2 解压缩安装包1.3 解压后的文件移到/usr/lib目录下1.4 配置java环境变量 2 kafka的安装部署2.1 下载安装kafka2.2 配置和启动zookeeper2.3 启动和停止kafka 1 安装java环境 1.1 下载linux下的安装包 (1&#xf…...

Python大数据考题

Python大数据考题: 2022找工作是学历、能力和运气的超强结合体,遇到寒冬,大厂不招人,可能很多算法学生都得去找开发,测开 测开的话,你就得学数据库,sql,oracle,尤其sql要…...

才聚免费为你招聘,用人单位看过来!

才聚团队从1998年开始从事项目管理的推广工作,20多年来培训学员超30万人次,分布全国各地、服务企业超过5000家。拥有大批 PMP (项目管理专业人员资格) NPDP(产品经理国际资格) 软考 (信息系统…...

【SpringCloud】微服务的扩展性及其与 SOA 的区别

一、微服务的扩展性 由上一篇文章(没看过的可点击传送阅读)可知, 微服务具有极强的可扩展性,这些扩展性包含以下几个方面: 性能可扩展:性能无法完全实现线性扩展,但要尽量使用具有并发性和异步…...

从零带你底层实现unordered_map (2)

💯 博客内容:从零带你实现unordered_map 😀 作  者:陈大大陈 🚀 个人简介:一个正在努力学技术的准C后端工程师,专注基础和实战分享 ,欢迎私信! 💖 欢迎大家…...

打造企业AI数字人专属IP的重要性

在数字化时代,企业数字人专属IP的打造成为了企业品牌建设的重要组成部分。企业数字人专属IP是指是利用人工智能技术实现与真人直播形象的1:1克隆,即克隆出一个数字化的真人形象,作为独有的企业数字人形象,可以用于产品推广、品牌宣…...

docker容器的生命周期管理常用命令

容器的生命周期管理命令 docker create :创建一个新的容器但不启动它 docker create nginx docker run :创建一个新的容器并运行一个命令 常用选项: 常用选项1. --add-host:容器中hosts文件添加 host:ip 映射记录 2. -a, --attach&#…...

CF 1900B Laura and Operations 学习笔记

原题链接 传送门 题意 输入三个数字a,b,c表示1,2,3的数目,也就是说有a个1,b个2,c个3,每一次可以删除两个不同的数字,增加一个剩下的数字,比如说删除1和3,增加2&#x…...

Linux学习笔记6-串口应用

到现在为止都是在开发板上运行的裸机程序,相当于之前学习STM32单片机时走过的路,还没有真正进入到核心的驱动开发部分,但这都是基础,所以慢慢来不着急。 接下来进入串口通信的学习,和GPIO一样,也是和单片机…...

ubuntu下如何查看.gz压缩包中的内容,以及grep过滤查找文件中的某些内容

1、查看压缩包file.gz中的全部内容 $ zcat file.gz 2、对一个.gz的压缩包解压缩 $ gunzip file.gz 3、过滤查找文件中的某些内容 $ grep "Hello" file.txt 注:我通常先解压,然后再grep 4、过滤查找文件中的内容,并显示其上下3行…...

AI 重构工业制造的故事 我们从大模型开始讲起

在数字化浪潮的推动下,工业制造领域正经历着一场前所未有的变革。人工智能(AI)作为这场变革的关键推动者之一,正以惊人的速度颠覆传统制造业。而大模型作为AI时代最先进的科技工具之一,或将成为引领这场变革的利器&…...

easyExcel 注解开发 快速以及简单上手 以及包含工具类

easyExcel 简单快速使用 1. mevan 这里版本我这里选的是 poi 4.1.2和 ali的easyexcel 的 3.3.1。 因为阿里easy是根据poi的依赖开发的有关系,两者需要对应要不然就会有很多bug和错误在运行时发生。需要版本对应,然而就是easy的代码也会有bug这个版本是比…...

VS2010配置opencv2.4.10

1.下载opencv2.4.10,百度网盘链接如下: 链接:https://pan.baidu.com/s/1UdoQJbRUEB_G2urT703xYQ 提取码:7lbd 2.运行opencv-2.4.10.exe,将文件提取到一个自定义目录里: 3.添加系统环境变量 在“系统变量…...

Android:控制按键灯亮灭【button-backlight】

/frameworks/base/services/core/java/com/android/server/policy/PhoneWindowManager.java 1.导包 import java.io.DataOutputStream; import java.io.FileOutputStream; Handler mHandler3; 2.新建handler对象 public void init(Context context, IWindowManager windowMan…...

1、nmap常用命令

文章目录 1. 主机存活探测2. 常见端口扫描、服务版本探测、服务器版本识别3. 全端口(TCP/UDP)扫描4. 最详细的端口扫描5. 三种TCP扫描方式(1)TCP connect 扫描(2)TCP SYN扫描(3)TCP …...

Redis缓存设计典型问题

目录 缓存穿透 缓存失效(击穿) 缓存雪崩 热点缓存key重建优化 缓存与数据库双写不一致 缓存穿透 缓存穿透是指查询一个根本不存在的数据, 缓存层和存储层都不会命中, 通常出于容错的考虑, 如果从存储层查不到数据…...

Xshell远程连接Kali(默认 | 私钥)Note版

前言:xshell远程连接,私钥连接和常规默认连接 任务一 开启ssh服务 service ssh status //查看ssh服务状态 service ssh start //开启ssh服务 update-rc.d ssh enable //开启自启动ssh服务 任务二 修改配置文件 vi /etc/ssh/ssh_config //第一…...

关于nvm与node.js

1 安装nvm 安装过程中手动修改 nvm的安装路径, 以及修改 通过nvm安装node后正在使用的node的存放目录【这句话可能难以理解,但接着往下看你就了然了】 2 修改nvm中settings.txt文件配置 nvm安装成功后,通常在该文件中会出现以下配置&…...

精益数据分析(97/126):邮件营销与用户参与度的关键指标优化指南

精益数据分析(97/126):邮件营销与用户参与度的关键指标优化指南 在数字化营销时代,邮件列表效度、用户参与度和网站性能等指标往往决定着创业公司的增长成败。今天,我们将深入解析邮件打开率、网站可用性、页面参与时…...

大数据学习(132)-HIve数据分析

​​​​🍋🍋大数据学习🍋🍋 🔥系列专栏: 👑哲学语录: 用力所能及,改变世界。 💖如果觉得博主的文章还不错的话,请点赞👍收藏⭐️留言&#x1f4…...

Android第十三次面试总结(四大 组件基础)

Activity生命周期和四大启动模式详解 一、Activity 生命周期 Activity 的生命周期由一系列回调方法组成,用于管理其创建、可见性、焦点和销毁过程。以下是核心方法及其调用时机: ​onCreate()​​ ​调用时机​:Activity 首次创建时调用。​…...

Linux离线(zip方式)安装docker

目录 基础信息操作系统信息docker信息 安装实例安装步骤示例 遇到的问题问题1:修改默认工作路径启动失败问题2 找不到对应组 基础信息 操作系统信息 OS版本:CentOS 7 64位 内核版本:3.10.0 相关命令: uname -rcat /etc/os-rele…...

代码随想录刷题day30

1、零钱兑换II 给你一个整数数组 coins 表示不同面额的硬币,另给一个整数 amount 表示总金额。 请你计算并返回可以凑成总金额的硬币组合数。如果任何硬币组合都无法凑出总金额,返回 0 。 假设每一种面额的硬币有无限个。 题目数据保证结果符合 32 位带…...

现有的 Redis 分布式锁库(如 Redisson)提供了哪些便利?

现有的 Redis 分布式锁库(如 Redisson)相比于开发者自己基于 Redis 命令(如 SETNX, EXPIRE, DEL)手动实现分布式锁,提供了巨大的便利性和健壮性。主要体现在以下几个方面: 原子性保证 (Atomicity)&#xff…...

LabVIEW双光子成像系统技术

双光子成像技术的核心特性 双光子成像通过双低能量光子协同激发机制,展现出显著的技术优势: 深层组织穿透能力:适用于活体组织深度成像 高分辨率观测性能:满足微观结构的精细研究需求 低光毒性特点:减少对样本的损伤…...

HubSpot推出与ChatGPT的深度集成引发兴奋与担忧

上周三,HubSpot宣布已构建与ChatGPT的深度集成,这一消息在HubSpot用户和营销技术观察者中引发了极大的兴奋,但同时也存在一些关于数据安全的担忧。 许多网络声音声称,这对SaaS应用程序和人工智能而言是一场范式转变。 但向任何技…...