其他分享
首页 > 其他分享> > 视频直播技术大全、直播架构、技术原理和实现思路方案整理(转)

视频直播技术大全、直播架构、技术原理和实现思路方案整理(转)

作者:互联网

直播难:个人认为要想把直播从零开始做出来,绝对是牛逼中的牛逼,大牛中的大牛,因为直播中运用到的技术难点非常之多,视频/音频处理,图形处理,视频/音频压缩,CDN分发,即时通讯等技术,每一个技术都够你学几年的。

直播易:已经有各个领域的大牛,封装好了许多牛逼的框架,我们只需要用别人写好的框架,就能快速的搭建一个直播app,也就是传说中的站在大牛肩膀上编程。

通用直播模型

首先是主播方,它是产生视频流的源头,由一系列流程组成:第一,通过一定的设备来采集数据;第二,将采集的这些视频进行一系列的处理,比如水印、美颜和特效滤镜等处理;第三,将处理后的结果视频编码压缩成可观看可传输的视频流;第四,分发推流,即将压缩后的视频流通过网络通道传输出去。

其次是播放端,播放端功能有两个层面,第一个层面是关键性的需求;另一层面是业务层面的。先看第一个层面,它涉及到一些非常关键的指标,比如秒开,在很多场景当中都有这样的要求,然后是对于一些重要内容的版权保护。为了达到更好的效果,我们还需要配合服务端做智能解析,这在某些场景下也是关键性需求。再来看第二个层面也即业务层面的功能,对于一个社交直播产品来说,在播放端,观众希望能够实时的看到主播端推过来的视频流,并且和主播以及其他观众产生一定的互动,因此它可能包含一些像点赞、聊天和弹幕这样的功能,以及礼物这样更高级的道具。

我们知道,内容产生方和消费方一般都不是一一对应的。对于一个直播产品来讲,最直观的体现就是一个主播可能会有很多粉丝。因此,我们不能直接让主播端和所有播放端进行点对点通信,这在技术上是做不到或者很有难度。主播方播出的视频到达播放端之前,需要经过一系列的中间环节,也就是我们这里讲的直播服务器端。

直播服务器端提供的最核心功能是收集主播端的视频推流,并将其放大后推送给所有观众端。除了这个核心功能,还有很多运营级别的诉求,比如鉴权认证,视频连线和实时转码,自动鉴黄,多屏合一,以及云端录制存储等功能。另外,对于一个主播端推出的视频流,中间需要经过一些环节才能到达播放端,因此对中间环节的质量进行监控,以及根据这些监控来进行智能调度,也是非常重要的诉求。

实际上无论是主播端还是播放端,他们的诉求都不会仅仅是拍摄视频和播放视频这么简单。在这个核心诉求被满足之后,还有很多关键诉求需要被满足。比如,对于一个消费级的直播产品来说,除了这三大模块之外,还需要实现一个业务服务端来进行推流和播放控制,以及所有用户状态的维持。如此,就构成了一个消费级可用的直播产品。

但是正如刚才所说的直播通用模型一样,实际上这里很多功能都可以抽象成一个通用功能,也就是说各家直播产品的需求和实现方式都类似。

直播架构

直播App 架构 和 技术点

直播APP的业务逻辑不复杂,使用基本的MVC框架即可。

一个完整直播APP功能

一个完整直播app实现流程

1.采集、2.滤镜处理、3.编码、4.推流、5.CDN分发、6.拉流、7.解码、8.播放、9.聊天互动

