首页 > 其他分享 >如何基于surging架设流媒体视频推流(视频讲解)

如何基于surging架设流媒体视频推流(视频讲解)

时间:2024-05-15 13:08:09浏览次数:28  
标签:视频 流媒体 HTTP 协议 直播 surging RTMP 推流 rtmp

前言

 

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

大家也对直播平台了解不少,也参与使用,但是怎么样才能研发出视频直播平台呢?那么针对于这个问题就是我今天想给大家讲解的一些东西,首先要对直播协议有所了解,然后怎么样使用作者研发的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, 企业版不仅功能强大,支持流媒体服务等协议组件和中间件,并且还支持多语言定制化需求,完全可以满足各大公司的需要,如有意见,可以和作者联系。

标签:视频,流媒体,HTTP,协议,直播,surging,RTMP,推流,rtmp
From: https://www.cnblogs.com/fanliang11/p/18193631

相关文章

  • 国标GB28181协议EasyCVR视频汇聚平台获取设备录像仅展示部分片段的原因排查
    国标GB28181协议EasyCVR安防平台可以提供实时远程视频监控、视频录像、录像回放与存储、告警、语音对讲、云台控制、平台级联、磁盘阵列存储、视频集中存储、云存储等丰富的视频能力,平台支持7*24小时实时高清视频监控,能同时播放多路监控视频流,视频画面1、4、9、16个可选,支持自定义......
  • 实现抖音 “视频无限滑动“效果
    前言在家没事的时候刷抖音玩,抖音首页的视频怎么刷也刷不完,经常不知不觉的一刷就到半夜了......
  • 音视频里面的I帧、B帧和P帧
    在音视频编码中,I帧、B帧和P帧是用于表示和处理视频帧的三种基本类型。以下是它们的详细解释:I帧(I-frame):又称内部画面(intrapicture)或关键帧(keyframe)。I帧是一个全帧压缩的编码帧,它包含了一幅完整的图像数据。解码时,仅使用I帧的数据就可以重构完整的图像,无需参考其他帧。在M......
  • python将竖屏视频转为横屏
    python3.6版本代码:importsubprocessimportrefromthreadingimportThreaddefprint_ffmpeg_progress(process):"""从ffmpeg进程中读取并打印进度信息"""pattern=re.compile(r'frame=\s+(\d+)')#正则表达式,用于匹配帧数......
  • FFmpeg 命令:从入门到精通 | ffmpeg 命令图片和视频转换
    FFmpeg命令:从入门到精通|ffmpeg命令图片和视频转换截取一张图片转换视频为图片(每帧一张图)图片转换为视频从视频中生成GIF图片将GIF转化为视频FFmpeg命令:从入门到精通|ffmpeg命令图片和视频转换本节主要介绍了ffmpeg命令图片和视频转换的方法,并列举了一些例......
  • 十四五”智慧城市:视频大数据汇聚系统2.0建设方案与特点分析
    一、背景需求分析随着科技的不断发展,智慧城市的建设已经成为城市发展的重要方向。视频汇聚系统作为智慧城市建设的重要组成部分,已经得到了广泛的应用和推广。视频汇聚系统是智慧城市中非常重要的组成部分,它利用摄像头和传感器技术来收集城市中的实时视频和数据信息,为城市管理者和......
  • 危化工厂安全监管新篇章:智能化视频监控方案的探索与实践
    一、背景需求分析危化品因其特殊的物理和化学性质,一旦发生事故,往往会造成严重的人员伤亡和财产损失。传统的监管手段往往依赖于人工巡查和定期检测,然而这种方式不仅效率低下,而且难以全面覆盖和实时监控。因此,借助现代信息技术,特别是视频智能监控技术,构建一套高效、智能的危化工厂......
  • 基于高斯混合模型的视频背景提取和人员跟踪算法matlab仿真
    1.算法运行效果图预览    2.算法运行软件版本MATLAB2013B 3.算法理论概述      基于高斯混合模型(GaussianMixtureModel,GMM)的视频背景提取和人员跟踪算法是一种广泛应用的计算机视觉方法,主要用于分离视频序列中的静态背景和动态前景(比如人物运动)。 ......
  • 【视频】R语言逻辑回归(Logistic回归)模型分类预测病人冠心病风险|数据分享|附代码数据
    原文链接:http://tecdat.cn/?p=22410 最近我们被客户要求撰写关于逻辑回归的研究报告,包括一些图形和统计输出。本文介绍了逻辑回归并在R语言中用逻辑回归(Logistic回归)模型分类预测病人冠心病风险数据逻辑回归是机器学习借用的另一种统计分析方法。当我们的因变量是二分或二元时......
  • js 录制视频及拍照
    <style>span{cursor:pointer;}.playvideo{position:relative;height:500px;}video{width:800px;height:500px;border:1pxsolid#000;object-fit:fill;}canvas{......