背景

当存在一个推流客户端正在向rtmp://xxx.com/live/yyy推流时,又有另外一个推流客户端同时对这个地址进行推流,会发生什么呢?

查阅了 Adobe RTMP Spec 发现规范本身并未说明和定义这个场景下RTMP服务器应该怎么处理。

最近在实际工作中遇到部分客户对推流地址资源管理不恰当而导致重复推流报错的问题,且在查问题的过程中发现各个CDN厂商对“抢流”的处理各不相同,查阅相关文档说明发现资料甚少,故专门对它们的抢流行为做如下分析。

步骤

  1. 打开Wireshark捕获网卡,过滤规则:tcp && tcp.port == 1935 (之所以不直接写rtmpt是因为还想观察传输层的行为)
  2. 获取对应厂商的推拉流URL,假设推流地址是:rtmp://xxx.com/live/yyy
  3. 使用ffmpeg推送一个本地电影文件:ffmpeg -re -i Movie-1.flv -vcodec h264 -f flv "rtmp://xxx.com/live/yyy"
  4. 使用另一个ffmpeg推送另一个本地电影文件到同个URL:ffmpeg -re -i Movie-2.flv -vcodec h264 -f flv "rtmp://xxx.com/live/yyy"
  5. 使用ffplay播放拉流地址内容
  6. 观察现象并分析Wireshark抓包结果

厂商

数据

注:下列结果仅代表发表本文的时候的各CDN厂家行为,随着厂商对服务器的更新迭代,可能会有所改变。

厂商 现象 结论 官方文档说明 与文档描述一致
网宿 二次推流报错,ffplay拉流播放的是Movie-1内容 抓包分析发现第二次推流的RTMP连接能握手成功,但是publish()请求发出之后服务器应答onStatus('NetStream.Publish.BadName')(见参考文档) 直播推流与拉流
阿里云 二次推流报错,ffplay拉流播放的是Movie-1内容 抓包分析发现第二次推流的RTMP连接能握手成功,但是推流几秒之后CDN服务器会发来TCP RST包强制断开RTMP的TCP连接 未找到
腾讯云 二次推流成功,ffplay拉流播放的是Movie-1内容
关闭第一个推流的程序,播放内容变成Movie-2的内容
官方文档表明会拒绝第二个推流请求,但是实际实验下来竟然是可以重复推且不报错,不知道腾讯云这么实现有没有其他用意 推流失败问题排查
七牛云 二次推流报错,ffplay拉流播放的是Movie-1内容 RTMP能握手成功,但是推流几秒之后服务器会发来TCP RST包强制断开RTMP的TCP连接
与官方文档中提到的后者挤掉前者的说法不一致
推流不成功的原因和解决方法
金山云 二次推流报错,ffplay拉流播放的是Movie-1内容 抓包分析发现第二次推流的RTMP连接能握手成功,但是publish()请求发出之后服务器应答onStatus('NetStream.Publish.AlreadyExistStreamName')(见参考文档) 推拉流接入

结论

总的来说,按当前实验结果来看,在这种细枝末节的功能点上,金山云的文档说明最清晰最规范,点个赞!

网宿的行为符合Flash AS3的定义,至少有据可依。

而腾讯云与七牛云的文档说明均存在错误的地方(至少本次实验中是这样的),尤其是腾讯云的现象让我很意外。

而阿里云竟然连这块的文档都没有。。(也许是我没搜到,若有的话望指正)

参考

Adobe ActionScript3.0 NetStatusEvent

