设为首页 收藏本站
查看: 498|回复: 0

[经验分享] RED5集成到tomcat,通过外网访问流媒体服务器中的视频时出错问题解决

[复制链接]

尚未签到

发表于 2017-2-10 09:10:37 | 显示全部楼层 |阅读模式
这是最近在项目中遇到的问题,以前一直在内网测试,效果良好,自从公司租了租了服务器后,需要通过外网访问,之后问题就接二连三的来了
通过将red5项目集成到tomcat中,然后访问red5服务器中的视频文件时,一直访问不到
现在有一个外网,例如为:183.54.223.123对应内网为:10.52.85.21
在tomcat中的webapps中,有一个fileList编写的red5服务程序
在fileList下的WEB-INF/classes中存在一些.xml配置文件,其中需要改变的主要是root-web.xml和red5-core.xml
以下是我的配置文件:
  root-web.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">
<beans>
<!-- ROOT web context -->
<bean id="web.context" class="org.red5.server.Context">
<property name="scopeResolver" ref="red5.scopeResolver" />
<property name="clientRegistry" ref="global.clientRegistry" />
<property name="serviceInvoker" ref="global.serviceInvoker" />
<property name="mappingStrategy" ref="global.mappingStrategy" />
</bean>
<bean id="web.scope" class="org.red5.server.WebScope" init-method="register">
<property name="server" ref="red5.server" />
<property name="parent" ref="global.scope" />
<property name="context" ref="web.context" />
<property name="handler" ref="global.handler" />
<property name="contextPath" value="/fileList" />
<property name="virtualHosts" value="<span style="color:#ff0000;">10.52.85.21</span>" />
</bean>
<bean id="web.handler" class="com.apps.Application" singleton="true" />
<bean id="streamService.service" class="com.services.StreamService" singleton="true"/>
<bean id="streamFilenameGenerator"
class="streamfile.path.PathBean">
<property name="recordPath" value="/usr/tmp/streams/" />
<property name="playbackPath" value="/usr/tmp/streams/" />
</bean>
</beans>

  red5-core.xml
由于太长,我就粘贴需要改动的那个部分

<?xml version="1.0" encoding="UTF-8" ?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:lang="http://www.springframework.org/schema/lang"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
http://www.springframework.org/schema/lang http://www.springframework.org/schema/lang/spring-lang-2.5.xsd">
<!-- This context holds all the networking: mina -->
.......省略部分......
<!-- RTMP Mina Transport -->
<bean id="rtmpTransport" class="org.red5.server.net.rtmp.RTMPMinaTransport" init-method="start" destroy-method="stop">
<property name="ioHandler" ref="rtmpMinaIoHandler" />
<property name="connectors">
<list>
<bean class="java.net.InetSocketAddress">
<constructor-arg index="0" type="java.lang.String"
value="<span style="color:#ff0000;">10.52.85.21</span>" />  
<constructor-arg index="1" type="int" value="1935" />  
</bean>
</list>
</property>
<property name="receiveBufferSize" value="65536" />
<property name="sendBufferSize" value="271360" />
<property name="connectionThreads" value="4" />
<property name="ioThreads" value="16" />
<!-- This is the interval at which the sessions are polled for stats. If mina monitoring is not
enabled, polling will not occur. -->
<property name="jmxPollInterval" value="1000" />
<property name="tcpNoDelay" value="true" />
</bean>
......省略部分......
</beans>

  在root-web.xml中指定了流媒体服务器中的文件播放路径-->/usr/tmp/streams,同时我也在此目录下放置了test.flv文件

看其中的IP地址,我这里很疑惑,到底是填写内网地址呢还是外网地址呢?

根据tomcat中的日志red5.log中记录,当使用外网地址时,使用netstat-ntl|more命令查看时,发现1935根本不会开启,同时red5.log中就会出现cannotassignrequestedaddress错误
当使用内网时,就不会报错,并且使用命令查看端口时,发现1935是开启的

但是无论通过哪种方法访问rtmp://183.54.223.123/fileList/test.flv或者使用rtmp://10.52.85.21/fileList/test.flv都不能正常播放
在外部用流媒体播放器是无法播放的,总是说不是指定路径,于是我将一个自己写的测试流媒体播放的播放器放置在项目的tomcat下,通过内部区访问,也是行不通的,同时给我标出的端口竟然是80(如Servernotfoundrtmp://183.54.223.123:80/fileList),证明我不是通过1935访问的(但是在这种情况下,如果上面中的xml文件配置的是内网IP的话,1935应该是打开了的,为什么竟然是通过80端口访问的呢?)

于是我又想是不是外网服务器进入内网中时,有一层防火墙,阻止了1935端口开启,但是打电话去问时,给我的答案是只对80端口进行了部分限制,其它的端口没有限制,同时我使用telnet命令在windows上是能够测通的

这里我已经确认了本机上的防火墙已经把特定的端口开启了,而且我也做过吧防火墙全部关闭过的尝试,但是都没有效果

之后我在linux上部署了一个单独的red5服务器,通过安装其中的案例测试是可以正常播放的,说明外网的1935端口确实是开启的,只是随着red服务器的开启而随之开启,那么当我启动tomcat中的red5服务,经过测试确实1935也是开启了的,到底是哪里出错了?


于是我看了red5中一个测试程序的WEB-INF里面的red5-web.xml文件,发现他填写的地址竟然是"*,localhost:8080,localhost,127.0.0.1:8080",而不是对应的内网IP


那么是否意味着在tomcat中的red5服务也是要这么配置呢,于是我修改了root-web.xml文件中的内网地址,将其改为"*,localhost:8080,localhost,127.0.0.1:8080",测试通过,可以完美播放视频了


根据我的理解,应该是当你在浏览器或者流媒体视频播放器输入外网地址时,而配置文件总根本就找不到对应的外网地址,因为此时你配的是内网地址,所以根据也就找不到对应的tomcat中的red5服务,更谈不上调用red5服务播放视频了,而当填写的是"*,localhost:8080,localhost,127.0.0.1:8080"时,由于是接受所有访问地址,因此找到对应的fileList服务,同时将此地址转换成内网地址绑定到1935端口上,于是就可以正常播放了

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-339975-1-1.html 上篇帖子: 项目在tomcat下跑正常,可以发布到websphere上报错 下篇帖子: 配置struts2上传文件格式的时候可以使用tomcat下的conf里的web文件查看格式
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表