音视频技术

415 阅读4分钟

内容介绍

基础知识

  • 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.各种滤镜命令

基础开发

几个词

  • 码率

  • 帧率

  • 压缩率

  • 分辨率