Red5 Documentation

Advanced – Extending the Plugin

STEP 1

If you wish to get more out of this plugin such as authenticating against different sources etc, you can implement your own validator class by implementing the IAuthenticationValidator interface.

Example:

public class CustomSourceValidator implements IAuthenticationValidator {

    private static Logger logger = Red5LoggerFactory.getLogger(CustomSourceValidator.class, "CustomSourceValidator");
    private Object dataSource;
    public CustomSourceValidator()
    {
    }
    public CustomSourceValidator(Object dataSource)
    {
        this.dataSource = dataSource;
    }
    @Override
    public void initialize()
    {
        // load / initialize your data source object here
    }
    @Override
    public boolean onConnectAuthenticate(String username, String password, Object[] rest)
    {
        try
        {
            // authenticate here and return a true if authentication is successful, else return false
        }
        catch(Exception e)
        {
            logger.error("Error validating credentials : " + e.getMessage());
            return false;
        }
    }
    public Object getDataSource() {
        return dataSource;
    }
    public void setDataSource(Object dataSource) {
        this.dataSource = dataSource;
    }
}

Clustering involves a group of interconnected nodes (origins and edges). A publisher stream is streamed from an origin to one or more edges by the Red5 pro cluster-restreamer. In the context of a Red5 Pro ecosystem, the restreamer itself is a connection. Hence when the simple auth plugin is turned on, the authentication restriction applies to the cluster-restreamer as well. The red5pro-simple-auth-plugin treats a cluster-restreamer connection as a special client identified by the class name com.red5pro.server.stream.util.restreamer.ConnectorShell.

The red5pro-simple-auth-plugin checks the connection class name for each IConnection during authentication and allows the restreamer connection to pass through unconditionally.

When extending the red5pro-simple-auth-plugin using an IAuthenticationValidator or implementing your own custom plugin that needs to work on a Red5 Pro cluster, make sure to check for the IConnection class name. you can use the following sample snippet to check for a cluster-restreamer connection.

static String RESTREAMER = "com.red5pro.server.stream.util.restreamer.ConnectorShell";
 IConnection connection = Red5.getConnectionLocal(); // Or the `IConnection` could also be a passed param

String connectionClassName = connection.getClass().getCanonicalName();

if(connectionClassName.equalsIgnoreCase(RESTREAMER))
{
    // This is a cluster-restreamer connection
}

If the class name represents the cluster-restreamer, you should make sure to allow it to pass through unconditionally in your custom logic.

STEP 2

Instantiate your custom validator using spring in red5-web.xml and pass it as a reference to the simpleAuthSecurity configuration bean.

<bean id="authDataValidator" class="com.example.CustomSourceValidator" init-method="initialize">
    <property name="dataSource" ref="{data-source-object}" />
</bean>

<bean id="simpleAuthSecurity" class="com.red5pro.server.plugin.simpleauth.Configuration" >
        <property name="active" value="true" />
        <property name="rtmp" value="true" />
        <property name="rtsp" value="true" />
        <property name="rtc" value="true" />
        <property name="rtmpAllowQueryParamsEnabled" value="true" />
    <property name="allowedRtmpAgents" value="*" />
    <property name="validator" ref="authDataValidator" />
 </bean>

The plugin will now use your custom validator to validate the authentication info.