Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

Table of Contents

В каких случаях включается транскодинг

Транскодинг видеопотока включается автоматически в одном из следующих случаев:

1. Кодеки стримера и плеера не совпадают по имени.
Например, стример отправляет H.264, плеер пытается играть VP8.

2. Кодеки H.264 отличаются по параметру packetization-mode
Например стример отправляет packetization-mode=1 (по умолчанию), а плеер явно указывает packetization-mode=0. Ситуация достаточно редкая, т.к. почти все устройства поддерживают packetization-mode=1

3. Явно указано разрешение плеера.
Пример:

Code Block
languagejs
themeRDark
session.createStream({name:"stream1", constraints:{audio:true, video:{width:640,height:480}}}).play();

Если плеер явно указал желаемое разрешение, то транскодинг включится даже в том случае, когда указанное плеером разрешение совпадает с тем, что указал стример. Так сделано, поскольку WebRTC браузер может менять разрешение видео во время публикации. Для того, чтобы привести поток к разрешению, указанному плеером, необходимо транскодировать поток.

4. Явно указан битрейт плеера.

Пример

Code Block
languagejs
themeRDark
session.createStream({name:"stream1", constraints:{audio:true, video:{bitrate:300}}}).play();

В этом случае транскодер включается, чтобы кодировать поток в заданный битрейт.

Кроме того, транскодинг может быть принудительно включен на сервере при помощи параметра в файле flashphoner.properties

Code Block
languagebash
themeRDark
disable_streaming_proxy=true
Warning

Транскодинг значительно увеличивает потребление ресурсов сервера (процессорных ядер). Поэтому включать его следует с осторожностью!

Принудительное отключение транскодинга

Транскодинг может быть полностью отключен на сервере при помощи параметра в файле flashphoner.properties

Code Block
languagebash
themeRDark
transcoding_disabled=true

Если транскодинг принудительно отключен, во всех четырех случаях, перечисленных выше, клиенту возвращается ошибка TRANSCODING_REQUIRED_BUT_DISABLED.

Отключение транскодинга не влияет на микшер, при использовании микшера транскодинг будет включаться.

Управление транскодингом при помощи REST API

REST-запрос должен быть HTTP/HTTPS POST запросом в таком виде:

  • HTTP: http://test.flashphoner.com:8081/rest-api/transcoder/startup
  • HTTPS: https://test.flashphoner.com:8444/rest-api/transcoder/startup

Здесь:

  • test.flashphoner.com - адрес WCS-сервера
  • 8081 - стандартный REST / HTTP порт WCS-сервера
  • 8444 - стандартный HTTPS порт
  • rest-api - обязательная часть URL
  • /transcoder/startup - используемый REST-метод

REST-методы и статусы ответа

...

REST-метод

...

Пример тела REST-запроса

...

Пример тела REST-ответа

...

Статусы ответа

...

Описание

...

/transcoder/startup

...

Code Block
languagejs
themeRDark
{
 "uri": "transcoder://tcode1",
 "remoteStreamName": "test",
 "localStreamName": "testT",
 "encoder": {
  "width": 640,
  "height": 480,
  "keyFrameInterval": 30,
  "fps": 30
 }
}

409 - Conflict

500 - Internal error

Создать транскодер с указанными параметрами для заданного потока

...

Code Block
languagejs
themeRDark
{
 "remoteStreamName": "test"
}

...

Code Block
languagejs
themeRDark
[
    {
        "localMediaSessionId": "42a92132-bcd1-4436-a96f-3fec36b32b37",
        "localStreamName": "testT",
        "remoteStreamName": "test",
        "uri": "transcoder://tcode1",
        "status": "PROCESSED_LOCAL",
        "hasAudio": true,
        "hasVideo": true,
        "record": false,
        "encoder": {
            "width": 640,
            "height": 480,
            "keyFrameInterval": 30,
            "fps": 30
        }
    }
]

...

200 – транскодеры найдены

404 – транскодеры не найдены

...

/transcoder/find_all

...

Code Block
languagejs
themeRDark
[
    {
        "localMediaSessionId": "42a92132-bcd1-4436-a96f-3fec36b32b37",
        "localStreamName": "testT",
        "remoteStreamName": "test",
        "uri": "transcoder://tcode1",
        "status": "PROCESSED_LOCAL",
        "hasAudio": true,
        "hasVideo": true,
        "record": false,
        "encoder": {
            "width": 640,
            "height": 480,
            "keyFrameInterval": 30,
            "fps": 30
        }
    }
]

...

200 – транскодеры найдены

404 – транскодеры не найдены

...

Найти все транскодеры

...

/transcoder/terminate

...

Code Block
languagejs
themeRDark
{
"uri":"transcoder://tcode1"
}

...

200 - транскодер завершен

404 - транскодер не найден

...

Остановить транскодер и его выходной поток

Параметры

...

Имя параметра

...

Описание

...

Пример

...

uri

...

URL транскодера

...

transcoder://tcode1

...

testT

...

test

...

42a92132-bcd1-4436-a96f-3fec36b32b37

...

status

...

Текущий статус транскодера

...

PROCESSED_LOCAL

...

true

...

true

...

false

...

640

...

480

...

30

...

30

...

500

...

OPENH264

Краткое руководство по тестированию

1. Для тестирования используем

  • WCS-сервер;
  • Веб-приложение Two Way Streaming для публикации потока;
  • Веб-приложение Player для воспроизведения выходного потока транскодера;
  • браузер Chrome и REST-клиент для отправки запросов на сервер

2. Откройте приложение Two Way Streaming, опубликуйте поток test

Image Removed

3. Откройте REST-клиент, отправьте запрос /transcoder/startup

Image Removed

4. Откройте веб-приложение Player, укажите в поле Stream имя потока testT и нажмите Start

Image Removed

5. Откройте REST-клиент, отправьте запрос /transcoder/terminate

Image Removed

6. Воспроизведение потока останавливается в связи с остановкой транскодера

Image Removed

Include Page
WCS5RU:Транскодинг потока
WCS5RU:Транскодинг потока