Skip to end of metadata
Go to start of metadata

Если воспроизведение WebRTC потока по какой-либо причине остановилось, можно настроить автоматическое переподключение к этому потоку, модифицировав скрипт примера Player:

1. Добавляем в начало скрипта переменные для настройки автоматического переподключения

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 restartTimerId;

В данном примере, попытка повторного подключения к потоку будет производиться каждые 3 секунды, всего будет сделано 100 попыток. Таким образом, максимально возможное время ожидания возобновления потока составляет 5 минут, после чего попытки восстановления прекращаются

2. В обработчик события STREAM_STATUS.PLAYING добавляем вызов функции clearRestart() для сброса очередного таймера переподключения, если он активен

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

3. В обработчик события SESSION_STATUS.FAILED добавляем вызов функции tryToRestart() запуск таймера переподключения

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. В обработчик события STREAM_STATUS.STOPPED добавляем вызов функции clearRestart() для сброса очередного таймера переподключения, если он активен

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. В обработчик события STREAM_STATUS.FAILED добавляем вызов функции tryToRestart() запуск таймера переподключения

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. Добавляем в скрипт функцию запуска таймера переподключения к потоку

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. Добавляем в скрипт функцию сброса таймера переподключения

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

Готовые примеры

Готовый пример Player на базе WebSDK 2.0.189 можно скачать здесь

player_restart.tar.gz

Готовый пример Embed Player на базе WebSDK 2.0.189 можно скачать здесь

embed_player_restart.tar.gz

  • No labels