播放器开发(二):了解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_AudioFormatSDL中音频数据格式的枚举类
SDL_AudioDeviceIDSDL2.0中开始有的,表示音频设备的标识符,可以用来控制播放暂停和状态判断
SDL_Window表示窗口的数据结构,它提供了一种创建、管理和操作窗口的机制,使得开发者可以方便地进行图形界面的设计和实现。
SDL_Renderer渲染器
SDL_Texture纹理
SDL_RectSDL中用于表示一个矩形区域的位置和尺寸。
函数
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…...
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重建优化 缓存与数据库双写不一致 缓存穿透 缓存穿透是指查询一个根本不存在的数据, 缓存层和存储层都不会命中, 通常出于容错的考虑, 如果从存储层查不到数据…...
软萌拆拆屋实战教程:用‘变走丑丑的东西’规避不良生成技巧
软萌拆拆屋实战教程:用‘变走丑丑的东西’规避不良生成技巧 你是不是也遇到过这种情况?想用AI生成一张可爱的服饰拆解图,结果出来的画面要么颜色诡异,要么结构混乱,甚至出现一些奇怪的元素,完全不是想要的…...
Switch 2 第三方扩展坞:适配难题下的新选择
Switch 2 适配难题催生第三方扩展坞新机遇任天堂推出 Switch 2 时更改了控制器连接新系统的无线协议以及通过 USB - C 输出视频的方式,这使得所有第三方制造商都得从头开始研发适配产品。搞清楚如何与 Switch 2 “对话”,并确保在系统更新后仍能保持稳定…...
大模型工程化容灾落地难?揭秘头部AI公司正在用的5级备份分级策略与自动故障注入验证法
第一章:大模型工程化容灾备份方案设计 2026奇点智能技术大会(https://ml-summit.org) 大模型工程化过程中,模型权重、训练检查点、推理缓存及元数据的高可用性与一致性是系统稳定运行的核心前提。容灾备份不能仅依赖传统周期快照,而需融合多…...
TCLB(CUDA Lattice Boltzmann)项目介绍
文章目录TCLB 项目介绍核心特性1. 高性能计算架构2. 核心功能与耦合能力3. 跨平台支持快速使用流程1. 安装与编译2. 运行仿真依赖要求核心依赖可选依赖快速安装依赖学术引用开发与贡献许可证TCLB应用领域1. 流体动力学基础与工程仿真2. 流固耦合(LBM-DEM)…...
ANARCI抗体序列编号终极指南:从零基础到实战应用的完整教程
ANARCI抗体序列编号终极指南:从零基础到实战应用的完整教程 【免费下载链接】ANARCI Antibody Numbering and Antigen Receptor ClassIfication 项目地址: https://gitcode.com/gh_mirrors/an/ANARCI ANARCI(Antibody Numbering and Antigen Rece…...
阅文偶得笔录
物有本末,事有始终,知所先后,则近道矣。风月 尘世三千繁华,君且行,我自与酒拜桃花,任尔金玉琳琅良驹成双,不敌我眉间红逗朱砂。–<寒门崛起>楼上看山,城头看雪,灯前…...
STM32F042轻量级内建调试工具DEBUG_F042F6P6
1. 项目概述DEBUG_F042F6P6是一个面向 STM32F042F6P6 微控制器的轻量级、可复用调试工具集,专为资源受限的 Cortex-M0 嵌入式系统设计。该工具并非通用型调试器(如 ST-Link 或 J-Link),而是一套嵌入在目标固件内部的运行时诊断子系…...
HL1606 LED灯带PWM驱动库:9/12/15位可配置灰度实现
1. HL1606 LED Strip PWM 库深度技术解析HL1606 是一款经典的串行级联LED驱动芯片,广泛应用于早期RGB LED灯带(如Adafruit早期的“NeoPixel前身”方案)。与WS2812B等单线协议芯片不同,HL1606采用标准SPI接口配合独立锁存信号&…...
MAX32664生物传感器驱动库详解:嵌入式生理参数快速集成方案
1. 项目概述SparkFun Bio Sensor Hub Library 是专为 Maxim Integrated(现属 Analog Devices)MAX32664 生物传感集线器(Bio Metric Hub IC)设计的嵌入式 C 语言驱动库。该库并非通用传感器抽象层,而是深度绑定 MAX3266…...
Threads库:裸机与RTOS下的轻量级函数多实例并发框架
1. Threads 库深度解析:在裸机与 RTOS 环境下实现函数的多实例并发执行1.1 项目定位与工程价值“Threads”并非一个独立的实时操作系统(RTOS),而是一个轻量级、可移植的函数级多实例并发抽象层。其核心设计目标是:在不…...