了解流媒体(直播需要用到流媒体)

  1. 流媒体开发:网络层(socket或st)负责传输,协议层(rtmp或hls)负责网络打包,封装层(flv、ts)负责编解码数据的封装,编码层(h.264和aac)负责图像,音频压缩。
  2. 帧:每帧代表一幅静止的图像
  3. GOP:(Group of Pictures)画面组,一个GOP就是一组连续的画面,每个画面都是一帧,一个GOP就是很多帧的集合。
    ☞ 直播的数据,其实是一组图片,包括I帧、P帧、B帧,当用户第一次观看的时候,会寻找I帧,而播放器会到服务器寻找到最近的I帧反馈给用户。因此,GOP Cache增加了端到端延迟,因为它必须要拿到最近的I帧
    ☞ GOP Cache的长度越长,画面质量越好
  4. 码率:图片进行压缩后每秒显示的数据量。
  5. 帧率:每秒显示的图片数。影响画面流畅度,与画面流畅度成正比:帧率越大,画面越流畅;帧率越小,画面越有跳动感。
    ☞ 由于人类眼睛的特殊生理结构,如果所看画面之帧率高于16的时候,就会认为是连贯的,此现象称之为视觉暂留。并且当帧速达到一定数值后,再增长的话,人眼也不容易察觉到有明显的流畅度提升了。
  6. 分辨率:(矩形)图片的长度和宽度,即图片的尺寸
  7. 压缩前的每秒数据量:帧率X分辨率(单位应该是若干个字节)
  8. 压缩比:压缩前的每秒数据量/码率 (对于同一个视频源并采用同一种视频编码算法,则:压缩比越高,画面质量越差。)
  9. 视频文件格式:文件的后缀,比如.wmv,.mov,.mp4,.mp3,.avi,
    ☞ 主要用处,根据文件格式,系统会自动判断用什么软件打开,
    注意: 随意修改文件格式,对文件的本身不会造成太大的影响,比如把avi改成mp4,文件还是avi.
  10. 视频封装格式:一种储存视频信息的容器,流式封装可以有TS、FLV等,索引式的封装有MP4,MOV,AVI等,
    ☞ 主要作用:一个视频文件往往会包含图像和音频,还有一些配置信息(如图像和音频的关联,如何解码它们等):这些内容需要按照一定的规则组织、封装起来.
    ☞ 注意:会发现封装格式跟文件格式一样,因为一般视频文件格式的后缀名即采用相应的视频封装格式的名称,所以视频文件格式就是视频封装格式。
  11. 视频封装格式和视频压缩编码标准:就好像项目工程和编程语言,封装格式就是一个项目的工程,视频编码方式就是编程语言,一个项目工程可以用不同语言开发。

直播基础知识介绍

采集视频、音频

采集视频、音频编码框架:AVFoundation:AVFoundation是用来播放和创建实时的视听媒体数据的框架,同时提供Objective-C接口来操作这些视听数据,比如编辑,旋转,重编码

视频、音频硬件设备

视频处理(美颜,水印)

视频处理框架

视频编码解码框架

视频编码技术

音频编码技术

AAC,mp3:这些属于音频编码技术,压缩音频用

码率控制

视频封装格式

推流

数据传输框架

流媒体数据传输协议

流媒体服务器

常用服务器

流媒体SRS 4.0开发入门

数据分发

拉流

音视频高级开发-直播架构分析、低延迟播放器-变速播放实现
直播如何做到低延迟/为什么不能使用vlc、ffplay做延迟测试

解码

解封装

demuxing(分离):从视频流、音频流,字幕流合成的文件(容器格式(FLV,TS))中, 分解出视频、音频或字幕,各自进行解码。

音频编码框架

fdk_aac:音频编码解码框架,PCM音频数据和AAC音频数据互转

解码介绍

播放

ijkplayer:一个基于FFmpeg的开源Android/iOS视频播放器
☞ API易于集成;
☞ 编译配置可裁剪,方便控制安装包大小;
☞ 支持硬件加速解码,更加省电
☞ 简单易用,指定拉流URL,自动解码播放.

音视频开发 必知必会的播放器设计实现 ffplay / ijkplayer / vlc的播放器设计实现

聊天互动

IM:(InstantMessaging)即时通讯:是一个实时通信系统,允许两人或多人使用网络实时的传递文字消息、文件、语音与视频交流.

IM在直播系统中的主要作用是实现观众与主播、观众与观众之间的文字互动.

第三方SDK
☞ 腾讯云:腾讯提供的即时通讯SDK,可作为直播的聊天室
☞ 融云:一个比较常用的即时通讯SDK,可作为直播的聊天室

万人直播-流媒体服务器框架分析

 

版权声明:本文为CSDN博主「架构师易筋」的原创文章,
原文链接:https://blog.csdn.net/zgpeace/article/details/108552358

音视频流媒体学习资料、配套视频 学习交流群973961276 获取

 

发布于 2021-10-29 21:01  原文 https://zhuanlan.zhihu.com/p/427306816

标签:视频,流媒体,封装,解码,技术,直播,音频,大全
来源: https://www.cnblogs.com/tuyile006/p/16279544.html