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

音视频小白系统入门笔记-0

本系列笔记为博主学习李超老师课程的课堂笔记,仅供参阅

音视频小白系统入门课 音视频基础+ffmpeg原理

绪论

ffmpeg推流 ffplay/vlc拉流 使用rtmp协议

ffmpeg -i <source_path> -f flv rtmp://<rtmp_server_path>

为什么会推流失败?

默认命令行方式可能导致音频和视频不同步原始是最快的播放速率,修改为`ffmpeg -re -i <source_path> -f flv rtmp://<rtmp_server_path>`  以原始播放速率播放

为什么清晰度不高?

`-f flv` 会按照默认方式对视频重新进行编码,导致视频质量下降`ffmpeg -re -i <source_path> -c:v copy -f flv rtmp://<rtmp_server_path>`

环境变量

`PATH` :命令行程序如果不是通过地址指定,将通过`PATH`进行搜索
`PKG_CONFIG_PATH` :`pkg-config`参数在这个环境变量的目录下找库的执行文件和头文件,实际上是找到对应库的`.pc`文件,而`.pc`文件中包含有库和头文件的信息
在`~/.bashrc | ~/.bash_profile`文件中设置Linux | Mac 的环境变量,然后通过`source`命令生效

PKG_CONFIG_PATHLD_LIBRARY_PATH有什么区别?

https://www.cnblogs.com/doubleconquer/p/17862780.html`pkg-config` 输出的参数最终会被 `gcc/clang` 和 `ld` 使用,但 **它本身不参与链接或运行**。

安装ffmpeg

Mac系统可以直接使用brew安装,类Unix系统可以使用源码安装,源码安装好处是更加灵活。Windows系统安装稍微复杂

可执行工具:

`ffmpeg`:推流,音视频处理`ffplay`:拉流,播放流媒体文件`ffprobe`:侦测多媒体文件格式、基本信息

库:

`libavcodec`:编解码`libavdevice`:管理设备`libavfilter`:过滤,特效`libavformat`:多媒体格式处理`libavutil`:基本工具`libpostproc`:没什么用`libswresmaple`:音频重采样`libswscale`:视频缩放默认生成动态库(`.dylib/.so`),也可以生成静态库(`.a`)

为什么有时候ffmpeg编译出来没有ffplay工具?

https://blog.csdn.net/chendongpu/article/details/123688442应该是旧版本需要手动enable

音频基础

处理流程

共享端:音视频采集(调用API) → 音视频编码

传输

观看端:音视频解码 → 音视频渲染 (调用驱动API)

音频数据流

采集后得到数字信号PCM数据 → 编码器aac/mp3编码 → 压缩后的数据aac/mp3 → 套马甲形成多媒体文件mp4/flv

多媒体文件mp4/flv → 脱马甲(解封装) → 解码 → PCM

为什么要套马甲(封装)?

1. 便于传输和存储:多媒体文件格式(如mp4/flv)提供了标准化的容器,可以同时存储音频、视频、字幕等多种数据2. 包含元数据:多媒体容器可以存储诸如时长、创建时间、编码格式等重要信息3. 支持流媒体:特定的容器格式支持流式传输,允许在下载完整文件前就开始播放4. 同步音视频:容器格式包含时间戳等信息,确保音视频在播放时能够正确同步

音频基础知识

声音:物体振动 → 通过介质传输能量 → 介质刺激耳膜 → 被人脑识别

人类的听觉频率范围(介质振动频率):次声波 20Hz 可听声波 20kHz 超声波

说话:85 — 1100 Hz

声音的三要素 → 波的三要素

音调 → 波的频率 频率较高悦耳

音量 → 波的振幅

音色 → 谐波

什么是谐波?

谐波是在基频(基本频率)上叠加的整数倍频率的波。当一个物体振动时,除了产生基本频率的声波外,还会同时产生2倍、3倍等整数倍频率的波。这些波的叠加形成了独特的音色。例如:当一根琴弦振动时,除了产生基频(最低频率的声波),还会产生2倍频率(第二谐波)、3倍频率(第三谐波)等。不同乐器发出相同音调的声音听起来不一样,就是因为它们产生的谐波组成不同。

谐波有什么用?

1. 音质优化:在音频处理中,了解谐波可以帮助进行更好的音质调节和优化2. 音频压缩:某些音频压缩算法会考虑谐波特性来实现更有效的压缩3. 音色合成:在音乐制作中,通过调整谐波可以创造不同的音色效果

模拟信号经过采样得到数字信号(根据奈奎斯特定理,采样率超过最高频率的2倍不会失真),普遍采样率在48kHz

为什么采样率需要是最高频率的2倍?

