前言

随着直播行业大火,各种直播类产品和产品层出不穷,能够满足各方人员的需求和互动,也使得斗鱼、虎牙、抖音都随着直播业的大火而欣欣向荣,

大家也对直播平台了解不少,也参与使用,但是怎么样才能研发出视频直播平台呢?那么针对于这个问题就是我今天想给大家讲解的一些东西,首先要对直播协议有所了解,然后怎么样使用作者研发的surging 去搭建直播平台,首先接下来,我就给大家简单介绍下常见的直播协议。

视频培训地址:https://pan.baidu.com/s/13iOJlRnpsknm7NG6booUUw

社区版本开源地址:https://github.com/fanliang11/surging

常见的直播协议

国内常见的直播协议有几个:RTMP、HLS、HTTP-FLV,下面我们来一一介绍。

RTMP,全称 Real Time Messaging Protocol,即实时消息传送协议。Adobe 公司为 Flash 播放器和服务器之间音视频数据传输开发的私有协议。工作在 TCP 之上的明文协议,默认使用端口 1935。协议中的基本数据单元成为消息(Message),传输的过程中消息会被拆分为更小的消息块(Chunk)单元。最后将分割后的消息块通过 TCP 协议传输,接收端再反解接收的消息块恢复成流媒体数据。

RTMP 主要有以下几个优点:RTMP 是专为流媒体开发的协议,对底层的优化比其它协议更加优秀,同时它 Adobe Flash 支持好,基本上所有的编码器(摄像头之类)都支持 RTMP 输出。现在 PC 市场巨大,PC 主要是 Windows,Windows 的浏览器基本上都支持 Flash。另外RTMP适合长时间播放,曾经有过测试,连续 10 天多连续播放没有出现问题。最后 RTMP 的延迟相对较低,一般延时在 1-3s 之间,一般的视频会议,互动式直播,完全是够用的。

当然 RTMP 并没有尽善尽美,它也有不足的地方。一方面是它是基于 TCP 传输,非公共端口,可能会被防火墙阻拦;另一方面,也是比较坑的一方面是 RTMP 为 Adobe 私有协议,很多设备无法播放,特别是在 iOS 端,需要使用第三方解码器才能播放。

FLV (Flash Video) 是 Adobe 公司推出的另一种视频格式,是一种在网络上传输的流媒体数据存储容器格式。其格式相对简单轻量,不需要很大的媒体头部信息。整个 FLV 由 The FLV Header, The FLV Body 以及其它 Tag 组成。因此加载速度极快。采用 FLV 格式封装的文件后缀为 .flv。

而我们所说的 HTTP-FLV 即将流媒体数据封装成 FLV 格式,然后通过 HTTP 协议传输给客户端。

HTTP-FLV 依靠 MIME 的特性,根据协议中的 Content-Type 来选择相应的程序去处理相应的内容,使得流媒体可以通过 HTTP 传输。相较于 RTMP 协议,HTTP-FLV 能够好的穿透防火墙,它是基于 HTTP/80 传输,有效避免被防火墙拦截。除此之外,它可以通过 HTTP 302 跳转灵活调度/负载均衡,支持使用 HTTPS 加密传输,也能够兼容支持 Android,iOS 的移动端。

说了这么多优点,也来顺便说下 HTTP-FLV 的缺点,由于它的传输特性,会让流媒体资源缓存在本地客户端,在保密性方面不够好。因为网络流量较大,它也不适合做拉流协议。

上述两个协议都是有Adobe公司推出的,而下面要讲的 HLS (HTTP Live Streaming) 则是苹果公司基于 HTTP 的流媒体传输协议。主要应用于 iOS 设备,包含(iPhone, iPad, iPod touch) 以及 Mac OSX 提供音视频直播服务和录制内容(点播)等服务。

相对于常见的流媒体协议,HLS 最大的不同在于它并不是一下请求完整的数据流。它会在服务器端将流媒体数据切割成连续的时长较短的 ts 小文件,并通过 M3U8 索引文件按序访问 ts 文件。客户端只要不停的按序播放从服务器获取到的文件,从而实现播放音视频。

流媒体协议 RTMP, HTTP-FLV, HLS 简单对比

协议 传输协议 格式 延时
rtmp Tcp flv 1-3秒
http-flv http flv 1-3秒
hls http m3u8 4-10秒

RTMP 协议为流媒体而设计,在推流中用的比较多,同时大多 CDN 厂商支持RTMP 协议。

