音视频与直播

摘要:
播放rtmp,设置流媒体服务,准备流媒体服务器,编译和安装Nginx服务,配置rtmp服务,启动Nginx,音频音调的三个元素:本质上,谐波音量和音调,音色(音色),心理声学原理,人类听觉范围,音频压缩只能留下可听声音数据,在出现范围内的人的听力/正常语音、单声道、双声道多声道码率PCM音频流的码率计算:消除冗余数据(有损)霍夫曼无损编码音频冗余信息压缩的主要方法是去除收集的音频冗余信息。
音视频与直播

万人直播架构

直播产品种类

  1. 泛娱乐化直播
  2. 实时互动直播

泛娱乐化直播架构

音视频与直播第1张

实时互动直播架构

音视频与直播第2张

CDN网络

CDN网络为了解决用户访问网络资源慢而出现的。
为什么访问慢:

  1. 访问链路长,比如从中国北部到南部
  2. 人为因素,运营商切割,电信用电信,联通用联通

CDN构成

边缘节点:用户从边缘节点上获取数据,让用户访问链路变短
二级节点:主干网节点,主要用于缓存,减轻源站压力
源站:CP(内容供应方)将内容放到源站

CDN网络架构

音视频与直播第3张

搭建直播系统

常用工具

  1. ffmpeg
  2. webrtc
  3. ffplay:播放器
  4. flashplayer:播放rtmp

搭建流媒体服务

  1. 准备流媒体服务器
  2. 编译并安装 Nginx 服务
  3. 配置 RTMP 服务并启动 Nginx 服务

音频

声音三要素

  1. 音调:就是音频,男生 < 女生 < 儿童
  2. 音量:振动的幅度
  3. 音色:与材质有很大的关系,本质是谐波

音量与音调

音视频与直播第4张

音色(音品)

音视频与直播第5张

心里声学原理

人类听觉范围

音视频与直播第6张

音频压缩可以只留下可听声波数据

听觉/发生范围

音视频与直播第7张

人的正常说话,蝙蝠听不到。

音频量化与编码

音频量化过程

音视频与直播第8张

量化基本概念:
采样大小:一个采样用多少个bit存放,常用的是16bit
采样率:采样频率8k、16K、32K、44.1K、48K
声道数:单声道、双声道、多声道

码率计算

一个PCM音频流的码率:采样率 * 采样大小 * 声道数

例如:
采样率为44.1KHz,采样大小为16bit,双声道的 PCM 编码的WAV文件,
码率是:44.1K * 16 * 2 = 1411.2Kb/s

音频压缩

两种方法:

  1. 消除冗余数据(有损)
  2. 哈夫曼无损编码

音频冗余信息

压缩的主要方法是去除采集到的音频冗余信息,所谓冗余信息包括人耳听觉
范围外的音频信号,以及被掩蔽掉的音频信号

信号的掩蔽可以分为频域掩蔽时域掩蔽

频域掩蔽效应

音视频与直播第9张

时域掩蔽效应

音视频与直播第10张

音频编码过程

音视频与直播第11张

音频编解码器

常见的音频编解码器

  1. OPUS
  2. AAC
  3. Vorbis
  4. Speex:支持回音消除
  5. iLBC
  6. AMR
  7. G.711

RTMP不支持OPUS,但是支持AAC。
网上评测结果:OPUS > AAC > Vorbis

音频编码器性能对比

音视频与直播第12张

音频编码器选择

泛娱乐化直播选择AAC
实时互动直播选择OPUS
泛娱乐化和实时互动融合,则需要AAC和OPUS互转
实时互动和电话系统互联,则用到G.711、G.722

AAC(Advanced Audio Coding)

AAC的目的就是取代MP3格式。
MPEG-4标准出现后,AAC加入了SBR技术和PS技术

AAC优势

  1. 直播系统90%以上都使用AAC
  2. RTMP不支持OPUS,支持AAC
  3. AAC编解码质量非常高,可以做到音频高保真

AAC 规格

目前常用的规格有:AAC LC、AAC HE V1、AAC HE V2
音视频与直播第13张

  1. AAC LC(Low Complexity):低复杂度,码流128k
  2. AAC HE:AAC LC + SBR (Spectral Band Replication),码流64K
  3. AAC HE V2:AAC LC + SBR + PS(Parametric Stereo),码流32K

AAC格式

