Table of Contents
В каких случаях включается транскодинг
Транскодинг видеопотока включается автоматически в одном из следующих случаев:
1. Кодеки стримера и плеера не совпадают по имени.
Например, стример отправляет H.264, плеер пытается играть VP8.
2. Кодеки H.264 отличаются по параметру packetization-mode
Например стример отправляет packetization-mode=1 (по умолчанию), а плеер явно указывает packetization-mode=0. Ситуация достаточно редкая, т.к. почти все устройства поддерживают packetization-mode=1
3. Явно указано разрешение плеера.
Пример:
Code Block | ||||
---|---|---|---|---|
| ||||
session.createStream({name:"stream1", constraints:{audio:true, video:{width:640,height:480}}}).play(); |
Если плеер явно указал желаемое разрешение, то транскодинг включится даже в том случае, когда указанное плеером разрешение совпадает с тем, что указал стример. Так сделано, поскольку WebRTC браузер может менять разрешение видео во время публикации. Для того, чтобы привести поток к разрешению, указанному плеером, необходимо транскодировать поток.
4. Явно указан битрейт плеера.
Пример
Code Block | ||||
---|---|---|---|---|
| ||||
session.createStream({name:"stream1", constraints:{audio:true, video:{bitrate:300}}}).play(); |
В этом случае транскодер включается, чтобы кодировать поток в заданный битрейт.
Кроме того, транскодинг может быть принудительно включен на сервере при помощи параметра в файле flashphoner.properties
Code Block | ||||
---|---|---|---|---|
| ||||
disable_streaming_proxy=true |
Warning |
---|
Транскодинг значительно увеличивает потребление ресурсов сервера (процессорных ядер). Поэтому включать его следует с осторожностью! |
Принудительное отключение транскодинга
Транскодинг может быть полностью отключен на сервере при помощи параметра в файле flashphoner.properties
Code Block | ||||
---|---|---|---|---|
| ||||
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 | ||||
---|---|---|---|---|
| ||||
{
"uri": "transcoder://tcode1",
"remoteStreamName": "test",
"localStreamName": "testT",
"encoder": {
"width": 640,
"height": 480,
"keyFrameInterval": 30,
"fps": 30
}
} |
409 - Conflict
500 - Internal error
Создать транскодер с указанными параметрами для заданного потока
...
Code Block | ||||
---|---|---|---|---|
| ||||
{
"remoteStreamName": "test"
} |
...
Code Block | ||||
---|---|---|---|---|
| ||||
[
{
"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 | ||||
---|---|---|---|---|
| ||||
[
{
"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 | ||||
---|---|---|---|---|
| ||||
{
"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
3. Откройте REST-клиент, отправьте запрос /transcoder/startup
4. Откройте веб-приложение Player, укажите в поле Stream имя потока testT и нажмите Start
5. Откройте REST-клиент, отправьте запрос /transcoder/terminate
6. Воспроизведение потока останавливается в связи с остановкой транскодера
Include Page | ||||
---|---|---|---|---|
|