当前位置 博文首页 > eguid:【从零开始搭建直播平台】-序章(从flash时代的rtmp到过
在2020年12月flash正式落幕之后,流媒体领域是否有新的技术替代?有没有较为成熟的整体方案?市面上的直播/流媒体平台都在使用哪些方案?有没有通用又简单快速的搭建方案?不同的方案在行业内部也是争论不休,最终,这是个百花齐放的时代,让我们来一起探讨这些前沿问题。
本篇文章不仅可作为想要进入流媒体行业的“萌新”入门,也可为资深流媒体开发者提供技术参考和商业技术选型。
目前来讲还没有任何一个通用成熟的技术方案能够替代flash时代的rtmp。
虽然目前主流的ws-flv和http-flv方案确实可以勉强胜任。但是这个方案有致命缺点,不支持最新的hevc(h265),更别提以后的vvc(h266),因此flv方案目前来讲没有未来,但是可以作为首选过渡方案,主要原因是它简单,且与原来的flash那套rtmp方案完全兼容。
2020年以来很多大厂(阿里,鹅厂,度娘等大厂)已经开始逐步实践基于webrtc搭建自研私有流媒体体系。但是webrtc方案除非有很大改进,不然现在光是只支持google自己的avx编码基本上就劝退99%的厂商了。这种方案与原有流媒体方案完全无法兼容,现有流媒体想要兼容webrtc都需要额外增加转码成本,将h264/h265转码为avx编码。
补充:
有很多人想知道WebAssembly在流媒体有没有什么应用场景?
博主的回答是:不多,有一丁点。
由于的WebAssembly 不支持****tcp/udp网络通信(这个是WebAssembly技术的最大局限,如果后面能开放网络通信,那将会大放光彩,甚至颠覆现有网页格局),所以只能用在视频解码,音视频编辑,游戏开发之类的高强度计算类型下,然后还需要借助webgl或webgpu来渲染,目前对于流媒体领域来说没太大用,对于网页视频编辑可能用处较大,它没有解决流媒体领域根本痛点:网络传输。
WebAssembly技术可以参见博主另一篇文章关于此类技术的介绍和ffmpeg视频编辑领域的应用:一篇文章全面了解WebAssembly
提示:本专栏可作为个人开发者和中小公司搭建直播平台的技术方案参考,专栏所实现代码功能可自由修改分发,无版权风险。
现在webrtc基本就是三个方案:mesh(p2p),sfu(服务端合流),mcu(分发,这个是符合直播流媒体方案,服务器只做转发)。
开发成本高
开发成本上webrtc需要开发客户端和前端播放器渲染,而flv/hls基本上都有现成的成熟方案可用,只需要很短时间就可以让直播平台快速成型。
服务器成本高
不仅包含开发成本也有服务器成本
大家知道webrtc(avx/g711)和主流rtmp/flv方案的编码不兼容(h264/aac),如果要兼容后者,就要在服务端进行转码。
不通用(没有成熟方案)
现有使用webrtc的厂商基本都是建立私有协议(可以参考阿里淘宝等电商直播)。
我们这次选择使用最简单成本最低的flv方案来快速搭建直播平台。
流媒体服务
流媒体服务可以使用nginx-flv、srs或zlmediakit等流媒体服务。
这几个流媒体服务博主会在后续的文章种详细实战搭建这三个流媒体服务。
推流端
推流可以使用obs,也可以使用ffmpeg或者自己开发的javacv推流器。
再初期,我们会通过obs或者ffmpeg作为推流工具,后面我们会通过javafx和javacv实现自己的推流客户端。
javacv技术可以参考博主系列专栏:
javacv教程文档汇总篇
弹幕和礼物这类非流媒体功能,看后续专栏反馈,如果需要可能会增加这部分方案介绍和实现。
到这里为止,对于刚入门的“萌新”而言,本文涉及的概念较多,建议多读几遍,关键字解释网上都有,多搜多看。如还有问题,可以多多在评论区“评论”。
对于行业内资深开发者,欢迎一起参与交流讨论,如有问题,请多多批评指正。
持续更新中,未完待续…
cs