ADIF(Audio Data Interchange Format):这种格式只能从头开始解码,常用在磁盘文件中
ADTS(Audio Data Transport Stream):这种格式每一帧都有一个同步字(头),可以在音频流任何位置开始解码,它类似于数据流格式

AAC编码库

libfdk_AAC > ffmepg AAC > libfaac > libvo_aacenc

视频

H264基本概念

I帧:关键帧,采用帧内压缩技术
P帧:向前参考帧,压缩时只参考前一个帧,属于帧间压缩技术
B帧:双向参考帧,压缩时既参考前一帧,也参考后一帧,帧间压缩技术

GOF(Group of Frame)

GOF一组帧,一个I帧到另一个I帧之间的所有帧,成为一组,即GOF。
GOF(Group of Frame) == GOP (Group of Picture)

SPS 与 PPS

SPS(Sequence Parameter Set),序列参数集合,存放帧数,参考帧数目,解码图像尺寸,帧场编码模式选择标识等
PPS(Picture Parameter Set),图像参数集,存放熵编码模式选择标识,片组数目,初始量化参数和去方块滤波系数调整标识等

视频花屏/卡顿原因

如果 GOP 分组中的P帧丢失会造成解码端的图像发生错误
为了避免花屏问题的发生,一般如果发现P帧或者I帧丢失,就不显示本GOP内的所有帧,直到下一个I帧来后重新刷新图像
花屏是因为丢帧,卡顿是为了避免丢帧而造成的花屏,理论上二选一。

视频编解码器

  1. x264 / x265:软编基本都会选择这个
  2. openH264:支持视频分层(SVC)
  3. vp8 / vp9

H264编码原理

H264压缩技术

  1. 帧内预测压缩,解决的是空域数据冗余问题
  2. 帧间预测压缩,解决的是时域数据冗余问题
  3. 整数离散余弦变换(DCT),将空间上的相关性变为频域上无关的数据然后进行量化
  4. CABAC压缩

宏块划分与分组

音视频与直播第14张
划分后结果是:
音视频与直播第15张

子块划分

音视频与直播第16张

帧分组

音视频与直播第17张

视频压缩

帧间预测

组内宏块查找

音视频与直播第18张

运动估算

音视频与直播第19张

运动矢量与补偿压缩

音视频与直播第20张

帧内预测

音视频与直播第21张

计算帧内预测残差值

音视频与直播第22张

预测模式与残差值压缩

音视频与直播第23张

DCT压缩

音视频与直播第24张

压缩后

音视频与直播第25张

VLC压缩(无损压缩)

音视频与直播第26张

CABAC 压缩

音视频与直播第27张

H264

H264结构图

音视频与直播第28张

H264编码分层

分成两层:

  1. NAL层,Network Abstraction Layer,视频数据网络抽象层
  2. VCL层,Video Coding Layer,视频数据编码层。压缩数据

码流基本概念

SODB:String Of Data Bits,原始数据比特流,长度不一定是8的倍数,它是由VCL层产生的
RBSP:Raw Byte Sequence Payload,SODB + trailing bits,算法是在SODB最后一位补1,不按字节对齐则补0
EBSP:Encapsulate Byte Sequence Payload,需到两个连续的0x00就增加一个0x03
NUAL:NAL Header(1B) + EBSP

NAL Unit

音视频与直播第29张

切片(Slice)与宏块(MacroBlock)

音视频与直播第30张

H264切片

音视频与直播第31张

H264码流分层

音视频与直播第32张

NALU

NAL Header

音视频与直播第33张
F:forbidden_zero_bit,在H.264规范中规定了这一位必须为0
NRI:指示重要性,暂无用
Type:这个NALU单元的类型
音视频与直播第34张
音视频与直播第35张

NAL类型介绍

  1. 单一类型:一个RTP只包含一个NALU
  2. 组合类型:一个RTP包含多个NALU,类型是24-27
  3. 分片类型:一个NALU单元分成多个RTP包,类型是28和29
单一NALU的RTP包

音视频与直播第36张

组合NALU的RTP包

音视频与直播第37张

分片NALU的RTP包

音视频与直播第38张

FU Header

音视频与直播第39张
S:start bit,用于指明分片的开始
E:end bit,用于指明分片的结束
R:未使用,设置为0
Type:指明分片NAL类型

RGB

红、绿、蓝,每一种一个字节,总共24bit

YUV

也称YCbCr,是电视系统所采用的一种颜色编码方法
Y 表示明亮度,也就是灰阶度,它是基础信号
U 和 V 表示的则是色度,UV 的作用是描述影像色彩及饱和度,他们用于指定像素的颜色

