音视频技术

简介: 音视频技术内容介绍入门

内容介绍

基础知识

  • Linux 基础知识
  • C基础回顾
  • Swift 语言
  • 各平台 ffmpeg 编译

音频

  • 音频基础知识
  • 音频编码原理
  • 音频数据的采集
  • AAC/OPUS 编码

视频

  • RGB/YUV
  • H264 编码原理
  • 视频数据采集
  • H264/H265编码
  • H264参数调优

流媒体服务器

  • nginx
  • SRS
  • CDN 网络
  • RTMP 传输

收获

  • 掌握音视频基础知识
  • H264编码原理及参数调优
  • 实战音视频采集
  • 实战音视频编码
  • 构建大并发流媒体服务器
  • RTMP 传输

亮点

贴近生活,通俗易懂

  • 声音是如何产生的?
  • 人的听觉范围
  • 显示器显示图像

深入浅出,逐步迭代

  • 打开音频设备
  • 读取音视频数据
  • 音频重采样
  • 音频编码

理论与实战结合

音频基础 => ffmpeg 命令 => ffmpeg API

    1. 音频三要素:采样率、采样大小、通道数
    1. ffplay -ar 44100 -ac 2 -f s16le xxx.pcm
    1. ffmpeg API 实现音频数据的采集

音视频的广泛应用

  • 直播类(互动直播系统): 音视频会议、教育直播、娱乐/游戏直播等,本次以娱乐直播系统作为背景进行实战。
  • 短视频(音视频特效、美颜瘦脸): 抖音、快手、小咖秀等
  • 音视频编辑(剪辑)
  • 网络视频:优酷、腾讯视频、爱奇艺等
  • 音视频通话:微信、QQ、Skype等
  • 视频监控
  • 人工智能:人脸识别、智能音响,更关注算法

最简单的直播系统常用工具

  • ffmpeg
ffmpeg -i video.mp4 -f flv rtmp://localhost/live/test
  • ffplay
ffplay rtmp://localhost/live/test

编译 ffmpeg 与 ffplay

  • Linux 基础
  • Linux/Mac 下编译 ffmpeg 和 ffplay
  • Windows 下编译 ffmpeg 和 ffplay
  • 基本命令
    lscdpwdmkdircprmsudopkg-config
  • 安装工具

apt/brew/yum

brew search [package name]
brew install [package name]
  • 环境变量

PATH、PKG_CONFIG_PATH

  • 环境变量的变更
// 查看环境变量
env

~/profile

  • 编辑器 vim

:w 保存
:q 退出
:wq 保存并退出
i 编辑
h 光标左移
j
k

l 光标右移

播放器架构

image.png

渲染流程

image.png

FFMPEG 从何而来

  • 2000年,由法布里斯·贝拉(FabriceBellard)创建。
  • 2004年,迈克尔(Michael Niedermayer)接管。
  • 2011年,Libav 从 FFMPEG 分离。

FFmpeg 命令分类

处理流程

image.png

1.基本信息查询命令

image.png

  • 显示版本 -version
ffmpeg -version
  • 显示可用的设备 -devices
  • 显示所有编解码器 -codecs
  • 显示可用的解码器 -decoders
  • 显示所有的编码器 -encoders
  • 显示可用的demuxers -demuxers
  • 显示可用的muxers -muxers
  • 显示比特流filter -bsfs
  • 显示可用的格式 -formats
  • 显示可用的协议 -protocols
  • 显示可用的过滤器 -filters
  • 显示可用的像素格式 -pix_fmts
  • 显示也用的采样格式 -sample_fmts
  • 显示channel名称 -layouts
  • 显示识别的颜色名称 -colors

2.录制命令

  • 录屏命令

录制:

// mac
ffmpeg -f avfoundation -i 1 -r 30 out.yuv
// windows
ffmpeg -f gdigrab -i desktop  -r 60 out.yuv
// 播放录制好的视频
ffplay
  • -f:指定使用 avfoundation 采集数据
  • -i:指定从哪儿采集数据,他是一个文件索引号
  • -r:指定帧率
  • out.yuv:输出的原始数据格式

播放:

采集格式

image.png

播放格式

image.png

-s 指采集像素
-pix_fmt 指采集的视频格式
ffplay -s 1920x1080 -pix_fmt bgra out.yuv
查看索引号
// mac
// 1 -> Capture screen 屏幕
ffmpeg -f avfoundation -list_devices true -i ""
录音 & 录制视频

1:0 分号前1指视频采集设备索引,分号后0指音频采集设备索引

