播放器开发(二):了解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重建优化 缓存与数据库双写不一致 缓存穿透 缓存穿透是指查询一个根本不存在的数据, 缓存层和存储层都不会命中, 通常出于容错的考虑, 如果从存储层查不到数据…...
C++_核心编程_多态案例二-制作饮品
#include <iostream> #include <string> using namespace std;/*制作饮品的大致流程为:煮水 - 冲泡 - 倒入杯中 - 加入辅料 利用多态技术实现本案例,提供抽象制作饮品基类,提供子类制作咖啡和茶叶*//*基类*/ class AbstractDr…...
五年级数学知识边界总结思考-下册
目录 一、背景二、过程1.观察物体小学五年级下册“观察物体”知识点详解:由来、作用与意义**一、知识点核心内容****二、知识点的由来:从生活实践到数学抽象****三、知识的作用:解决实际问题的工具****四、学习的意义:培养核心素养…...
苍穹外卖--缓存菜品
1.问题说明 用户端小程序展示的菜品数据都是通过查询数据库获得,如果用户端访问量比较大,数据库访问压力随之增大 2.实现思路 通过Redis来缓存菜品数据,减少数据库查询操作。 缓存逻辑分析: ①每个分类下的菜品保持一份缓存数据…...
【配置 YOLOX 用于按目录分类的图片数据集】
现在的图标点选越来越多,如何一步解决,采用 YOLOX 目标检测模式则可以轻松解决 要在 YOLOX 中使用按目录分类的图片数据集(每个目录代表一个类别,目录下是该类别的所有图片),你需要进行以下配置步骤&#x…...
令牌桶 滑动窗口->限流 分布式信号量->限并发的原理 lua脚本分析介绍
文章目录 前言限流限制并发的实际理解限流令牌桶代码实现结果分析令牌桶lua的模拟实现原理总结: 滑动窗口代码实现结果分析lua脚本原理解析 限并发分布式信号量代码实现结果分析lua脚本实现原理 双注解去实现限流 并发结果分析: 实际业务去理解体会统一注…...
鱼香ros docker配置镜像报错:https://registry-1.docker.io/v2/
使用鱼香ros一件安装docker时的https://registry-1.docker.io/v2/问题 一键安装指令 wget http://fishros.com/install -O fishros && . fishros出现问题:docker pull 失败 网络不同,需要使用镜像源 按照如下步骤操作 sudo vi /etc/docker/dae…...
C++课设:简易日历程序(支持传统节假日 + 二十四节气 + 个人纪念日管理)
名人说:路漫漫其修远兮,吾将上下而求索。—— 屈原《离骚》 创作者:Code_流苏(CSDN)(一个喜欢古诗词和编程的Coder😊) 专栏介绍:《编程项目实战》 目录 一、为什么要开发一个日历程序?1. 深入理解时间算法2. 练习面向对象设计3. 学习数据结构应用二、核心算法深度解析…...
uniapp 字符包含的相关方法
在uniapp中,如果你想检查一个字符串是否包含另一个子字符串,你可以使用JavaScript中的includes()方法或者indexOf()方法。这两种方法都可以达到目的,但它们在处理方式和返回值上有所不同。 使用includes()方法 includes()方法用于判断一个字…...
BLEU评分:机器翻译质量评估的黄金标准
BLEU评分:机器翻译质量评估的黄金标准 1. 引言 在自然语言处理(NLP)领域,衡量一个机器翻译模型的性能至关重要。BLEU (Bilingual Evaluation Understudy) 作为一种自动化评估指标,自2002年由IBM的Kishore Papineni等人提出以来,…...
提升移动端网页调试效率:WebDebugX 与常见工具组合实践
在日常移动端开发中,网页调试始终是一个高频但又极具挑战的环节。尤其在面对 iOS 与 Android 的混合技术栈、各种设备差异化行为时,开发者迫切需要一套高效、可靠且跨平台的调试方案。过去,我们或多或少使用过 Chrome DevTools、Remote Debug…...
