Доступность потока для воспроизведения¶
Прежде чем проиграть поток, необходимо определить, опубликован ли он на сервере. На стороне подписчика это можно сделать одним из следующих способов
Функция WebSDK Stream.available()
¶
Если для воспроизведения используется WebSDK, доступность потока можно определить при помощи функции Stream.available()
. Функция возвращает promise, который разрешается, если поток с указанным именем опубликован на сервере, в противном случае отклоняется. Для вызова функции должен быть создан отдельный поток, в функцию Session.createStream()
необходимо передать имя потока и элемент для отображения потока. Созданный поток уничтожается автоматически после разрешения или отклонения promise.
Пример использования функции Stream.available()
доступен в исходных текстах приложения Two Way Streaming:
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");
});
}
Данный способ работает в CDN, в том числе для транскодированных потоков, если передать имя потока с указанием профиля. В этом случае promise может быть отклонен, если поток доступен на сервере, но защищен ключом ACL.
REST API запрос /stream/find
¶
Если первый способ по каким-либо причинам не может быть использован, доступность потока на сервере можно определить при помощи REST API запроса /stream/find
. Запрос должен быть отправлен непосредственно серверу, с которого предполагается воспроизводить поток. Если поток опубликован на этом сервере, сервер вернет 200 OK
:
HTTP/1.1 200 OK
Server: Apache-Coyote/1.1
Content-Type: application/json;charset=UTF-8
Date: Tue, 28 Mar 2017 16:05:16 GMT
[
{
"custom":{},
"nodeId":null,
"appKey":"defaultApp",
"sessionId":"/192.168.1.102:34500/192.168.1.101:8080",
"mediaSessionId":"4f112b20-13d0-11e7-b521-59a9cb7eddeb",
"remoteMediaElementId":null,
"name":"stream1",
"published":true,
"hasVideo":true,
"hasAudio":true,
"status":"PUBLISHING",
"sdp":".....",
"info":null,
"record":true,
"recordName":"stream-4f112b20-13d0-11e7-b521-59a9cb7eddeb-737lrm8t053nlg8c2n23ctco33.mp4",
"width":0,
"height":0,
"bitrate":0,
"quality":0,
"rtmpUrl":null,
"streamInfo":{
"custom":{},
"nodeId":null,
"appKey":null,
"sessionId":null,
"mediaSessionId":"4f112b20-13d0-11e7-b521-59a9cb7eddeb",
"name":"stream1",
"samplingTime":1490717116551,
"recordTimestamp":7640,
"recordStarted":true
},
"mediaProvider":"Flash"
}
]
Данный способ работает только для потоков, которые уже опубликованы на сервере к моменту отправки запроса.