ffmpeg -f avfoundation -i :0 out.wav

3.分解/复用命令

image.png

// mac 多媒体格式转换
ffmpeg -i out.mp4 -vcodec copy -acodec copy out.flv
视频中抽离视频画面,不要音频

-an 表示不要音频(audio not or no)

ffmpeg -i longxia.mp4 -an -vcodec copy out.h264
视频中抽离音频,不要视频

-vn 表示不要音频(video not or no)

ffmpeg -i longxia.mp4 -acodec copy -vn out.aac
  • -i : 输入文件
  • -vcodec copy : 视频编码处理方式
  • -acodec copy : 音频编码处理方式

4.处理原始数据命令

//2-6
原始数据就是 ffmpeg 解码后的数据,对于音频就是解码后的 PCM 数据, 对于视频就是 YUV 数据。

5.裁剪与合并命令

6.图片/视频互转命令

7.图片/视频互转命令

8.直播相关命令

9.各种滤镜命令

基础开发

几个词

  • 码率
  • 帧率
  • 压缩率
  • 分辨率
相关文章
|
1月前
|
存储 缓存 编解码
C++ 音视频流媒体浅谈
C++ 音视频流媒体浅谈
C++ 音视频流媒体浅谈
|
1月前
|
存储 编解码 C++
C++ 音视频原理
C++ 音视频原理
|
1月前
|
编解码 算法
网易云音乐音视频算法处理技术
网易云音乐音视频算法处理技术
98 0
|
8月前
|
编解码
[笔记]音视频之常见音视频封装格式组成
[笔记]音视频之常见音视频封装格式组成
|
存储 编解码 Windows
音视频相关基础
视频的播放原理:多张图片在短时间内播放,人眼就会认为是一段连贯的动作,以前的胶片电影,还有小时候玩过的快速翻页就能看动画的小书……
92 0
|
Web App开发 前端开发 中间件
WebRTC 实战:实现 P2P 实时视频互动
只有虽然说WebRTC支持P2P,但是需要有一台信令服务器来交换双方的SDP,现在我们就来用Node实现一个信令服务器。
381 0
|
JSON 编解码 监控
天猫精灵音视频质保框架介绍
背景音视频做为天猫精灵的重要业务,可支持多态终端的爱家看护监控、音视频通话等场景,志在打造陪伴类心智,为用户生活增添便捷和美好。近一年业务经历了手机/音箱/云端/服务商等整体换血,在维持40万日活访问的基础上,打造新品卖点,提升性能耗时。音视频业务的质量保证,除了要考虑通用音视频指标,还要结合业务架构实际,从功能/稳定/性能/QoS等方面提升用户体验,了解行业位置。现将质保框架总结如下,希望能抛砖
天猫精灵音视频质保框架介绍
|
Web App开发 编解码 缓存
基于视频流传输 — 在线教育白板技术
在线教育不同于线下教育, 内容需要经过电子白板展现给用户,如何做出优秀的在线教育白板成为研究的重点。本文来自学而思网校客户端架构负责人赵文杰在 LiveVideoStackCon 2018 大会上的分享,并由 LiveVideoStack 整理而成。
基于视频流传输 — 在线教育白板技术
|
Web App开发 编解码 负载均衡
一对一语音直播系统源码如何解决音视频直播技术难点
直播作为实时性和互动性要求较高的音视频应用场景,存在非常多的技术难点,就连一对一的直播模式也毫不例外。比如低延迟、流畅性、回声消除、国内外互通和海量并发等问题,都是开发过程中的难点。但是,在开发过程中如果具备了优质的一对一语音直播系统源码,那么这些难点可能都会得到一定的解决。
一对一语音直播系统源码如何解决音视频直播技术难点
|
Web App开发 存储 编解码
直播平台搭建之音视频开发:认识主流视频编码技术H.264
什么是H.264?H.264是一种高性能的视频编解码技术。目前国际上制定视频编解码技术的组织有两个,一个是“国际电联”,它制定的标准有H.261、H.263、H.263+等,另一个是“国际标准化组织(ISO)”它制定的标准有MPEG-1、MPEG-2、MPEG-4等。而H.264则是由两个组织联合组建的联合视频组(JVT)共同制定的新数字视频编码标准,所以它既是ITU-T的H.264,又是ISO/IEC的MPEG-4高级视频编码,而且它将成为MPEG-4标准的第10部分。因此,不论是MPEG-4 AVC、MPEG-4 Part 10,还是ISO/IEC 14496-10,都是指H.264。