一、万人直播架构与CDN网络
1.直播分类
与固话互联,要求延迟不超过400毫秒
2.泛娱乐化直播架构
cdn最重要
3.实时互动直播架构
tcp协议是可靠的流式传输协议——A向B发送数据,必须收到且是有序的
发送,确认,超时,重发
可以重发三次,每次等待超时的时间都是成倍增长。如果网络不好的话,等待时间就会很长
tcp不可能达到实时传输效果
使用UDP来传输,一直发包,至于是否收到,不管
基于音视频数据是有实时有效性的,所以选择UDP来达到实时互动效果
udp没有现成网络,要自己创建
服务端多节点,一旦一个节点出现问题,可以快速切换到另一个节点,每个节点负载均衡
每个节点都要定时向控制中心报告数据
内总线-保证数据安全
通过内部总线传到媒体服务器上,cdn网络使用rtmp协议,媒体服务器起到转换作用,从rtp到rtmp
用户获得cnd的流,直接观看
4、CDN网络介绍
CDN:为了解决用户访问网络资源慢而出现的
链路过长,运营商各自利益
用户访问资源流程
电信用户通过DNS或者http先找到就近边缘节点,如果数据没有,直接到主干节点,看资源是在哪提供的服务,如果是在联通上,就会到联通的主干节点上访问,如果数据没有,就会到联通的源节点上,如果找到数据,再通过原节点返回。如果是第一个用户,就会走很长时间,如果其他用户也访问此数据,那么数据就会缓存到边缘节点上,可以直接从边缘节点上直接访问,加快速度
传统的cdn网络会追求一些热点,将一些热点放到缓存里
对于直播的cnd网络,一般会通过源直接push到主干节点,让数据都存在,与推拉是相结合的
5.亲手搭建一套简单的直播系统
ffmpeg-常见音视频格式转化库,音视频抽取(eg:小咖秀),视频上打水印,去水印,倍速播放,音视频剪辑
ffplay-播放器,命令行的。基于ffmpeg做的二次开发
flashplayer-播放rtmp流的,可以对rtmp协议做分析
安装时间会长一些,nginx服务默认不包括rtmp服务
工作处理器个数:1
事件里的连接数:1024
配置文件增加rtmp的配置项
端口:1935
音视频传输,每个块大小:4000字节
指定一个特殊应用:live
应用打开,关闭录制,允许任何人向我发起请求
wq!退出
nginx -s reload
重启服务
nginx
如果是第一次,直接启动就可以
查看是否有1935端口
netstat -an |grep 1935
使用tcp协议,使用ipv4
-i是输入
(1)通过ffmpeg方法
讲一个直播地址上的音视频流推送到本地上
http://bbs.chinaffmpeg.com/1.swf
输入所要拉流的服务器地址
播放
(2)通过ffplay播放
ffplay rtmp://localhost:1935/live/room
(3)通过手机推流
通过手机推送到了mac本上,通过ffplay再从流媒体上抓取音视频流
有两个终端观看
二、音频入门
1.声音三要素
越接近正弦波,声音一般越好听,畸形或产生噪波
音频压缩,就可以采集到很多数据,砍掉人类听不见的,减少数据存储量
2,音频的量化与编码
低频20hz,在44.1k采样频率里,每秒采样2k次
高频20000hz,在44.1k采样频率里,每秒采样2次
3.音频压缩
发声之前的50毫秒如果有个声音特别小,就会被遮盖掉
发生后的100毫秒也会被遮盖
4.音频编码jiema器选型
实时互动系统可以用opus
泛娱乐化直播一般使用AAC,opus一般不支持,推广上有些困难
两个系统融合,需要将opus与AAC互转
speex:回音消除,降噪模块等可实现
G.711:有些会与固话相联系,固话用的就是G.711,或者G.722
绿色:开源且不收费
蓝色:不开源不收费
红色:不开源收费
5.AAC讲解
(1)为什么重点介绍AAC
应用范围广,直播系统90%以上使用
传输协议,像cdn,支持rtmp,但是不支持opus
AAC的音频编解码可以保持高保真
(2)AAC出现的原因
SBR:降低低频的采样率,提高对高频的采样率,降低大小,提高音质
ps:把立体声保存,一个声道完整保存,另一个声道只存差异部分
AAC HE:码率64k
AAC HE V2:,码率32k
rtmp和flv中都有adts的格式
三、视频入门
1.视频基础知识
一般视频文件在30帧左右,比较高级的要求较高的在60帧
压缩,B帧比率高。缺点:实时互动需要参考后帧,与网络息息相关,如果网络不好就要重传
一般实时互动都不会使用B帧
泛娱乐化可以使用B帧
一个I帧和另一个I帧之间成为一组帧,GOF
在一组帧之前,首先会收到sps和pps,如果没有这两个参数是没法解码的
直播里如果用x265,会占用很好的cpu,一般不用,点播里可以用
openH264支持svc传输,svc技术:如果网络差就发最小的,还可以就发中间的,网络好就都发..移动端不能再使用硬编,只能使用软编,可能会占用资源,发烫
硬编占用网宽,软编考验移动端,这是个取舍问题
google推出的:vp8对应x264,vp9对应x265
2.H264的划分和帧分组
傅里叶变换:将复杂的波形图编程多个正弦波
CABAC压缩:无损压缩
3.视频压缩技术详解
(1)帧内压缩技术
(2)DCT压缩(整数余弦变换)
(3)VLC压缩
4.H264结构与码流
拆包,通过nal层处理
5.NAL单元
6.YUV讲解
比rgb(8:8:8)节省存储空间
pc端: I420,
ios: NV12
安卓:NV21
四、课程总结