音视频小白系统入门笔记-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 结构。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/76959.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

mysql按条件三表并联查询

下面为你呈现一个 MySQL 按条件三表并联查询的示例。假定有三个表&#xff1a;students、courses 和 enrollments&#xff0c;它们的结构和关联如下&#xff1a; students 表&#xff1a;包含学生的基本信息&#xff0c;有 student_id 和 student_name 等字段。courses 表&…

UML之序列图的消息

序列图表现各参与者之间为完成某个行为而发生的交互及其时间顺序&#xff0c;序列图中的交互通过消息实现。消息是从一条生命线到另一条生命线的通信&#xff0c;它们通常是水平或倾斜向下的箭头&#xff0c;从发送方生命线离开&#xff0c;到达接收方生命线。如果需要&#xf…

UniAD:自动驾驶的统一架构 - 创新与挑战并存

引言 自动驾驶技术正经历一场架构革命。传统上&#xff0c;自动驾驶系统采用模块化设计&#xff0c;将感知、预测和规划分离为独立组件。而上海人工智能实验室的OpenDriveLab团队提出的UniAD&#xff08;Unified Autonomous Driving&#xff09;则尝试将这些任务整合到一个统一…

如何写好合同管理系统需求分析

引言 在当今企业数字化转型的浪潮中&#xff0c;合同管理系统作为企业法律合规和商业运营的重要支撑工具&#xff0c;其需求分析的准确性和完整性直接关系到系统建设的成败。本文基于Volere需求过程方法论&#xff0c;结合江铃汽车集团合同管理系统需求规格说明书实践案例&…

libevent服务器附带qt界面开发(附带源码)

本章是入门章节&#xff0c;讲解如何实现一个附带界面的服务器&#xff0c;后续会完善与优化 使用qt编译libevent源码演示视频qt的一些知识 1.主要功能有登录界面 2.基于libevent实现的服务器的业务功能 使用qt编译libevent 下载这个&#xff0c;其他版本也可以 主要是github上…

八、自动化函数

1.元素的定位 web自动化测试的操作核心是能够找到页面对应的元素&#xff0c;然后才能对元素进行具体的操作。 常见的元素定位方式非常多&#xff0c;如id,classname,tagname,xpath,cssSelector 常用的主要由cssSelector和xpath 1.1 cssSelector选择器 选择器的功能&#x…

Web三漏洞学习(其二:sql注入)

靶场&#xff1a;NSSCTF 、云曦历年考核题 二、sql注入 NSSCTF 【SWPUCTF 2021 新生赛】easy_sql 这题虽然之前做过&#xff0c;但为了学习sql&#xff0c;整理一下就再写一次 打开以后是杰哥的界面 注意到html网页标题的名称是 “参数是wllm” 那就传参数值试一试 首先判…

单片机非耦合业务逻辑框架

在小型单片机项目开发初期&#xff0c;由于业务逻辑相对简单&#xff0c;我们往往较少关注程序架构层面的设计。 然而随着项目经验的积累&#xff0c;开发者会逐渐意识到模块间的耦合问题&#xff1a;当功能迭代时&#xff0c;一处修改可能引发连锁反应。 此时&#xff0c;构…

Zookeeper三台服务器三节点集群部署(docker-compose方式)

1. 准备工作 - 服务器:3 台服务器,IP 地址分别为 `10.10.10.11`、`10.10.10.12`、`10.10.10.13`。 - 安装 Docker:确保每台服务器已安装 Docker 和 Docker Compose。 - 网络通信:确保三台服务器之间可以通过 IP 地址互相访问,并开放以下端口: - `2181`:Zookeeper 客户…

Mac关闭sip方法

Mac关闭sip方法 导航 文章目录 Mac关闭sip方法导航完整操作流程图详细步骤 完整操作流程图 这东西是我在网上搬运下来的&#xff0c;但是我在为业务实操过程中&#xff0c;根据实操情况还是有新的注意点的 详细步骤 1.在「关于本机」-「系统报告」-「软件」;查看SIP是否开启…

C++| 深入剖析std::list底层实现:链表结构与内存管理机制

