您现在的位置: 首页 > 网站导航收录 > 百科知识百科知识
(流媒体地址)-流媒体服务器架构与应用分析
内容,流媒体,框架(流媒体地址)-流媒体服务器架构与应用分析
发布时间:2016-12-08加入收藏来源:互联网点击:
流媒体地址(流媒体服务器架构与应用分析)
1.应用场景
目前在流媒体领域,有很多应用场景。由于网络服务升级,越来越多的行业开始使用音视频互动作为最快速的通信工具。我相信在5G正真普及时,会有更多的传统行业会借助流媒体,能够实现快速升级,提高生产效率。目前视频互动,远程教育和医疗,直播带货等等,这些行业,都使用流媒体技术,带来了产业腾飞。
直播主要功能
主要功能如下,这些功能中,处了直播,录播等,还有些其它技术,包括聊天通信,刷礼物,直播列表,房间,系统设置等。这些技术里,有些是需要后台支撑,有些是要前端展现,如果想要成为一个CTO或系统架构师,这些都是必备的技能。
直播平台系统架构图
下面这张图就是一个直播平台系统架构图,这张架构图,包括了非常多的技术。其中包括,前端音视频推流,Nginx负载均衡,反向代理,应用网关集群,服务注册中心集群,业务服务集群,存储服务,区域部署,redis集群,直播集群,中间件等。其中画红色框框部分,就是流媒体需要的技术,这里面也有很多学问,也是需要重点关注。比如推流到分布式流媒体服务器,如果边缘服务器部署到不同城市,那处在不同城市的观众,根据边缘计算,会使用相应的服务器。作为主播端,如果推送到不同的边缘服务器,首先要回源,回源(不一定是必须,需要根据调度策略计算,比如热门视频需要回源,一些冷门视频就不回源)后,在传输到不同的边缘服务器,这样转发给不同的地方观众去拉取。
注意:专业的CDN,一般都是有专线。集群一般都是在内网搭建,分布式一般是指外网部署。
如果把架构分层,那可以分为访问层,数据接入层,接口层,业务服务层。其中访问层包括PC客户端,H5、微信接入。访问层接通WEB和APP。数据接入层主要是Nginx做负载均衡,API网关,提供各类服务,包括日志管理,权限控制,监控管理,流量监控,路由服务,支付服务等。接口层包括第三方API及接口服务和后台管理,比如推流服务,拉流服务,CDN服务,还有一些用户后台,用户管理等。推流服务主要功能,比如视频直播、录播,录屏,边缘加速,数据分发,互动。后台服务包括直播管理,录播管理,转码管理,支付管理,订单管理,流量管理,内存监控,短信和邮件管理,会员管理等。业务服务层主要就是各类需求相关的服务,如用户服务,讲师服务,直播服务等,一些账号,收费,讲师等相关业务需求。最后就是穿梭各层的公共组件,如支付组件,登陆注册,短信组件等。整体来说这些东西很复杂,但是要想成为CTO,技术的广度和深度都是必不可少。希望这2张图,能够成为你我共同的发展“蓝图”。
注意:一些鉴权,防盗链机制,都是一些token机制,都是可以借鉴阿里云做法。
直播框架简化版
直播框架简化后如下,推流端主要包括音视频采集,音视频处理,音视频编码,音视频推流。拉流端主要包括音视频解码,音视频同步,音视频播放。音视频采集在不同平台都有不同方案。然后送入音视频处理,音频如混音,降噪等,视频如水印,美颜等,这些都很重要,如果音频不消除噪声,主播不美颜,用户体验会很差。音视频编码,指定编码为不同格式,然后封装,推流到流媒体服务器。在拉流端,主要就是解封装,音视频解码,音视频同步,音视频播放。其中音视频解码,同步,播放,在不同平台都有不同的方案。
直播流程和技术栈
在采集和推流端,一般常用框架有FFmpeg框架,X264框架,open264框架,fdk-aac框架,librtmp框架,OpenGL框架,OpenCV框架。FFmpeg框架一般可以用提供的接口做解封装、编解码、推流,使用这种方法,需要注意的是buffer比较难控制。X264框架一般用于做视频编码,属于更加偏向底层。openh264框架也是用于做视频编码,效率更高。fdk-aac框架一般用于做音频编码,也是更偏向底层了。librtmp框架用于做音视频推流,也是更偏向底层。OpenGL框架一般用于视频渲染和视频处理,如滤镜处理,效果也是非常好,是常用的方案之一。OpenCV框架一般用于做视频处理,也可以用于解码等操作,OpenCV也调用了FFmpeg的某些功能,也是常用方案之一。
在流媒体服务器,一般流媒体服务器有数据分发、实时转码、截屏、录制视频等。数据分发就包括了一些CDN。截屏可以应用于封面。录制视频一般用于审核视频或回放使用。常用服务器有nginx+rtmp_module、SRS(这个也是常用方案之一,使用协程框架,效率很高),Red5(这个是java版本)。
在播放端,一般有拉取视频,解码,渲染,聊天互动功能。常用框架有FFmpeg框架,ijkPlayer框架,OpenGL框架,SDL框架。FFmpeg框架可直接用于解码。ijkPlayer是哔哩哔哩一整套基于FFplay开源二次封装框架。OpenGL框架(win和android端都有)一般用于视频处理和渲染。SDL框架(大都用于win端)一般用于渲染。
ijkplayer :基于FFmpeg的开源Android/iOS视频播放器。
有以下优点:
API易于集成。
编译配置可裁剪,方便控制安装包大小。
支持硬件加速解码,更加省电。
简单易用,指定拉流URL,自动解码播放。
缺点:
不能满足一些播放器,定制化需求。
延时高。
所以根据优点和确定选择合适的方案。
压测工具
SRS自带工具:st-load
流媒体服务器简介
SRS :一款国人开发的优秀开源流媒体服务器系统。
BMS :也是一款流媒体服务器系统,但不开源,是SRS的商业版,比SRS功能更多。
nginx :免费开源web服务器,也常用来配置流媒体服务器。集成Rtmp_module即可。
Red5:是java写的一款稳定的开源的rtmp服务器。
CDN
CDN的全称是Content Delivery Network,即内容分发网络。CDN是构建在现有网络基础之上的智能虚拟网络,依靠部署在各地的边缘服务器,通过中心平台的负载均衡、内容分发、调度等功能模块,使用户就近获取所需内容,降低网络拥塞,提高用户访问响应速度和命中率。CDN的关键技术主要有内容存储和分发技术。
CDN网络中包含的功能实体包括内容缓存设备、内容交换机、内容路由器、CDN内容管理系统等组成。 内容缓存为CDN网络节点,位于用户接入点,是面向最终用户的内容提供设备,可缓存静态Web内容和流媒体内容,实现内容的边缘传播和存储,以便用户的就近访问。
内容交换机处于用户接入集中点,可以均衡单点多个内容缓存设备的负载,并对内容进行缓存负载平衡及访问控制。
内容路由器负责将用户的请求调度到适当的设备上。内容路由通常通过负载均衡系统来实现,动态均衡各个内容缓存站点的载荷分配,为用户的请求选择最佳的访问站点,同时提高网站的可用性。内容路由器可根据多种因素制定路由,包括站点与用户的临近度、内容的可用性、网络负载、设备状况等。负载均衡系统是整个CDN的核心。负载均衡的准确性和效率直接决定了整个CDN的效率和性能。内容管理系统负责整个CDN的管理,是可选部件,作用是进行内容管理,如内容的注入和发布、内容的分发、内容的审核、内容的服务等。
下一篇:返回列表
相关链接 |
||
网友回复(共有 0 条回复) |