1. 重建原始信号:根据奈奎斯特定理,要完整重建一个连续的模拟信号,采样率必须至少是信号最高频率的2倍。这是因为每个周期至少需要两个采样点才能确定一个正弦波的频率和相位。2. 避免混叠效应:如果采样率低于信号最高频率的2倍,高频信号会被错误地解释为低频信号,这种现象称为"混叠"。这会导致重建的信号失真。3. 数学证明:假设采样率低于2倍频率,那么在信号重建时,由于采样点不足,同一组采样点可能对应多个不同频率的正弦波,系统无法确定原始信号的真实频率。4. 实际应用:在实践中,为了保证更好的信号质量,通常会采用更高的采样率,比如音频常用的44.1kHz或48kHz。

位深/采样大小:一个采样用多少bit存放。常用16bit

采样率:采样频率 8k(打电话) 16k 32k 44.1k 48k

声道数:单声道、双声道(人耳)、多声道

码率:采样率 x 声道数 x 位深

PCM格式:裸数据,记录采样信息

WAV格式:封装数据,一般用于封装PCM数据,加上元信息,最主要就是位深、采样率和声道数(以及其他一些大小等)

RIFF 是 WAV 的容器格式,通过分块(Chunk)组织数据,使用小端序存储数字。

大端序(Big-Endian)和 小端序(Little-Endian)是两种不同的字节存储顺序,用于定义多字节数据(如整数、浮点数)在内存或文件中的排列方式。它们的区别主要体现在字节的排列顺序上,直接影响数据的解析和跨平台兼容性。
  • 关键块"RIFF"(顶层)、"fmt "(参数)、"data"(音频数据)。
  • 应用场景:WAV、AVI、WebP 等均基于 RIFF 结构。

相关文章:

音视频小白系统入门笔记-0

本系列笔记为博主学习李超老师课程的课堂笔记&#xff0c;仅供参阅 音视频小白系统入门课 音视频基础ffmpeg原理 绪论 ffmpeg推流 ffplay/vlc拉流 使用rtmp协议 ffmpeg -i <source_path> -f flv rtmp://<rtmp_server_path> 为什么会推流失败&#xff1f; 默认…...

Zabbix 简介+部署+对接Grafana(详细部署!!)

目录 一.Zabbix简介 1.Zabbix是什么 2.Zabbix工作原理&#xff08;重点&#xff09;​ 3.Zabbix 的架构&#xff08;重点&#xff09;​ 1.服务端 2.客户端&#xff1a; 4.Zabbix和Prometheus区别 二.Zabbix 部署 1.前期准备 2.安装zabbix软件源和组件 3.安装数据库…...

C++: Initialization and References to const 初始化和常引用

cpp primer 5e, P97. 理解 这是一段很容易被忽略、 但是又非常重要的内容。 In 2.3.1 (p. 51) we noted that there are two exceptions to the rule that the type of a reference must match the type of the object to which it refers. The first exception is that we …...

Ubuntu2404装机指南

因为原来的2204升级到2404后直接嘎了&#xff0c;于是要重新装一下Ubuntu2404 Ubuntu系统下载 | Ubuntuhttps://cn.ubuntu.com/download我使用的是balenaEtcher将iso文件烧录进U盘后&#xff0c;使用u盘安装&#xff0c;默认选的英文版本&#xff0c; 安装后&#xff0c;安装…...

职坐标:智慧城市未来发展的核心驱动力

内容概要 智慧城市的演进正以颠覆性创新重构人类生存空间&#xff0c;其发展脉络由物联网、人工智能与云计算三大技术支柱交织而成。这些技术不仅推动城市治理从经验决策转向数据驱动模式&#xff0c;更通过实时感知与智能分析&#xff0c;实现交通、能源等领域的精准调控。以…...

DAY 45 leetcode 28的kmp算法实现

KMP算法的思路 例&#xff1a; 文本串&#xff1a;a a b a a b a a f 模式串&#xff1a;a a b a a f 两个指针分别指向上下两串&#xff0c;当出现分歧时&#xff0c;并不将上下的都重新回退&#xff0c;而是利用“next数组”获取已经比较过的信息&#xff0c;上面的指针不…...

从代码学习深度学习 - 自注意力和位置编码 PyTorch 版

这里写自定义目录标题 前言一、自注意力:Transformer 的核心1.1 多头注意力机制的实现1.2 缩放点积注意力1.3 掩码和序列处理1.4 自注意力示例二、位置编码:为序列添加位置信息2.1 位置编码的实现2.2 可视化位置编码总结前言 深度学习近年来在自然语言处理、计算机视觉等领域…...

设计和实现一个基于 DDS(直接数字频率合成) 的波形发生器

