Если воспроизведение WebRTC потока по какой-либо причине остановилось, можно настроить автоматическое переподключение к этому потоку следующим образом:, модифицировав скрипт примера Player:
1. Добавляем в начало скрипта переменные для настройки автоматического переподключения
Code Block |
---|
|
var retryToRestartTimeoutrestart = 3000; //ms eval(getUrlParam("restart")) || false;
// Settings to restart playback if failed
var addMilesecondsToRestartTryOnEveryFailedrestartTimeout = 10003000; //ms
var retryMaxTimesrestartMaxTimes = 100; //will try to restart playback for 5 minutes
var retryCountrestartCount = 0;
var isManualStopped = false;
...
function playStreamrestartTimerId; |
В данном примере, попытка повторного подключения к потоку будет производиться каждые 3 секунды, всего будет сделано 100 попыток. Таким образом, максимально возможное время ожидания возобновления потока составляет 5 минут, после чего попытки восстановления прекращаются
2. В обработчик события STREAM_STATUS.PLAYING добавляем вызов функции clearRestart() для сброса очередного таймера переподключения, если он активен
Code Block |
---|
|
function onStarted(stream) {
...
clearRestart();
} |
3. В обработчик события SESSION_STATUS.FAILED добавляем вызов функции tryToRestart() запуск таймера переподключения
Code Block |
---|
|
function start() {
var sessionurl = $('#url').val();
...
Flashphoner.getSessions()[0];.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() для сброса очередного таймера переподключения, если он активен
Code Block |
---|
|
function playStream(session) {
...
stream = session.createStream(options).on(STREAM_STATUS.PENDING, function (stream) {
...
}).on(STREAM_STATUS.FAILEDPLAYING, function (stream) {
...
console.log("streamStatus",stream.status());
}).on(STREAM_STATUS.STOPPED, function () {
$("#preloader").hide();
setStatus(STREAM_STATUS.FAILEDSTOPPED);
clearRestart();
onStopped();
}).on(STREAM_STATUS.FAILED, function(stream) {
//try to restart
...
retryToRestart();}).on(STREAM_STATUS.NOT_ENOUGH_BANDWIDTH, function(stream){
...
});
stream.play();
} |
5. В обработчик события STREAM_STATUS.FAILED добавляем вызов функции tryToRestart() запуск таймера переподключения
Code Block |
---|
|
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 retryToRestart(){
if (retryCount < retryMaxTimes)(stream) {
$("#preloader").hide();
setStatus(STREAM_STATUS.FAILED, stream);
onStopped();
tryToRestart();
}).on(STREAM_STATUS.NOT_ENOUGH_BANDWIDTH, function(stream){
...
});
stream.play();
} |
6. Добавляем в скрипт функцию запуска таймера переподключения к потоку
Code Block |
---|
|
function tryToRestart() {
if (restart) {
restartTimerId = setTimeout(function(){
if (stream && (stream.status() != STREAM_STATUS.PLAYING) && restartCount < restartMaxTimes){
playStream();
$("#playBtn").click();
restartCount++;
}
retryToRestartTimeout if (restartCount >= retryToRestartTimeout + addMilesecondsToRestartTryOnEveryFailed;
restartMaxTimes) {
console.log("Tried to restart playback for "+restartMaxTimes+" times with retryCount"+restartTimeout+" ms interval, cancelled");
}
},retryToRestartTimeout)restartTimeout);
}
} |
7. Добавляем в скрипт функцию сброса таймера переподключения
Code Block |
---|
|
function clearRestart() {
if (restart) {
clearTimeout(restartTimerId);
restartCount = 0;
}
} |
Готовые примеры
Готовый пример Player на базе WebSDK 2.0.228 можно скачать здесь
View file |
---|
name | player_restart.tar.gz |
---|
height | 250 |
---|
|
Готовый пример Embed Player на базе WebSDK 2.0.228 можно скачать здесь
View file |
---|
name | embed_player_restart.tar.gz |
---|
height | 250 |
---|
|