视频直播的技术原理和架构方案
直播模型与架构图
一个通用的直播模型一般包括三个模块:主播方、服务器端和播放端。 录制->编码->网络传输->解码->播放
首先是主播方,它是产生视频流的源头,由一系列流程组成:第一,通过一定的设备来 采集数据;第二,将采集的这些视频进行一系列的处理,比如水印、美颜和特效滤镜等处理; 第三,将处理后的结果视频编码压缩成可观看可传输的视频流;第四,分发推流,即将压缩 后的视频流通过网络通道传输
出去。
其次是播放端,播放端功能有两个层面,第一个层面是关键性的需求;另一层面是业务 层面的。先看第一个层面,它涉及到一些非常关键的指标,比如秒开,在很多场景当中都有 这样的要求,然后是对于一些重要内容的版权保护。为了达到更好的效果,我们还需要配合 服务端做智能解析,这在某些场景
下也是关键性需求。再来看第二个层面也即业务层面的功 能,对于一个社交直播产品来说,在播放端,观众希望能够实时的看到主播端推过来的视频 流,并且和主播以及其他观众产生一定的互动,因此它可能包含一些像点赞、聊天和弹幕这 样的功能,以及礼物这样更高级的道具。
直播服务器端提供的最核心功能是收集主播端的视频推流,并将其放大后推送给所有 观众端。除了这个核心功能,还有很多运营级别的诉求,比如鉴权认证,视频连线和实时转 码,自动鉴黄,多屏合一,以及云端录制存储等功能。另外,对于一个主播端推出的视频流, 中间需要经过一些环节才能到达播
放端,因此对中间环节的质量进行监控,以及根据这些监 控来进行智能调度,也是非常重要的诉求。
实际上无论是主播端还是播放端,他们的诉求都不会仅仅是拍摄视频和播放视频这么简 单。在这个核心诉求被满足之后,还有很多关键诉求需要被满足。比如,对于一个消费级的 直播产品来说,除了这三大模块之外,还需要实现一个业务服务端来进行推流和播放控制, 以及所有用户状态的维持。如此,
就构成了一个消费级可用的直播产品。
实现思路与步骤
录制->编码->网络传输->解码->播放
以上为直播的整体流程,根据该流程分为以下技术点:
-
怎样录制直播视频(流媒体源/编码/封装):FFmpeg
-
怎样实时上传直播视频(视频推流: 如何推/往哪里推/推流服务器) Ffmpeg -i xxxxxx(video,audio) -y rtmp://192.168.1.34:1935/rtmp/channel1[Nginx+rtmp]
-
怎样播放直播视频(如何看: HLS/rtmp/flv, videojs,ffplay,vlc,android,ios) 直播间的用户是如何交互(送礼物/聊天室/弹幕:文字性交互)
如何搭建一个完整的视频直播系统?
一个完整的直播系统大致包含这几个环节:采集、前处理、编码、传输、解码和渲染。 在两端传输的过程中再加上一个服务端处理。
大致的模型如下:
直播系统解决方案-搭建你自己的直播平台
-
视频采集与编码:FFmpeg
-
直播流服务器:SRS 或 Nginx(Rtmp/hls)
-
播放器: 网页端 Video.js+vlc