CRtmpServer转推流到Nginx Rtmp及SRS(SimpleRtmpServer)的经历

2024-09-09 03:58

本文主要是介绍CRtmpServer转推流到Nginx Rtmp及SRS(SimpleRtmpServer)的经历,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

转自:http://blog.csdn.net/fengyily/article/details/42557841


本人一直用的是CRtmpServer服务,在CRtmpServer服务中根据自已的想法也加入了许多功能,如通过http接口来加载配置等,苦于不支持HLS,自已添加ts分片水平又有限,思来想去决定借助SimpleRtmpServer的HLS功能。说干就干,马上查找相关资源,下载、解压一一蹴而就,SRS顺利搭好,比想像中的要简单很多。

SRS服务搭建好后,直推测试成功,在配置CRtmpServer转推流时,SRS的流播放不出,查看日志发现报了个tcUrl不能为空的异常,于是想到应该是CRtmpServer在转推时没有传入tcurl的参数,查看CRtmpServer的源代码,定位到转推的位置,跟综下来确认tcUrl为空,了解了tcUrl的格式,与targetUri是一致,于是将targetUri的值赋给tcUrl,测试顺利通过,就是这么简单,但是,经过一段时间跑下来发现SRS好像不太稳定,也许是对它不太了解。也许看到大家都在用Nginx的HLS,于是又有了将SRS换成Nginx的想法。

在搭建Nginx Rtmp服务时参考的是前辈留下的nginx搭建支持http和rtmp协议的流媒体服务器之一、二、三,由于是第一次在Nginx中添加nginx-rtmp-module模块,感觉和SRS的相比相对烦锁,很多的依赖包要么对版本依赖性较大,要么干脆链接打不开。总的来说整个流程下来搭建还算顺利。

Nginx的配置之前一直用的是它的反向代理及前端Cache,配置起来也得心应手,很快便可以独立使用了,但我搭建Nginx的目的是想用来做RTMP的边缘,提供RTMP以及HLS的播放。在测试时,同样也遇到了CRtmpServer转推至Nginx时不成功,在Nginx 日志中也没发现什么异常,与直接推送相比,发现PUSH的连接,成功然后马上又被断开,经过反复的比较,直推是连接成功后便有创建流、发布流的日志,如下:

2015/01/09 17:13:12 [info] 6587#0: *8 client connected '10.22.22.245'
2015/01/09 17:13:12 [info] 6587#0: *8 createStream, client: 10.22.22.245, server: 0.0.0.0:1936
2015/01/09 17:13:12 [info] 6587#0: *8 publish: name='snh48_live_640_360' args='' type=live silent=0, client: 10.22.22.245, server: 0.0.0.0:1936

转推的日志中并没有createStream与publish的相关日志,便怀疑会不会是CRtmpServer本身的问题呢?为了验证,马上又开启了CRtmpServer进行本地的调试,发现多了一条错误日志,内容为:

basertmpprotocol.cpp:799:BaseRTMPProtocol::ProcessBytes:Unable to send rtmp message to application。

也是就是这玩意在做怪,迅速找到这片代码:

[cpp]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. if (!_pProtocolHandler->InboundMessageAvailable(this, header, channel.inputData)) {  
  2.     FATAL("Unable to send rtmp message to application");  
  3.     return false;  
  4. }  

分析后,估计是CRtmpServer对Nginx返回的消息不被支持,但也不想再去看Nginx的框架,于是想法大胆的直接将return false注释掉跑跑看。

[cpp]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. if (!_pProtocolHandler->InboundMessageAvailable(this, header, channel.inputData)) {  
  2.     FATAL("Unable to send rtmp message to application");  
  3.     //return false;  
  4. }  
再次调试,果然灵光。又测试了转推其它类型流媒体服务,我又笑了。。。

这篇关于CRtmpServer转推流到Nginx Rtmp及SRS(SimpleRtmpServer)的经历的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1150096

相关文章

Nginx分布式部署流程分析

《Nginx分布式部署流程分析》文章介绍Nginx在分布式部署中的反向代理和负载均衡作用,用于分发请求、减轻服务器压力及解决session共享问题,涵盖配置方法、策略及Java项目应用,并提及分布式事... 目录分布式部署NginxJava中的代理代理分为正向代理和反向代理正向代理反向代理Nginx应用场景

Nginx搭建前端本地预览环境的完整步骤教学

《Nginx搭建前端本地预览环境的完整步骤教学》这篇文章主要为大家详细介绍了Nginx搭建前端本地预览环境的完整步骤教学,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录项目目录结构核心配置文件:nginx.conf脚本化操作:nginx.shnpm 脚本集成总结:对前端的意义很多

Nginx实现端口映射的示例代码

《Nginx实现端口映射的示例代码》本文主要介绍了Nginx实现端口映射的示例代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧... 目录1. 找到nginx的部署路径2. 备份原来的配置文件3. 编辑nginx.conf文件4. 在

Nginx屏蔽服务器名称与版本信息方式(源码级修改)

《Nginx屏蔽服务器名称与版本信息方式(源码级修改)》本文详解如何通过源码修改Nginx1.25.4,移除Server响应头中的服务类型和版本信息,以增强安全性,需重新配置、编译、安装,升级时需重复... 目录一、背景与目的二、适用版本三、操作步骤修改源码文件四、后续操作提示五、注意事项六、总结一、背景与

Nginx部署HTTP/3的实现步骤

《Nginx部署HTTP/3的实现步骤》本文介绍了在Nginx中部署HTTP/3的详细步骤,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学... 目录前提条件第一步:安装必要的依赖库第二步:获取并构建 BoringSSL第三步:获取 Nginx

Web服务器-Nginx-高并发问题

《Web服务器-Nginx-高并发问题》Nginx通过事件驱动、I/O多路复用和异步非阻塞技术高效处理高并发,结合动静分离和限流策略,提升性能与稳定性... 目录前言一、架构1. 原生多进程架构2. 事件驱动模型3. IO多路复用4. 异步非阻塞 I/O5. Nginx高并发配置实战二、动静分离1. 职责2

Nginx中配置使用非默认80端口进行服务的完整指南

《Nginx中配置使用非默认80端口进行服务的完整指南》在实际生产环境中,我们经常需要将Nginx配置在其他端口上运行,本文将详细介绍如何在Nginx中配置使用非默认端口进行服务,希望对大家有所帮助... 目录一、为什么需要使用非默认端口二、配置Nginx使用非默认端口的基本方法2.1 修改listen指令

解决Nginx启动报错Job for nginx.service failed because the control process exited with error code问题

《解决Nginx启动报错Jobfornginx.servicefailedbecausethecontrolprocessexitedwitherrorcode问题》Nginx启... 目录一、报错如下二、解决原因三、解决方式总结一、报错如下Job for nginx.service failed bec

Nginx添加内置模块过程

《Nginx添加内置模块过程》文章指导如何检查并添加Nginx的with-http_gzip_static模块:确认该模块未默认安装后,需下载同版本源码重新编译,备份替换原有二进制文件,最后重启服务验... 目录1、查看Nginx已编辑的模块2、Nginx官网查看内置模块3、停止Nginx服务4、Nginx

通过配置nginx访问服务器静态资源的过程

《通过配置nginx访问服务器静态资源的过程》文章介绍了图片存储路径设置、Nginx服务器配置及通过http://192.168.206.170:8007/a.png访问图片的方法,涵盖图片管理与服务... 目录1.图片存储路径2.nginx配置3.访问图片方式总结1.图片存储路径2.nginx配置