设计和实现一个基于 DDS&#xff08;直接数字频率合成&#xff09; 的波形发生器 1. 学习和理解IP软核和DDS 关于 IP 核的使用方法 IP 核&#xff1a;在 FPGA 设计中&#xff0c;IP 核&#xff08;Intellectual Property Core&#xff09;是由硬件描述语言&#xff08;HDL&a…...

AWS IAM权限详解:10个关键权限及其安全影响

1. 引言 在AWS (Amazon Web Services) 环境中,Identity and Access Management (IAM) 是确保云资源安全的核心组件。本文将详细解析10个关键的IAM权限,这些权限对AWS的权限管理至关重要,同时也可能被用于权限提升攻击。深入理解这些权限对于加强AWS环境的安全性至关重要。 2.…...

UniRig ,清华联合 VAST 开源的通用自动骨骼绑定框架

UniRig是清华大学计算机系与VAST联合开发的前沿自动骨骼绑定框架&#xff0c;专为处理复杂且多样化的3D模型而设计。基于强大的自回归模型和骨骼点交叉注意力机制&#xff0c;UniRig能够生成高质量的骨骼结构和精确的蒙皮权重&#xff0c;大幅提升动画制作的效率和质量。 UniR…...

DELL电脑开机进入自检界面

疑难解答 - 如何解决开机直接进入BIOS画面 添加链接描述 一、DELL电脑开机自检提示please run setup program 未设置一天中的时间-请运行安装程序(Time-of-day not set - please run SETUP program) 配置信息无效-请运行安装程序(Invalid configuration information - ple…...

分库分表-除了hash分片还有别的吗?

在分库分表的设计中,除了常见的 Hash 分片,还有多种策略根据业务场景灵活选择。以下是几种主流的分库分表策略及其应用场景、技术实现和优缺点分析,结合项目经验(如标易行投标服务平台的高并发场景)进行说明: 一、常见分库分表策略 1. 范围分片(Range Sharding) 原理:…...

Spring Cloud初探之使用load balance包做负载均衡(三)

一、背景说明 基于前一篇文章《Spring Cloud初探之nacos服务注册管理(二)》&#xff0c;我们已经将服务注册到nacos。接下来继续分析如何用Spring cloud的load balance做负载均衡。 load balance是客户端负载均衡组件。本质是调用方拿到所有注册的服务实例列表&#xff0c;然…...

MySQL 数据库备份和恢复全指南

MySQL 是一款常用的开源数据库系统&#xff0c;在日常运维中&#xff0c;数据备份和恢复是系统管理的重要一环。本文将细致介绍 MySQL 两大备份方案—— mysqldump 和 XtraBackup&#xff0c;包括备份方式、恢复步骤、定时脚本、远程备份和常见问题处理方案。 一、mysqldump 备…...

Linux 命令全解析:从零开始掌握 Linux 命令行

Linux 作为一款强大的开源操作系统&#xff0c;广泛应用于服务器、嵌入式系统以及超级计算机领域。掌握 Linux 命令行技能&#xff0c;是每一位开发者和系统管理员的必备能力。本文将从基础开始&#xff0c;为你详细介绍常用的 Linux 命令&#xff0c;以及它们的使用场景和示例…...

vector常用的接口和底层

一.vector的构造函数 我们都是只讲常用的。 这四个都是比较常用的。 第一个简单来看就是无参构造&#xff0c;是通过一个无参的对象来对我们的对象进行初始化的&#xff0c;第一个我们常用来当无参构造来使用。 第二个我们常用的就是通过多个相同的数字来初始化一个vector。 像…...

VMware安装Ubuntu实战分享

1.前期准备 1. 硬件要求 确保您的计算机满足以下基本硬件要求&#xff0c;以便顺利运行 VMware 和 Ubuntu&#xff1a; 处理器&#xff1a; 至少支持虚拟化技术&#xff08;如 Intel VT-x 或 AMD-V&#xff09;。可以在 BIOS 设置中启用此功能。 内存&#xff1a; 至少 4GB …...

解锁Grok-3的极致潜能:高阶应用与创新实践

引言 Grok-3&#xff0c;作为xAI公司推出的第三代人工智能模型&#xff0c;以其强大的推理能力和多模态处理能力在全球AI领域掀起了热潮。不仅在数学、科学和编程等基准测试中超越了众多主流模型&#xff0c;其独特的DeepSearch和Big Brain模式更赋予了它处理复杂任务的卓越性…...

【2025年3月中科院1区SCI】Rating entropy等级熵及5种多尺度,特征提取、故障诊断新方法!

引言 2025年3月&#xff0c;研究者在国际机械领域顶级期刊《Mechanical Systems and Signal Processing》&#xff08;JCR 1区&#xff0c;中科院1区 Top&#xff0c;IF&#xff1a;7.9&#xff09;上以“Rating entropy and its multivariate version”为题发表科学研究成果。…...

【AI学习】李宏毅老师讲AI Agent摘要

在b站听了李宏毅2025最新的AI Agent教程&#xff0c;简单易懂&#xff0c;而且紧跟发展&#xff0c;有大量最新的研究进展。 教程中引用了大量论文&#xff0c;为了方便将来阅读相关论文&#xff0c;进一步深入理解&#xff0c;做了截屏纪录。 同时也做一下分享。 根据经验调整…...

Nacos-Controller 2.0:使用 Nacos 高效管理你的 K8s 配置

作者&#xff1a;濯光、翼严 Kubernetes 配置管理的局限 目前&#xff0c;在 Kubernetes 集群中&#xff0c;配置管理主要通过 ConfigMap 和 Secret 来实现。这两种资源允许用户将配置信息通过环境变量或者文件等方式&#xff0c;注入到 Pod 中。尽管 Kubernetes 提供了这些强…...

小程序获取用户总结(全)

获取方式 目前小程序获取用户一共有3中(自己接触到的),但由于这个API一直在改,所以不确定后期是否有变动,还是要多关注官方公告。 方式一 使用wx.getUserInfo 实例: wxml 文件<button open-type="getUserInfo" bindgetuserinfo="onGetUserInfo&quo…...

SQL(2):SQL条件判断、排序、插入、更新、删除

1、满足条件 AND和OR&#xff0c;简单 SELECT * FROM 表 WHERE countryCN AND alexa > 50;SELECT * FROM Websites WHERE countryUSA OR countryCN;2、排序&#xff0c;掌握&#xff1a;<order by&#xff0c;降序怎么表示> 就没问题 默认升序&#xff0c;ASC表示升…...

玩转Docker | 使用Docker部署Xnote笔记工具

玩转Docker | 使用Docker部署Xnote笔记工具 前言一、Xnote介绍Xnote简介1.2 Xnote特点二、系统要求环境要求环境检查Docker版本检查检查操作系统版本三、部署Xnote服务下载镜像编辑配置文件编辑部署文件创建容器检查容器状态检查服务端口安全设置四、访问Xnote服务访问Xnote首页…...

RPCRT4!OsfCreateRpcAddress函数分析之AssociationBucketMutexMemory数组的填充

第一部分&#xff1a; 1: kd> p RPCRT4!OsfCreateRpcAddress0x28: 001b:77c0f4f5 e888e5ffff call RPCRT4!OSF_ADDRESS::OSF_ADDRESS (77c0da82) 1: kd> t RPCRT4!OSF_ADDRESS::OSF_ADDRESS: 001b:77c0da82 ?? ??? 1: kd> kc # 00 RPCRT4!…...

【BUG】Redis RDB快照持久化及写操作禁止问题排查与解决

1 问题描述 在使用Redis 的过程中&#xff0c;遇到如下报错&#xff0c;错误信息是 “MISCONF Redis is configured to save RDB snapshots, but it is currently not able to persist on disk...”&#xff0c;记录下问题排查过程。 2 问题排查与解决 该错误提示表明&#…...

conda如何安装和运行jupyter

在Conda环境中安装和运行Jupyter Notebook是一项常见且实用的任务&#xff0c;特别是在数据科学和机器学习项目中。以下是使用Conda安装和运行Jupyter Notebook的步骤&#xff1a; 安装Jupyter Notebook 首先&#xff0c;确保你的Conda是最新的。打开终端或Anaconda Prompt&a…...

java分页实例

引言 在现代Web应用和移动应用中&#xff0c;面对大量数据的展示&#xff0c;分页技术成为了提升用户体验和优化数据加载效率的关键手段。尤其是在MySQL数据库环境中&#xff0c;合理运用分页查询不仅能显著减少服务器负载&#xff0c;还能提升数据访问速度&#xff0c;为用户提…...

android 实现头像堆叠效果

1&#xff1a;依赖 implementation ("com.github.bumptech.glide:glide:4.12.0") annotationProcessor ("com.github.bumptech.glide:compiler:4.12.0") 第一种方式&#xff0c;布局创建frameLayout使用动态添加view方式实现 <FrameLayout and…...

【Linux篇】ELF文件及其加载与动态链接机制

ELF文件及其加载与动态链接机制 一. EFL文件1.1 ELF文件结构二. ELF文件形成与加载2.1 ELF形成可执行2.2 ELF控制性文件的加载2.2.1总结 三. ELF加载与进程地址空间3.1 动态链接与动态库加载3.1.1 进程如何看到动态库 3.2 全局偏移量表GOT(global offset table&#xff09;3.2.…...