By default or so I’ve been told, the Flash Player will try various ports when attempting to connect to a resource. In Red5, RTMP is supported out-of-the-box on the default RTMP port of 1935 and HTTP is setup on 5080. A “special” server is started on 8088 as well to handle RTMPT only requests, but this requires that you set your request url as “rtmpt://myserver:8088/myapp/” which can be confusing and completely ignores the Flash Player port probing. So I offer this solution, allowing you to setup HTTP on port 80 and RTMPT on port 80 as well. Since Red5 includes a servlet container (Tomcat by default), you have a full-fledged HTTP server and servlet engine built-in; allowing a servlet to answer the RTMPT requests.
The first file we need to modify is the server properties file located in the conf directory:
red5/conf/red5.properties
The last file to modify will be your web application configuration or “web.xml” file. The web application configuration file will be located here: red5/webapps/myapp/WEB-INF/web.xml if your application name is “myapp”. Add these entries:
<servlet>
<servlet-name>rtmpt</servlet-name>
<servlet-class>org.red5.server.net.rtmpt.RTMPTServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>rtmpt</servlet-name>
<url-pattern>/fcs/*</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>rtmpt</servlet-name>
<url-pattern>/open/*</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>rtmpt</servlet-name>
<url-pattern>/close/*</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>rtmpt</servlet-name>
<url-pattern>/send/*</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>rtmpt</servlet-name>
<url-pattern>/idle/*</url-pattern>
</servlet-mapping>
Informational links about FlashPlayer and ports:
HTTP Tunneling protocols
Tags: Actionscript, flash player, fms, http, Red5, rtmpt, tomcat, webapp
In Red5, you have pretty much full access to manipulate the embedded Tomcat engine via Spring. With that being said I would like to give details on how to change the http connector between two available options; there are several other options, but I’ll only be covering NIO and BIO. First a quick explanation of these two options:
<property name=”connector”>
  <bean class=”org.apache.catalina.connector.Connector”>
   <constructor-arg type=”java.lang.String” value=”org.apache.coyote.http11.Http11Protocol” />
   <property name=”port”><value>80</value></property>
   <property name=”redirectPort”><value>443</value></property>
   <property name=”enableLookups”><value>false</value></property>
  </bean>
</property>
To use the NIO connector simply change the constructor arg as shown below:
<property name=”connector”>
  <bean class=”org.apache.catalina.connector.Connector”>
   <constructor-arg type=”java.lang.String” value=”org.apache.coyote.http11.Http11NioProtocol” />
   <property name=”port”><value>80</value></property>
   <property name=”redirectPort”><value>443</value></property>
   <property name=”enableLookups”><value>false</value></property>
  </bean>
</property>
Tags: connector, http, linux, nio, osx, RTMPS, rtmpt, spring, tomcat
Some of you may find yourself in a situation where your Red5 server is on an internal network or otherwise un-reachable from the Internet. This set of rewrite rules will allow you to provide access to Red5 using an Apache web server (assuming the web server has access to the Internet).
The following rules assume that your Red5 server is running on a server with the IP address of 10.0.0.5, accepting HTTP connections on port 5080, and your application name is “myapp”.
RewriteRule ^/(open/.*)$ http://10.0.0.5:5080/myapp/$1 [P]
RewriteRule ^/(send/.*)$ http://10.0.0.5:5080/myapp/$1 [P]
RewriteRule ^/(idle/.*)$ http://10.0.0.5:5080/myapp/$1 [P]
RewriteRule ^/(close/.*)$ http://10.0.0.5:5080/myapp/$1 [P]
If you need more information on mod_rewrite, use this link.
Tags: apache, mod_rewrite, rtmpt