YUV常见格式

  1. YUV4:2:0(YCbCr 4:2:0)
  2. YUV4:2:2(YCbCr 4:2:2)
  3. YUV4:4:4(YCbCr 4:4:4)
    YUV的使用还是为了节省空间

YUV4:2:0

YUV4:2:0并不意味着只有Y,Cb两个分量,而没有Cr分量。它实际指的是对每一行扫描线来说,只有一种色度分量,它以2:1的抽样率存储
相邻的扫描行存储不同的色度分量,也就是说,如果一行是4:2:0的话,下一行就是4:0:2,再下一行是4:2:0...,以此类推

YUV存储格式

planar(平面)

I420:YYYYYYYY UU VV => YUV420P
YV12:YYYYYYYY YY UU => YUV420P

packed(打包)

NV12:YYYYYYYY UVUV => YUV420SP
NV21:YYYYYYYY VUVU => YUV420SP

音视频技术栈

音视频知识

  1. 音视频采集
  2. 音视频硬件编/解码
  3. FFMPEG
  4. 视频渲染与OpenGL
  5. x264优化
  6. 交叉编译与优化
  7. WebRTC
  8. 音视频处理架构
  9. 网络传输
  10. 解码
  11. 渲染

行业痛点

  1. 视频秒开
  2. 回音消除
  3. 音频降噪
  4. 视频出现花屏、卡顿、绿边
  5. 手机发烫
  6. 音视频同步
 
 转自:https://www.cnblogs.com/minbo/p/yin-shi-pin.html

免责声明:文章转载自《音视频与直播》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇5G名词术语阅读任务下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

jQ效果:jQuery和css自定义video播放控件

下面介绍一下通过jquery和css自定义video播放控件。 Html5 Video是现在html5最流行的功能之一,得到了大多数最新版本的浏览器支持.包括IE9,也是如此.不同的浏览器提供了不同的原生态浏览器视频空间.我们制作自定义视频控件为了在所有的浏览器中有一个相同的Html5视频控件而不受默认视频控件的控制. 实际上,自定义视频控件并不困难.本...

MPMoviePlayerController属性方法简介

属性 说明 @property (nonatomic, copy) NSURL *contentURL 播放媒体URL,这个URL可以是本地路径,也可以是网络路径 @property (nonatomic, readonly) UIView *view 播放器视图,如果要显示视频必须将此视图添加到控制器视图中 @property (non...

songshu-video-uniapp-YYC松鼠短视频前端源码-开源--优雅草科技官方发布

songshu-video-uniapp-YYC松鼠短视频前端源码-开源–优雅草科技官方发布 介绍 songshu-video-uniapp-YYC松鼠短视频前端源码-开源–优雅草科技官方发布----开源代码仅供学习研究参考禁止用于商业用途,前端部分将持续更新,此做法是为了杜绝网络上部分不怀好意的网友和部分同行拿着我们的开源版各种胡乱改并且发布宣称官方最...

Asp.NET导出Excel文件乱码解决若干方法 (转)

  Asp.NET导出Excel文件乱码解决若干方法 在Asp.NET开发过程中经常会将一些列表项目导出为Excel方便用户查看和保存,但是也经常遇到文件名乱码、文件内容乱码等问题。最近我也接到了这样的Bug,现总结了若干个解决办法,供遇到问题的朋友们参考一下。希望以下的某些方法可以解决您的问题。   程序逻辑及问题  前端点击导出Excel之后,从后台...

c# ffmpeg常用参数

c#  ffmpeg常用参数   转换文件格式的同时抓缩微图: ffmpeg -i "test.avi" -y -f image2 -ss 8 -t 0.001 -s 350x240 'test.jpg' 对已有flv抓图: ffmpeg -i "test.flv" -y -f image2 -ss 8 -t 0.001 -s 350x240 'test....

(转)字符编码笔记:ASCII,Unicode和UTF8

今天中午,我突然想搞清楚Unicode和UTF-8之间的关系,于是就开始在网上查资料。 结果,这个问题比我想象的复杂,从午饭后一直看到晚上9点,才算初步搞清楚。 下面就是我的笔记,主要用来整理自己的思路。但是,我尽量试图写得通俗易懂,希望能对其他朋友有用。毕竟,字符编码是计算机技术的基石,想要熟练使用计算机,就必须懂得一点字符编码的知识。 1. ASCII...