Adding Backwards Compatibility for Client Connections
Note: this is critical if you have a Mobile application that is referencing a previous stream manager API version.
If you have existing streaming clients (mobile or webapp) referencing the previous version of Stream Manager API, upgrading to the latest Stream Manager will make your streammanager API service inaccessible to them unless you add in redirection support.
The process of changing a URL request endpoint dynamically at runtime on a server is known as URLRewriting. To ensure that the API 3.x event-stream requests are automatically sent to the new API 4.0 request path we need to rewrite the requests as /api/4.0
requests.
Red5 Pro runs on Tomcat engine, so we need to use a Tomcat supported solution for our URL-rewriting. The following solution uses UrlRewriteFilter, a popular URL-rewrite library for apache tomcat:
STEP 1: Download the url-rewrite library
Download the latest version of the UrlRewriteFilter library (jar) from here.
STEP 2: Copy the library into streammanager
Copy the downloaded jar into {red5prohome}/webapps/streammanager/WEB-INF/lib/
STEP 3: Register the library in streammanager to intercept and handle web requests
- Edit
{red5prohome}/webapps/streammanager/WEB-INF/web.xml
with the editor of your choice, adding theUrlRewriteFilter
filter xml snippet at the end (after the authFilter):-
<filter>
<filter-name>UrlRewriteFilter</filter-name>
<filter-class>org.tuckey.web.filters.urlrewrite.UrlRewriteFilter</filter-class>
<init-param>
<param-name>statusEnabled</param-name>
<param-value>false</param-value>
<async-supported>true</async-supported>
</init-param>
</filter>
<filter-mapping>
<filter-name>UrlRewriteFilter</filter-name>
<url-pattern>/*</url-pattern>
<dispatcher>REQUEST</dispatcher>
<dispatcher>FORWARD</dispatcher>
</filter-mapping>
STEP 4: Activate URLRewriting for event broadcast & subscribe requests
- Create a file named
urlrewrite.xml
in{red5prohome}/webapps/streammanager/WEB-INF/
, with the following code (note that this contains redirects for both3.0
and3.1
clients to the new3.1
api:
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE urlrewrite PUBLIC "-//tuckey.org//DTD UrlRewrite 4.0//EN"
"http://www.tuckey.org/res/dtds/urlrewrite4.0.dtd">
<urlrewrite use-context="true" use-query-string="true">
<rule match-type="regex">
<from>/api/3.0/event/(.*)$</from>
<to type="redirect">/api/4.0/event/$1</to>
</rule>
<rule match-type="regex">
<from>/api/3.1/event/(.*)$</from>
<to type="redirect">/api/4.0/event/$1</to>
</rule>
</urlrewrite>
This file contains the re-writing rule which is used by UrlRewriteFilter to decide when to and how to redirect URL request paths.
If you want to be able to make calls beyond the broadcast/susbcribe, then extend the rule to the base, ie:
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE urlrewrite PUBLIC "-//tuckey.org//DTD UrlRewrite 4.0//EN"
"http://www.tuckey.org/res/dtds/urlrewrite4.0.dtd">
<urlrewrite use-context="true" use-query-string="true">
<rule match-type="regex">
<from>/api/3.1/(.*)$</from>
<to type="redirect">/api/4.0/$1</to>
</rule>
</urlrewrite>
STEP 5: Restart server
Once all of the above steps are done, you need to restart the Red5 Pro service on the Stream Manager for changes to take effect.
Verifying Backwards Compatibility
Once your deployment is active, you can test the UrlRewriteFilter by making a simple GET request at the old api 3.1 endpoint from the browser.
Example: (This is a test endpoint)
REQIUEST
Url
<streammanagerurl>/streammanager/api/3.1/event/test?action=broadcast
Method: GET
RESPONSE
Success: HTTP CODE 200
DATA
welcome to stream manager event route
Once you enter the URL in the browser and hit “Enter”, you should see your URL automatically changing to <streammanagerurl>/streammanager/api/4.0/event/test?action=broadcast
in the browser’s address bar.