什么是流媒体服务?
流媒体是指采用流式传输的方式传播多媒体文件。比如现在常见的直播应用抖音、快手以及视频网站,它们的背后都是流媒体服务支撑着。
和播放硬盘上的视频文件不同,流媒体在播放前不会下载整个文件,只是将当前数据发送给客户端。流媒体数据流随时传送随时播放,只是在开始时有些延迟,至于如何减少延迟,我在接下来的文章中会继续分析。
为什么需要流媒体服务?
边下边播
在2000年左右的时候,看电影一般还得下载到本地硬盘,很少有能直接在线用网页播放的,而现在直播应用大放异彩,这里面不仅仅有web服务的进步,还有流媒体服务发展的功劳。
减轻设备端的压力
想一下,那些主播用手机做直播的时候,虽然有很多人同时观看,但是他的手机并不卡,这是什么原因呢?
因为观众并不是直接通过网络观看主播的直播,而是通过了流媒体服务。流媒体服务在主播和观众之间搭建了一条高速公路。
后期处理
比如对视频做分析(包括美颜、AI人脸识别等)、存储、事件等。
所以流媒体服务不仅仅是实时直播,它还是各种后期应用的前提条件,掌握好流媒体开发,更能升职加薪。
常见的开源流媒体服务
市面上常见的比较稳定的开源流媒体服务主要有下面几种
- nginx-rtmp-module 基于nginx,配置简单,功能也比较简单,主要应用于提供hls在线播放,很多盗版视频网站都是基于这个方案
- srs 功能强大,支持http接口和回调,我司项目第一版便是基于此
- zlmediakit 功能强大,同样支持http接口和回调和srs不相上下
- m7s 新兴的流媒体服务功能强大,支持http接口,暂时不支持http回调,但是特别方便二次开发,我司项目第二版便基于m7s
为什么选择m7s
虽然srs和zlmediakit 都提供了http回调接口,但是它们都是采用的C/C++ 方案,不方便二次开发,基于回调能够实现的功能又达不到我们的需求。
m7s采用golang开发,虽然没有提供http回调接口,但是作者一开始就才用了插件的设计,方便用户进行二次开发。另外m7s对外暴露了核心数据结构,可以很方便的获取内部数据,便于业务处理。
这里是m7s官网插件的截图,下一篇,我将分析m7s的内部设计。
另外欢迎大家加入m7s微信群,共同探讨进步