Перейти к содержанию

Доступность потока для воспроизведения

Прежде чем проиграть поток, необходимо определить, опубликован ли он на сервере. На стороне подписчика это можно сделать одним из следующих способов

Функция 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:

POST /rest-api/stream/find HTTP/1.1
Host: 192.168.1.101:8081
Content-Length: 40
Content-Type: application/json

{
    "name":"stream1",
    "published":true
}
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"
    }
]

Данный способ работает только для потоков, которые уже опубликованы на сервере к моменту отправки запроса.