и получается так, что поток публикуется (отслеживаем в консоле браузера chrome)
Публикацию потока более надежно отслеживать либо по получению события
STREAM_STATUS.PUBLISHING
, как Вы делаете для проигрывания preview потока в примере выше, либо на стороне сервера при помощи REST API /stream/find
Code:
POST /rest-api/stream/find HTTP/1.1
Host: wcs:8081
Content-Type: application/json
{
"name":"user1#room1",
"published":true
}
Запрос вернет 200, когда поток опубликован на сервере.
Также есть способ контроля доступности любого потока на сервере при помощи функции WebSDK
Stream.available()
Code:
function availableStream(){
var session = Flashphoner.getSessions()[0];
var streamName = $('#playStream').val();
session.createStream({
name: streamName,
display: remoteVideo
}).available().then(function(stream){
$("#availableStatus").text("AVAILABLE").attr("class", "text-success");
}, function(stream){
$("#availableStatus").text("UNAVAILABLE").attr("class", "text-danger");
});
}
Для выходного потока микшера можно использовать либо
Stream.available()
, либо REST API
Code:
POST /rest-api/stream/find HTTP/1.1
Host: wcs:8081
Content-Type: application/json
{
"name":"room1",
"published":true
}
Такое ощущения, что "код" отрабатывает быстрее чем микшер создается и поэтому не воспроизводит сразу.. как будто нужен таймаут между публикацией и воспроизведением... но в зависимости от нагрузки на сервер таймаут может быть разный... как-то так.
Последовательность выполнения операций выглядит следующим образом:
1) Поток user1#room1 публикуется на сервере
2) Создается микшер room1
3) На сервере публикуются потоки room1, room1-user1room1
Задержки могут быть обусловлены пропускной способностью канала от клиента до сервера (особенно при публикации и проигрывании толстых потоков 720p и выше), общим количеством подключенных клиентов на сервере (поскольку канал сервера тоже не резиновый) и, в незначительной степени, нагрузкой на процессор сервера (здесь задержки могут составлять до сотни миллисекунд, поэтому ими можно пренебречь).
Поэтому наиболее общим подходом будет контроль публикации нужного потока через REST API или
Stream.available()