怎么创建直播平台
现在直播应用非常火爆,它以生动直观的方式向用户传达最真实的现场信息,受到广大用户的普遍欢迎。小编作为一名技术人员,经常开发各种直播平台,(娱乐直播、游戏直播、教育直播、财经直播等)下面我把自己积累的一些经验分享给大家,希望和大家一起交流学习,共同进步。
第一步,移动端视音频采集
首先,对于手机端的视音频采集编码技术,我们有过类似的经验。考虑到手机的处理能力,我们的技术路线是利用手机自身核心处理器的视频编码能力来完成。在Android端调用Mediacodec开发接口来实现,iOS端调用苹果提供的Core Video框架来实现,编码格式上我们采用H.264视频编码和AAC音频编码,通过硬件编码方式极大地降低了移动终端的CPU负荷与功耗,。在协议的选择上,我们采用当前主流的RTMP协议由客户端向服务器端推送数据。RTMP是Adobe公司制定的一款流传输一些,结构比较简单,自己研究就能搞定,而且这款协议在行业内应用非常广泛,便于不同产品的集成。
第二步,内容的发布和转码
前端设备将直播的视音频内容采集处理后,首先推送给平台的源站服务器,我们将源服务器部署在了北京本地的运营商骨干节点机房(近距离便于维护)。源服务器采用多机集群热备份机制,防止一台源站服务器宕机后影响整个平台的稳定运行。
源站服务器连接有专业的磁盘阵列存储设备,当源站服务器接收到数据后,首先复制N份转发给下面的N个二级CDN节点,同时复制一份给转码服务器。转码服务器将接收到的每一个流进行实时的转码,主要是将高清码流转换一份标清码流给小屏移动终端,移动终端接收标清小码流不仅符合自身的小屏分辨率需要,同时可以降低对移动端的解码能力要求,还能有效节省带宽成本。
第三步,流媒体发布
流媒体发布这个环节对于整个平台来说也是至关重要,因为最终面向终端用户提供服务的是分布在全网的流媒体服务器,流媒体服务器的稳定性以及性能优劣决定着终端用户的体验效果和平台的运营成本。根据之前做IPTV的经验,我们在这个项目中选择的技术路线还是自行开发,当然还是基于之前做IPTV流媒体服务器的基础来做,核心技术点又有如下的改进:
- 流媒体服务器还是采用C语言实现,保障运行效率最高;
- 将之前的多进程模型改成异步IO模型,提高服务器的并发处理性能;
- 在协议层上增加对RTMP、HLS协议的支持;
4.引入hadoop这一分布式架构,便于大规模分布式部署、调度和容错;
通过这些改进,流媒体服务器的整体性能又会有一个质的飞跃。
第四步,CDN内容分发
这方面是我的业务特长所在,与我之前做IPTV平台的技术路线相同,主要是对流媒体数据在全网范围内的多个节点之间进行快速的分发,从而提高终端用户的体验效果。
在协议的选择上,我们根据直播和点播应用的特点,支持RTMP协议、HTTP协议、UDP协议这三个类型。
节点服务器的建设方面,我们根据国内互联网的整体布局,采用中心节点->各省级节点->地市级节点 三级架构模式,把主要的用户流量首先引导到第三级节点,然后是第二级节点,之所以这样设计,主要因为越到中小城市,带宽价格越低,这样可以极大地节省后期的运营成本。
第五步,终端播放器开发
在终端的解码回放部分,我们考虑自行开发PC、Android和iOS三个终端的播放器,由于三种终端采用不同的操作系统平台,因此我们成立了三个开发小组来分别完成,下面讲一下技术路线:
PC端:
采用行业内主流的技术路线,基于Adobe的Flash Player做应用层开发,这也是当前最成熟时的技术路线。为了缩短开发周期,我们基于Adobe的OSMF播放器框架来做,开发周期控制在2个月以内比较可行。
Android端:
Android端的播放器开发我们首先考虑到的是终端的解码性能,因为解码框架有多个可选,比如FFMPEG、VLC、MediaPlayer API、Exoplayer等,从我们自身的熟悉程度和项目的可控性上考虑,最终决定采用google的Exoplayer做二次开发,开发周期可以控制在2个月以内。
iOS端:
iOS端的播放器也是基于同样的考虑,我们选择了苹果提供的VideoToolbox开发接口,通过它可以直接调用苹果处理器自带的硬件解码功能,这样可以大大降低设备的功耗,延长电池的续航时间。
以上就是小编怎么创建播平台的一段经历和收获的一点点经验,记录下来既是对自己的总结,同时也想与各位创业者和同行一起分享,希望对大家有所帮助。如果您有不同的见解,欢迎咨询交流!
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
Android热更新插件JRebel For Android的安装,破解,使用
它是一个AndroidStudio的插件,安装后我们会在原本运行程序的工具栏中出现三个新的图标。 全部图标.png 后面我们就可以使用它来运行我们的程序,它可以帮助我们节约程序的运行时间,让我们不用再苦苦等待。 为什么我们要使用它 节约时间 节省时间,据我统计,我的一个小项目,如果使用正常的Run App,第一次运行App的速度是37秒,改变xml文件后再次运行(并未结束程序)的速度是21秒。 而当我使用JRebel运行同样的项目,第一次运行App的速度是26秒,同样修改xml运行程序,只需要短短的5秒。 结论是JRebel 确实能给我们节省不少时间 直接在当前页面上修改,不再重新运行程序 假如项目有两个页面,页面A和页面B。我们的第一启动项是页面A,不过页面A有按钮,点击可以跳到页面B。 但是当我们运行程序后,发现页面B的UI有偏差,要进行修改,那么假如我们是使用原本的方式运行项目,就得重新运行程序,重新进入页面A点击按钮后才能进入页面B查看效果,如下。 未使用.gif 而如果我们使用Jrebel,在点击Apply Change后,项目不会重新启动,而是直接在页面B上呈现我们修改后的...
- 下一篇
Gradle 使用技巧 - 配置签名
使用场景 我们在使用百度地图和微信相关的API的时候,是需要我们填入相关的的app签名进行校验后才能进行操作,而默认我们在调试模式下使用的是AS为我们提供的android.keystore,所幸,Gradle为我们提供了相关的方法,我们可以为debug和release指定密钥文件和前面。我们需要先在app.gradle的android节点做做相关的配置。 配置签名信息 signingConfigs { debug { try { storeFile file("../签名文件.jks") storePassword "密码" keyAlias "别名" keyPassword "密码" v1SigningEnabled true v2SigningEnabled false } catch (ex) { ex.printStackTrace() throw new InvalidUserDataException("秘钥用户名或密码错误${ex.getMessage()}") } } release { try { storeFile file("../签名文件.jks") store...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- SpringBoot2整合MyBatis,连接MySql数据库做增删改查操作
- Jdk安装(Linux,MacOS,Windows),包含三大操作系统的最全安装
- MySQL8.0.19开启GTID主从同步CentOS8
- SpringBoot2更换Tomcat为Jetty,小型站点的福音
- CentOS7编译安装Cmake3.16.3,解决mysql等软件编译问题
- SpringBoot2初体验,简单认识spring boot2并且搭建基础工程
- Docker使用Oracle官方镜像安装(12C,18C,19C)
- Hadoop3单机部署,实现最简伪集群
- Windows10,CentOS7,CentOS8安装Nodejs环境
- Docker安装Oracle12C,快速搭建Oracle学习环境