内容介绍
基础知识
- Linux 基础知识
- C基础回顾
- Swift 语言
- 各平台 ffmpeg 编译
音频
- 音频基础知识
- 音频编码原理
- 音频数据的采集
- AAC/OPUS 编码
视频
- RGB/YUV
- H264 编码原理
- 视频数据采集
- H264/H265编码
- H264参数调优
流媒体服务器
- nginx
- SRS
- CDN 网络
- RTMP 传输
收获
- 掌握音视频基础知识
- H264编码原理及参数调优
- 实战音视频采集
- 实战音视频编码
- 构建大并发流媒体服务器
- RTMP 传输
亮点
贴近生活,通俗易懂
- 声音是如何产生的?
- 人的听觉范围
- 显示器显示图像
深入浅出,逐步迭代
- 打开音频设备
- 读取音视频数据
- 音频重采样
- 音频编码
理论与实战结合
音频基础 => ffmpeg 命令 => ffmpeg API
-
- 音频三要素:采样率、采样大小、通道数
-
- ffplay -ar 44100 -ac 2 -f s16le xxx.pcm
-
- 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
- 基本命令
ls
、cd
、pwd
、mkdir
、cp
、rm
、sudo
、pkg-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 光标右移
播放器架构
渲染流程
FFMPEG 从何而来
- 2000年,由法布里斯·贝拉(FabriceBellard)创建。
- 2004年,迈克尔(Michael Niedermayer)接管。
- 2011年,Libav 从 FFMPEG 分离。
FFmpeg 命令分类
处理流程
1.基本信息查询命令
- 显示版本
-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:输出的原始数据格式
播放:
采集格式
播放格式
-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.分解/复用命令
// 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.各种滤镜命令
基础开发
几个词
- 码率
- 帧率
- 压缩率
- 分辨率