Jekyll2023-06-03T23:18:01+08:00https://pingos.io/feed.xmlPingOSopen source software for streaming media
PingOStackcczjp89@gmail.com关于PingOS系统2019-12-22T00:00:00+08:002019-12-22T00:00:00+08:00https://pingos.io/blog/post/2019/12/22/pingos-system<h1 id="描述">描述</h1>
<p>我们将整个系统拆分成完全可独立运行的三大服务以及整套系统的控制台。
由于直播服务器、点播服务器和转码服务器这三种服务器的工作负载较重,扮演的角色也更重要,所以考虑到服务的高可用和负载均衡能力,需要借助相应的调度算法实现分布式部署,下面先对各个服务器进行简单的介绍:
<img src="/assets/img/control.png" alt="控制台" /></p>
<table>
<thead>
<tr>
<th>服务名</th>
<th>含控制台</th>
<th>可独立运行</th>
<th>概要说明</th>
</tr>
</thead>
<tbody>
<tr>
<td>直播服务器</td>
<td>是</td>
<td>是</td>
<td>接收rtmp推流,也可以从第三方源地址获取内容,向播放端分发直播内容</td>
</tr>
<tr>
<td>直播调度服务器</td>
<td>否</td>
<td>否</td>
<td>实现直播服务器分布式部署和负载均衡,若只部署单台直播服务器则不需要此服务器</td>
</tr>
<tr>
<td>点播服务器</td>
<td>是</td>
<td>是</td>
<td>提供mp4、hls文件点播功能</td>
</tr>
<tr>
<td>点播调度服务器</td>
<td>否</td>
<td>否</td>
<td>实现点播服务器的分布式部署和负载均衡功能,若只部署单台点播服务器则不需要此服务器</td>
</tr>
<tr>
<td>转码服务器</td>
<td>是</td>
<td>是</td>
<td>具备直播服务器流接入的同等能力,具备将输入的流按要求转码并推送到直播服务器,同时具备对指定文件按要求进行转码</td>
</tr>
<tr>
<td>转码调度服务器</td>
<td>否</td>
<td>否</td>
<td>实现调度服务器分布式部署和负载均衡功能,若只部署单台转码服务器则不需要此服务器</td>
</tr>
</tbody>
</table>
<p>为了更好地理解我们的方案,下面将分别介绍这四个服务的主要功能,最后将阐述这四大服务之间如何通过协作来实现贵公司的需求。</p>
<h1 id="详细介绍">详细介绍</h1>
<h2 id="直播服务">直播服务</h2>
<p>直播服务器搭配直播调度服务器使用可实现分布式集群部署,为了描述方便,下文中提到的直播服务集群皆包含直播服务器和直播调度服务器。</p>
<h3 id="推流和播放功能">推流和播放功能</h3>
<p>直播服务器可接受rtmp推流,并且向外提供rtmp、hls、http-flv三种直播协议。</p>
<p><img src="/assets/img/push.png" alt="推流" /></p>
<h3 id="回源拉流功能">回源拉流功能</h3>
<p>直播服务器可从其他rtmp、rtsp、http-flv、hls地址回源拉流,回源成功后直播服务器就可向外提供rtmp、hls、http-flv三种直播协议。</p>
<p><img src="/assets/img/pull.png" alt="拉流" /></p>
<h3 id="视频文件伪直播功能">视频文件伪直播功能</h3>
<p>直播服务器可从本地或网络http地址加载视频文件,并且将其伪装成一路直播源向外提供rtmp、hls、http-flv三种直播协议。(可参考斗鱼等网络直播平台里电影直播间同等效果)</p>
<p><img src="/assets/img/file-push.png" alt="伪直播" /></p>
<h3 id="直播服务器控制台">直播服务器控制台</h3>
<p>每台直播服务器都配套一个独立的控制台对该台服务器的状态进行查看并且进行精准控制。</p>
<ol>
<li>当前直播服务器上的直播流列表以及预览</li>
<li>控制当前服务器上的直播任务(开播、剔除)</li>
</ol>
<h3 id="直播调度服务">直播调度服务</h3>
<ol>
<li>鉴权,客户端是否有权限连接直播服务器</li>
<li>记录每台直播服务器的流状态</li>
<li>为播放端和推流端分配合适的直播服务器</li>
<li>控制所有直播任务的开始和结束</li>
</ol>
<h3 id="直播服务器总结">直播服务器总结</h3>
<p>直播服务器集群有着非常丰富的流输入方式,然后将流转换成rtmp、hls、http-flv三种直播协议对外提供服务。通过直播服务器的控制台可查看每一台服务器的状态和流列表,也能进行简单的控制。
直播调度服务负责将每台独立的直播服务器联合成一个整体集群。</p>
<p><img src="/assets/img/live.png" alt="直播" /></p>
<h2 id="视频转码服务">视频转码服务</h2>
<p>视频转码服务器搭配视频转码调度服务器,可实现分布式集群部署。为了方便描述,下文中提到的直播服务集群皆包含视频转码服务器和视频转码调度服务器。</p>
<h3 id="直播转码">直播转码</h3>
<p>直播转码包括为直播流修改分辨率、添加文字水印、添加图片水印三个功能。
之所以将转码和直播分开部署是因为,转码对CPU消耗非常大,直播服务器对带宽消耗非常大,所以需要采用不同规格的硬件来应对不同的需求场景,以免资源分配不科学造成浪费。</p>
<p><img src="/assets/img/transcode.png" alt="转码" /></p>
<h3 id="文件转码加水印">文件转码(加水印)</h3>
<p><img src="/assets/img/wm.png" alt="水印" /></p>
<h3 id="hls文件切割">HLS文件切割</h3>
<p><img src="/assets/img/hls-slice.png" alt="hls" /></p>
<h2 id="点播服务">点播服务</h2>
<p>mp4、hls点播过程可通过进度条实现seek(快进、回退)</p>
<p><img src="/assets/img/vod.png" alt="点播" /></p>
<h2 id="系统总控制台">系统总控制台</h2>
<ol>
<li>展示所有服务器的任务状态,控制某台服务器停止服务</li>
<li>维护整个系统中所有服务器的上下线,以及服务发现功能</li>
<li>展示和控制(开始、停止等操作)所有在线直播流状态,每条流状态包括码率、分辨率、编码类型以及播放url等信息</li>
<li>展示和控制每条直播流是否需要转码,并且可为其制定转码后的流名、水印、分辨率</li>
<li>查看、添加和删除直播源,添加成功后直播服务器向直播源回源拉流</li>
<li>查看、添加和删除伪直播源(将视频文件推流到直播服务器)</li>
<li>可独立查看、添加和删除转码任务</li>
<li>点播文件控制,对被点播的文件进行增删改查操作</li>
<li>管理员登录鉴权</li>
<li>直播和点播的观看数量统计</li>
<li>系统流量、总负载情况</li>
<li>直播、点播和转码服务器配置下发功能</li>
<li>提供http api控制接口和查询接口,用来获取直播流url和对直播、转码任务控制</li>
</ol>PingOStackcczjp89@gmail.com描述 我们将整个系统拆分成完全可独立运行的三大服务以及整套系统的控制台。 由于直播服务器、点播服务器和转码服务器这三种服务器的工作负载较重,扮演的角色也更重要,所以考虑到服务的高可用和负载均衡能力,需要借助相应的调度算法实现分布式部署,下面先对各个服务器进行简单的介绍: 服务名 含控制台 可独立运行 概要说明 直播服务器 是 是 接收rtmp推流,也可以从第三方源地址获取内容,向播放端分发直播内容 直播调度服务器 否 否 实现直播服务器分布式部署和负载均衡,若只部署单台直播服务器则不需要此服务器 点播服务器 是 是 提供mp4、hls文件点播功能 点播调度服务器 否 否 实现点播服务器的分布式部署和负载均衡功能,若只部署单台点播服务器则不需要此服务器 转码服务器 是 是 具备直播服务器流接入的同等能力,具备将输入的流按要求转码并推送到直播服务器,同时具备对指定文件按要求进行转码 转码调度服务器 否 否 实现调度服务器分布式部署和负载均衡功能,若只部署单台转码服务器则不需要此服务器 为了更好地理解我们的方案,下面将分别介绍这四个服务的主要功能,最后将阐述这四大服务之间如何通过协作来实现贵公司的需求。 详细介绍 直播服务 直播服务器搭配直播调度服务器使用可实现分布式集群部署,为了描述方便,下文中提到的直播服务集群皆包含直播服务器和直播调度服务器。 推流和播放功能 直播服务器可接受rtmp推流,并且向外提供rtmp、hls、http-flv三种直播协议。 回源拉流功能 直播服务器可从其他rtmp、rtsp、http-flv、hls地址回源拉流,回源成功后直播服务器就可向外提供rtmp、hls、http-flv三种直播协议。 视频文件伪直播功能 直播服务器可从本地或网络http地址加载视频文件,并且将其伪装成一路直播源向外提供rtmp、hls、http-flv三种直播协议。(可参考斗鱼等网络直播平台里电影直播间同等效果) 直播服务器控制台 每台直播服务器都配套一个独立的控制台对该台服务器的状态进行查看并且进行精准控制。 当前直播服务器上的直播流列表以及预览 控制当前服务器上的直播任务(开播、剔除) 直播调度服务 鉴权,客户端是否有权限连接直播服务器 记录每台直播服务器的流状态 为播放端和推流端分配合适的直播服务器 控制所有直播任务的开始和结束 直播服务器总结 直播服务器集群有着非常丰富的流输入方式,然后将流转换成rtmp、hls、http-flv三种直播协议对外提供服务。通过直播服务器的控制台可查看每一台服务器的状态和流列表,也能进行简单的控制。 直播调度服务负责将每台独立的直播服务器联合成一个整体集群。 视频转码服务 视频转码服务器搭配视频转码调度服务器,可实现分布式集群部署。为了方便描述,下文中提到的直播服务集群皆包含视频转码服务器和视频转码调度服务器。 直播转码 直播转码包括为直播流修改分辨率、添加文字水印、添加图片水印三个功能。 之所以将转码和直播分开部署是因为,转码对CPU消耗非常大,直播服务器对带宽消耗非常大,所以需要采用不同规格的硬件来应对不同的需求场景,以免资源分配不科学造成浪费。 文件转码(加水印) HLS文件切割 点播服务 mp4、hls点播过程可通过进度条实现seek(快进、回退) 系统总控制台 展示所有服务器的任务状态,控制某台服务器停止服务 维护整个系统中所有服务器的上下线,以及服务发现功能 展示和控制(开始、停止等操作)所有在线直播流状态,每条流状态包括码率、分辨率、编码类型以及播放url等信息 展示和控制每条直播流是否需要转码,并且可为其制定转码后的流名、水印、分辨率 查看、添加和删除直播源,添加成功后直播服务器向直播源回源拉流 查看、添加和删除伪直播源(将视频文件推流到直播服务器) 可独立查看、添加和删除转码任务 点播文件控制,对被点播的文件进行增删改查操作 管理员登录鉴权 直播和点播的观看数量统计 系统流量、总负载情况 直播、点播和转码服务器配置下发功能 提供http api控制接口和查询接口,用来获取直播流url和对直播、转码任务控制