[RTMP] 国内各大视频直播CDN厂商推流抢流行为分析的更多相关文章

  1. EasyDSS流媒体服务器软件(支持RTMP/HLS/HTTP-FLV/视频点播/视频直播)-正式环境安装部署攻略

    EasyDSS流媒体服务器软件,提供一站式的转码.点播.直播.时移回放服务,极大地简化了开发和集成的工作. 其中,点播功能主要包含:上传.转码.分发.直播功能,主要包含:直播.录像, 直播支持RTMP ...

  2. 阿里云李刚:下一代低延时的直播CDN

    在上周落幕帷幕的多媒体领域技术盛会——LiveVideoStackCon音视频技术大会上,阿里云的高级技术专家李刚进行了<下一代低延时的直播CDN>技术分享.主讲人李刚,多年关注在CDN这 ...

  3. 直播技术:从性能参数到业务大数据,浅谈直播CDN服务监控

    线上服务的有效监控和数据收集,一直是后端服务离不开的话题.直播作为一种经典的分布式系统,监控以及数据收集更是必不可少的工作.如何对海量的服务集群有效的监控和保活,又如何抓取集群中的碎片数据中来优化服务 ...

  4. EasyDSS高性能RTMP、HLS(m3u8)、HTTP-FLV、RTSP流媒体服务器功能简介---视频直播、直播鉴权(如何完美将EasyDSS过渡到新版)

    作为RTMP流媒体服务器,接受RTMP推流.进行实时的直播流分发是EasyDSS流媒体服务自身一大核心功能.写本篇博文的一个目的是向大家介绍EasyDSS新版的直播间.匿名直播.和虚拟直播的功能, 另 ...

  5. Android中直播视频技术探究之---视频直播服务端环境搭建(Nginx+RTMP)

    一.前言 前面介绍了Android中视频直播中的一个重要类ByteBuffer,不了解的同学可以 点击查看 到这里开始,我们开始动手开发了,因为我们后续肯定是需要直播视频功能,然后把视频推流到服务端, ...

  6. 利用Nginx搭建RTMP视频直播,点播服务器,ffmpeg推流,回看

        一.环境和工具 ubuntu 14.04 desktop 不用server的原因是一部分的演示用到了linux视频播放和直播软件,自己还要装桌面,麻烦. 不建议使用 最新的16TLS,我一开始 ...

  7. EasyDSS高性能RTMP、HLS(m3u8)、HTTP-FLV、RTSP流媒体服务器的视频直播录像、检索、回放方案

    需求背景: 近期遇到客户反馈对于直播摄像机录像功能是有一定的需求点的,其实EasyDarwin团队早就研发出对应功能,只是用户对于产品没有足够了解,因此本篇将对录像功能来做一次介绍. 首先,录像就是对 ...

  8. 使用ckplayer搭建rtmp视频直播应用

    视频直播才有的是RTMP协议进行视频实时流传输,在这里我们用到的软件都是 adobe 公司的一个是:Flash Media Server4 另一个是flash media live encoder 这 ...

  9. nginx RTMP FFmpeg 视频直播

    /**************************************************************************** * nginx RTMP FFmpeg 视频 ...

随机推荐

  1. CSS基础-背景

    CSS背景 background 纯色背景 {background-colcor:gray; padding:20px} 为元素设置背景色,并设置了内边距,使得元素中的文本向外少有延伸. 用rgba设 ...

  2. 2020/12月最新WinSpy/WinSpy++下载exe

    >>>下载地址 https://wws.lanzous.com/iFUsVj931xa 密码:5hp7 解压密码:yunmuq 夹带私货:在这里希望大家分享文件别再用百度云了,不用百 ...

  3. Layui事件监听(表单和数据表格)

    一.表单的事件监听 先介绍一下几个属性的用法 1.lay-filter 事件过滤器 相当于选择器,layui的专属选择器 2.lay-verify 验证属性 属性值可以是 :required必填项, ...

  4. uni-app中使用sass

    uni-app在创建时,工程目录下会有个uni.scss文件,我们可以直接在里面定制化scss变量. 全局scss中的坑: 1.如果要引用全局外部scss文件,可以考虑在uni.scss这个系统全局s ...

  5. .Net Core 学习之旅知乎版

    @[yuyue](.Net Core 学习之旅-.netCore Developer RoadMap) # .Net Core 学习之旅 随着.NET5.O 的正式推出,微软的VS大一统目的逐步成型, ...

  6. css 01-CSS属性:字体属性和文本属性

    01-CSS属性:字体属性和文本属性 #本文重要内容 CSS的单位 字体属性 文本属性 定位属性:position.float.overflow等 #CSS的单位 html中的单位只有一种,那就是像素 ...

  7. Web服务器-并发服务器-单进程单线程非堵塞方式(3.4.3)

    @ 目录 1.分析 2.代码 关于作者 1.分析 当socket去监听的时候,是堵塞的状态 通过tcp_sever_socket.setblocking(False)去设置不堵塞 当socket发现没 ...

  8. 被 Pandas read_csv 坑了

    被 Pandas read_csv 坑了 -- 不怕前路坎坷,只怕从一开始就走错了方向 Pandas 是python的一个数据分析包,纳入了大量库和一些标准的数据模型,提供了高效地操作大型数据集所需的 ...

  9. RocketMQ(七):高性能探秘之MappedFile

    RocketMQ作为消息中间件,经常会被用来和其他消息中间件做比较,比对rabbitmq, kafka... 但个人觉得它一直对标的,都是kafka.因为它们面对的场景往往都是超高并发,超高性能要求的 ...

  10. 【剑指offer】04 重建二叉树

    题目地址:重建二叉树 题目描述                                    输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树.假设输入的前序遍历和中序遍历的结果中都不 ...