当前位置: 首页 > 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重建优化 缓存与数据库双写不一致 缓存穿透 缓存穿透是指查询一个根本不存在的数据, 缓存层和存储层都不会命中, 通常出于容错的考虑, 如果从存储层查不到数据…...

C++初阶-list的底层

目录 1.std::list实现的所有代码 2.list的简单介绍 2.1实现list的类 2.2_list_iterator的实现 2.2.1_list_iterator实现的原因和好处 2.2.2_list_iterator实现 2.3_list_node的实现 2.3.1. 避免递归的模板依赖 2.3.2. 内存布局一致性 2.3.3. 类型安全的替代方案 2.3.…...

中南大学无人机智能体的全面评估!BEDI:用于评估无人机上具身智能体的综合性基准测试

作者:Mingning Guo, Mengwei Wu, Jiarun He, Shaoxian Li, Haifeng Li, Chao Tao单位:中南大学地球科学与信息物理学院论文标题:BEDI: A Comprehensive Benchmark for Evaluating Embodied Agents on UAVs论文链接:https://arxiv.…...

转转集团旗下首家二手多品类循环仓店“超级转转”开业

6月9日,国内领先的循环经济企业转转集团旗下首家二手多品类循环仓店“超级转转”正式开业。 转转集团创始人兼CEO黄炜、转转循环时尚发起人朱珠、转转集团COO兼红布林CEO胡伟琨、王府井集团副总裁祝捷等出席了开业剪彩仪式。 据「TMT星球」了解,“超级…...

A2A JS SDK 完整教程:快速入门指南

目录 什么是 A2A JS SDK?A2A JS 安装与设置A2A JS 核心概念创建你的第一个 A2A JS 代理A2A JS 服务端开发A2A JS 客户端使用A2A JS 高级特性A2A JS 最佳实践A2A JS 故障排除 什么是 A2A JS SDK? A2A JS SDK 是一个专为 JavaScript/TypeScript 开发者设计的强大库&#xff…...

LLMs 系列实操科普(1)

写在前面: 本期内容我们继续 Andrej Karpathy 的《How I use LLMs》讲座内容,原视频时长 ~130 分钟,以实操演示主流的一些 LLMs 的使用,由于涉及到实操,实际上并不适合以文字整理,但还是决定尽量整理一份笔…...

Qemu arm操作系统开发环境

使用qemu虚拟arm硬件比较合适。 步骤如下: 安装qemu apt install qemu-system安装aarch64-none-elf-gcc 需要手动下载,下载地址:https://developer.arm.com/-/media/Files/downloads/gnu/13.2.rel1/binrel/arm-gnu-toolchain-13.2.rel1-x…...

电脑桌面太单调,用Python写一个桌面小宠物应用。

下面是一个使用Python创建的简单桌面小宠物应用。这个小宠物会在桌面上游荡,可以响应鼠标点击,并且有简单的动画效果。 import tkinter as tk import random import time from PIL import Image, ImageTk import os import sysclass DesktopPet:def __i…...

ArcGIS Pro+ArcGIS给你的地图加上北回归线!

今天来看ArcGIS Pro和ArcGIS中如何给制作的中国地图或者其他大范围地图加上北回归线。 我们将在ArcGIS Pro和ArcGIS中一同介绍。 1 ArcGIS Pro中设置北回归线 1、在ArcGIS Pro中初步设置好经纬格网等,设置经线、纬线都以10间隔显示。 2、需要插入背会归线&#xf…...

结构化文件管理实战:实现目录自动创建与归类

手动操作容易因疲劳或疏忽导致命名错误、路径混乱等问题,进而引发后续程序异常。使用工具进行标准化操作,能有效降低出错概率。 需要快速整理大量文件的技术用户而言,这款工具提供了一种轻便高效的解决方案。程序体积仅有 156KB,…...

高端性能封装正在突破性能壁垒,其芯片集成技术助力人工智能革命。

2024 年,高端封装市场规模为 80 亿美元,预计到 2030 年将超过 280 亿美元,2024-2030 年复合年增长率为 23%。 细分到各个终端市场,最大的高端性能封装市场是“电信和基础设施”,2024 年该市场创造了超过 67% 的收入。…...