Skip to end of metadata
Go to start of metadata

If WebRTC stream playback is stopped by some reason, an automatic reconnection can be implemented by tweaking Player example code as follows:

1. Add the variables to configure autonmatic reconnection to the script beginning

var restart = eval(getUrlParam("restart")) || false;
// Settings to restart playback if failed
var restartTimeout = 3000; //ms
var restartMaxTimes = 100; //will try to restart playback for 5 minutes
var restartCount = 0;
var restartTimedrId;

In this example, player will try to reconnect to the stream every 3 seconds until 100 tries are expired. Therefore, maximum time to wait for the stream to be restored is 5 minutes, then automatic reconnection is cancelled

2. Add clearRestart() function call to clear reconnection timer if enabled to STREAM_STATUS.PLAYING handler

function onStarted(stream) {
    ...
    clearRestart();
}

3. Add tryToRestart() function call to enable reconnection timer to SESSION_STATUS.FAILED handler

function start() {
    var url = $('#url').val();
    ...
    Flashphoner.createSession({urlServer: url}).on(SESSION_STATUS.ESTABLISHED, function(session){
        ...
    }).on(SESSION_STATUS.DISCONNECTED, function(){
        ...
    }).on(SESSION_STATUS.FAILED, function(){
        setStatus(SESSION_STATUS.FAILED);
        onStopped();
        tryToRestart();
    });
}

4. Add clearRestart() function call to clear reconnection timer if enabled to STREAM_STATUS.STOPPED handler

function playStream(session) {
    ...
    stream = session.createStream(options).on(STREAM_STATUS.PENDING, function (stream) {
        ...
    }).on(STREAM_STATUS.PLAYING, function (stream) {
        ...
    }).on(STREAM_STATUS.STOPPED, function () {
        $("#preloader").hide();
        setStatus(STREAM_STATUS.STOPPED);
        clearRestart();
        onStopped();
    }).on(STREAM_STATUS.FAILED, function(stream) {
        ...
    }).on(STREAM_STATUS.NOT_ENOUGH_BANDWIDTH, function(stream){
        ...
    });
    stream.play();
}

5. Add tryToRestart() function call to enable reconnection timer to STREAM_STATUS.FAILED handler

function playStream(session) {
    ...
    stream = session.createStream(options).on(STREAM_STATUS.PENDING, function (stream) {
        ...
    }).on(STREAM_STATUS.PLAYING, function (stream) {
        ...
    }).on(STREAM_STATUS.STOPPED, function () {
        ...
    }).on(STREAM_STATUS.FAILED, function(stream) {
        $("#preloader").hide();
        setStatus(STREAM_STATUS.FAILED, stream);
        onStopped();
        tryToRestart();
    }).on(STREAM_STATUS.NOT_ENOUGH_BANDWIDTH, function(stream){
        ...
    });
    stream.play();
}

6. Add the function to enable reconnection timer

function tryToRestart() {
    if (restart) {
        restartTimerId = setTimeout(function(){
            if (stream && (stream.status() != STREAM_STATUS.PLAYING) && restartCount < restartMaxTimes){
                $("#playBtn").click();
                restartCount++;
            }
            if (restartCount >= restartMaxTimes) {
                console.log("Tried to restart playback for "+restartMaxTimes+" times with "+restartTimeout+" ms interval, cancelled");
            }
        },restartTimeout);
    }
}

7. Add the function to clear reconnection timer

function clearRestart() {
    if (restart) {
        clearTimeout(restartTimerId);
        restartCount = 0;
    }
}

Ready to use samples

Ready to use Player example based on WebSDK 2.0.228 can be downloaded here

player_restart.tar.gz

Ready to use Embed Player example based on WebSDK 2.0.228 can be downloaded here

embed_player_restart.tar.gz

  • No labels