引言 std::list的底层实现基于双向链表&#xff0c;其设计哲学与std::vector截然不同。本文将深入探讨其节点结构、内存分配策略及迭代器实现原理&#xff0c;揭示链表的性能优势和潜在代价。 1. 底层数据结构&#xff1a;双向链表 每个std::list节点包含&#xff1a; 数据域…

汉诺塔问题——用贪心算法解决

目录 一&#xff1a;起源 二&#xff1a;问题描述 三&#xff1a;规律 三&#xff1a;解决方案 递归算法 四&#xff1a;代码实现 复杂度分析 一&#xff1a;起源 汉诺塔&#xff08;Tower of Hanoi&#xff09;问题起源于一个印度的古老传说。在世界中心贝拿勒斯&#…

【Python】Python 100题 分类入门练习题 - 新手友好

Python 100题 分类入门练习题 - 新手友好篇 - 整合篇 一、数学问题题目1&#xff1a;组合数字题目2&#xff1a;利润计算题目3&#xff1a;完全平方数题目4&#xff1a;日期天数计算题目11&#xff1a;兔子繁殖问题题目18&#xff1a;数列求和题目19&#xff1a;完数判断题目21…

【linux】--- 进程概念

进程概念 1.认识冯诺依曼结构2. 操作系统&#xff08;Operator system)2.1 概念2.2 设计OS的目的2.3 理解操作系统2.4 如何理解管理2.5 理解系统调用和库函数 3. 进程3.1 基本概念和基本操作3.1.1 描述进程 - PCB3.1.2 task_struct3.1.3 查看进程 3.2 进程状态3.2.1 运行&&…

算法堆排序记录

【算法】排序算法之堆排序 - 知乎 应用场景&#xff1a;获取第n个大或者小的数 操作步骤&#xff1a; 1、将数组构造成堆 2、调整根节点为最大堆 ->倒序对每个根节点执行最大化 ->根节点最大化过程中如果发生交换&#xff0c;需要保证子节点也为最大堆&#xff08;执行…

STM32 模块化开发实战指南:系列介绍

本文是《STM32 模块化开发实战指南》系列的导读篇,旨在介绍整个系列的写作目的、适用读者、技术路径和每一篇的主题规划。适合从事 STM32、裸机或 RTOS 嵌入式开发的个人开发者、初创工程师或企业项目团队。 为什么要写这个系列? 在嵌入式开发中,很多人刚开始都是从点亮一个…

【眼底辅助诊断开放平台】项目笔记

这是一个标题 任务一前端页面开发&#xff1a;后端接口配置&#xff1a; 任务二自行部署接入服务 日志修改样式和解析MD文档接入服务 Note前端登陆不进去/更改后端api接口304 Not Modifiedlogin.cache.jsonERR_CONNECTION_TIMED_OUT跨域一般提交格式proxy.ts src/coponents 目录…

【后端开发】Spring MVC-计算器、用户登录、留言板

文章目录 前后端分离设计接口设计思路项目问题解决思路 计算器需求分析接口定义前端页面代码服务器代码 用户登录需求分析接口定义用户登录校验接口查询登录用户接口 前端页面代码用户登录校验查询登录用户 服务器代码前后端交互 留言版需求分析接口定义获取全部留言发布留言前…

在Ubuntu-22.04.5中安装ONLYOFFICE DocSpace(协作空间)【注意:安装失败,谨慎参考!】

1. 通过Docker安装 预计需要下载10G的镜像。 &#xff08;1&#xff09;下载docspace安装脚本 curl -fsSL https://download.onlyoffice.com/docspace/docspace-install.sh -o docspace-install.sh &#xff08;2&#xff09;修改docker compose的别名为docker-compose ali…

2025年计算机领域重大技术突破与行业动态综述

——前沿技术重塑未来&#xff0c;开发者如何把握机遇&#xff1f; 2025年第一季度&#xff0c;全球计算机领域迎来多项里程碑式进展&#xff0c;从量子计算到人工智能&#xff0c;从芯片设计到网络安全&#xff0c;技术革新与产业融合持续加速。本文梳理近三个月内最具影响力…