HTTP-FLV 使用类似 RTMP流式的 HTTP 长连接,需由特定流媒体服务器分发的,兼顾两者的优点。以及可以复用现有 HTTP 分发资源的流式协议。它的实时性和 RTMP 相等,与 RTMP 相比又省去了部分协议交互时间,首屏时间更短,可拓展的功能也更多。

HLS 作为苹果提出的直播协议,在 iOS 端占据了不可撼动的地位,Android 端也同时提供相应的支持。

如何架构实现

rtmp 协议架构图

调度服务网关是针对于外网服务调用, , 提供基于rest 查询流对应的服务器地址。

直播终端通过调度服务网关获取的rtmp 服务地址,通过地址进行推流,rtmp服务获取到数据后,然后转推到其它的rtmp服务上,rtmp再把流推给订阅的客户端

http-flv 架构图

以上是通过rtmp 服务转推给http-flv 订阅的客户端

基于surging 微服务引擎如何实现

比如现在需要获取live1/livestream直播地址, 那么首先可以通过地址/locate 获取wanip外网地址, routepath 是rtmp服务的服务路由路径,key是直播需要传过去地址livestream,然后rtmp 端口定义为76,那么接下来获取的地址就是

http://192.168.249.103:76/live1/livestream

surging 需要引用liveStream 模块,这样就能支持直播协议rtmp,http-flv,hls(暂时还未实现),然后还需要通过配置surgingsetting, 配置如下:

  "LiveStream": {
"RtmpPort": 76, //rtmp 端口
"HttpFlvPort": 77, //HttpFlv 端口
"EnableLog": true, //是否启用log
"RouteTemplate": "live1", //直播服务路由规则名称,可以根据规则设置,比如集群节点2,可以设置live2, 集群节点3,可以设置live3
"ClusterNode": 2 //集群节点数里,会根据routetemplate 转推流
}

然后可以通过ffmpeg或者obs进行推流,以ffmpeg 工具为例,可以输入以下命令

ffmpeg -re -i 3.mp4 -c:v libx264 -preset veryfast -maxrate 3000k -bufsize 6000k -pix_fmt yuv420p -g 50 -c:a aac -b:a 160k -ar 44100 -ac 2 -f flv rtmp://127.0.0.1:76/live1/livestream2

客户端采用PotPlayer进行播放,比如可以添加地址rtmp://127.0.0.1:76/live1/livestream2 ,如果你部署了另外一台rtmp服务,设置的是65端口,那么可以添加rtmp://127.0.0.1:65/live1/livestream2进行播放

可以支持一台N个推流,N个订阅播放,如下图:

总结

surging 现在分为两个版本,一个是社区版本surging ,一个是企业版本microsurging/SurgingVista, 企业版不仅功能强大,支持流媒体服务等协议组件和中间件,并且还支持多语言定制化需求,完全可以满足各大公司的需要,如有意见,可以和作者联系。

如何基于surging架设流媒体视频推流(视频讲解)的更多相关文章

  1. iOS:基于RTMP的视频推流

    iOS基于RTMP的视频推流 一.基本介绍 iOS直播一出世,立马火热的不行,各种直播平台如雨后春笋,正因为如此,也同样带动了直播的技术快速发展,在IT界精通直播技术的猴子可是很值钱的.直播技术涉及的 ...

  2. 前端Web浏览器基于Flash如何实时播放监控视频画面(三)之使用ffmpeg‘推流’

    本片文章只是起到抛砖引玉的作用,能从头到尾走通就行,并不做深入研究.为了让文章通俗易懂,尽量使用白话描述. 0x001: 下载ffmpeg 开源免费的推流软件有很多,这里以 ffmpeg 为例.ffm ...

  3. 基于阿里云直播实现视频推流(ffmpeg)/拉流(Django2.0)以及在线视频直播播放(支持http/https)功能

    原文转载自「刘悦的技术博客」https://v3u.cn/a_id_146 由于5g网络的光速推广,视频业务又被推上了风口浪尖,在2019年初我们还在谈论照片,短视频等关键字,而进入2020年,我们津 ...

  4. iOS-- 快速集成iOS基于RTMP的视频推流

    效果图 iTools有点卡, 但是推到服务器倒是很快的. 推流 前言 这篇blog是iOS视频直播初窥:<喵播APP>的一个补充. 因为之前传到github上的项目中没有集成视频的推流.有 ...

  5. 快速集成iOS基于RTMP的视频推流

    前言 这篇blog是iOS视频直播初窥:<喵播APP>的一个补充. 因为之前传到github上的项目中没有集成视频的推流.有很多朋友简信和微博上问我推流这部分怎么实现的. 所以, 我重新集 ...

  6. 前端Web浏览器基于Flash如何实时播放监控视频画面(前言)之流程介绍

    [关键字:前端浏览器如何播放RTSP流画面.前端浏览器如何播放RTMP流画面] 本片文章只是起到抛砖引玉的作用,能从头到尾走通就行,并不做深入研究.为了让文章通俗易懂,尽量使用白话描述. 考虑到视频延 ...

  7. iOS - 直播流程,视频推流,视频拉流,简介,SMTP、RTMP、HLS、 PLPlayerKit

    收藏笔记 1 . 音视频处理的一般流程: 数据采集→数据编码→数据传输(流媒体服务器) →解码数据→播放显示1.数据采集:摄像机及拾音器收集视频及音频数据,此时得到的为原始数据涉及技术或协议:摄像机: ...

  8. 【转】直播流程,视频推流,视频拉流,简介,SMTP、RTMP、HLS、 PLPlayerKit

    原:https://www.cnblogs.com/baitongtong/p/11248966.html 1 .音视频处理的一般流程: 数据采集→数据编码→数据传输(流媒体服务器) →解码数据→播放 ...

  9. day122:MoFang:OSSRS流媒体直播服务器&基于APICloud的acLive直播推流模块实现RTMP直播推流

    目录 1.docker安装OSSRS流媒体直播服务器 2.基于APICloud的acLive直播推流模块实现RTMP直播推流 3.直播流管理 1.docker安装OSSRS流媒体直播服务器 1.OSS ...

  10. vlc源码分析(五) 流媒体的音视频同步

    vlc播放流媒体时实现音视频同步,简单来说就是发送方发送的RTP包带有时间戳,接收方根据此时间戳不断校正本地时钟,播放音视频时根据本地时钟进行同步播放.首先了解两个概念:stream clock和sy ...

随机推荐

  1. #cdq分治,树状数组#洛谷 5459 [BJOI2016]回转寿司

    题目 求 \[\sum_{i=1}^n\sum_{j=i}^{n}[L\leq \sum_{k=i}^j a_k\leq R] \] 分析(树状数组) 考虑前缀和,改为是否有两个数的差在\([L\si ...

  2. 30分钟成为Contributor|如何多方位参与OpenHarmony开源贡献?

    如何优雅地参与开源贡献,向顶级开源项目提交 PR(Pull Request).战"码"先锋直播间第八期围绕"OpenAtom OpenHarmony(以下简称" ...

  3. 华为会员开放服务(Membership Kit),助力移动应用快速建设会员生态

    会员开放服务(Membership Kit)是华为面向开发者提供的券码开放能力,开发者可以通过Membership Kit开展灵活多样的营销活动,助力开发者建设会员生态,实现用户运营与增量创收的目标. ...

  4. centos环境Jenkins配置war包Tomcat

    末尾有软件安装包,自行下载(centos环境) centos JDK Jenkins maven tomcat git myslq nginx 7.9 11.0.19 2.418 3.8.1 9.0. ...

  5. 行业软件开发商怎样来抢 BI 这块蛋糕?

    随着企业信息化建设的深入,很多机构的生产系统已建设完成,在保证生产的有序进行后,如何更有效地进行经营决策成了管理者面临的最大任务.商业智能(BI)就是在这种背景成为支撑企业经营分析的一大利器. 根据 ...

  6. gitlib配置

    第1步:下载Java并安装Java.一般来说下载jdk对应的版本就行. 第2步:配置Java环境变量,具体如下: 1. 新建:变量名:JAVA_HOME:变量值:C:\Program Files\Ja ...

  7. mybatis generator生成mapper接口后的代理类,很方便使用。

    1.spring 配置: <bean id="superMapperProxy" class="com.qws.v1.daoImpl.MapperProxy&quo ...

  8. 有意思的JavaScript代码写法【持续更新,欢迎留言分享有趣代码】

    filter过滤假值 [1,2,null].fiter(Boolean) 2.Object.is 健壮的相等判断 Object.is(NaN,NaN) Object.is(+0,-0) Object. ...

  9. Oracle邮件发送(内容中带有收件人独有信息)

    Oracle邮件发送(内容中带有收件人独有信息) Oracle邮件发送(内容中带有收件人独有信息) Oracle发送邮件最简单的应该就是用smtp,具体使用和参数讲解我这儿没有 简单来说,发送邮件的思 ...

  10. 力扣485(java)-最大连续数1的个数(简单)

    题目: 给定一个二进制数组, 计算其中最大连续 1 的个数. 示例: 输入:[1,1,0,1,1,1]输出:3解释:开头的两位和最后的三位都是连续 1 ,所以最大连续 1 的个数是 3. 提示: 输入 ...