Транскодинг видеопотока включается автоматически в одном из следующих случаев:
1. Кодеки стримера и плеера не совпадают по имени.
Например, стример отправляет H.264, плеер пытается играть VP8.
2. Кодеки H.264 отличаются по параметру packetization-mode
Например стример отправляет packetization-mode=1 (по умолчанию), а плеер явно указывает packetization-mode=0. Ситуация достаточно редкая, т.к. почти все устройства поддерживают packetization-mode=1
3. Явно указано разрешение плеера.
Пример:
session.createStream({name:"stream1", constraints:{audio:true, video:{width:640,height:480}}}).play(); |
Если плеер явно указал желаемое разрешение, то транскодинг включится даже в том случае, когда указанное плеером разрешение совпадает с тем, что указал стример. Так сделано, поскольку WebRTC браузер может менять разрешение видео во время публикации. Для того, чтобы привести поток к разрешению, указанному плеером, необходимо транскодировать поток.
4. Явно указан битрейт плеера.
Пример
session.createStream({name:"stream1", constraints:{audio:true, video:{bitrate:300}}}).play(); |
В этом случае транскодер включается, чтобы кодировать поток в заданный битрейт.
Кроме того, транскодинг может быть принудительно включен на сервере при помощи параметра в файле flashphoner.properties
disable_streaming_proxy=true |
Транскодинг значительно увеличивает потребление ресурсов сервера (процессорных ядер). Поэтому включать его следует с осторожностью! |
Транскодинг может быть полностью отключен на сервере при помощи параметра в файле flashphoner.properties
transcoding_disabled=true |
Если транскодинг принудительно отключен, во всех четырех случаях, перечисленных выше, клиенту возвращается ошибка TRANSCODING_REQUIRED_BUT_DISABLED.
Отключение транскодинга не влияет на микшер, при использовании микшера транскодинг будет включаться.
REST-запрос должен быть HTTP/HTTPS POST запросом в таком виде:
Здесь:
REST-метод | Пример тела REST-запроса | Пример тела REST-ответа | Статусы ответа | Описание | ||
---|---|---|---|---|---|---|
/transcoder/startup |
| 409 - Conflict 500 - Internal error | Создать транскодер с указанными параметрами для заданного потока | |||
/transcoder/find |
|
| 200 – транскодеры найдены 404 – транскодеры не найдены | Найти транскодер по указанным критериям | ||
/transcoder/find_all |
| 200 – транскодеры найдены 404 – транскодеры не найдены | Найти все транскодеры | |||
/transcoder/terminate |
| 200 - транскодер завершен 404 - транскодер не найден | Остановить транскодер и его выходной поток |
Имя параметра | Описание | Пример |
---|---|---|
uri | URL транскодера | transcoder://tcode1 |
localStreamName | Имя выходного потока транскодера | testT |
remoteStreamName | Имя транскодируемого потока | test |
localMediaSessionId | Идентификатор медиасессии транскодера | 42a92132-bcd1-4436-a96f-3fec36b32b37 |
status | Текущий статус транскодера | PROCESSED_LOCAL |
hasAudio | Выходной поток содержит аудио | true |
hasVideo | Выходной поток содержит видео | true |
record | Выходной поток записывается | false |
Параметры кодирования | ||
width | Ширина картинки | 640 |
height | Высота картинки | 480 |
keyFrameInterval | Частота генерации ключевых кадров (GOP) | 30 |
fps | Частота кадров в секунду | 30 |
bitrate | Битрейт в кб/с | 500 |
type | Кодек | OPENH264 |
1. Для тестирования используем
2. Откройте приложение Two Way Streaming, опубликуйте поток test
3. Откройте REST-клиент, отправьте запрос /transcoder/startup
4. Откройте веб-приложение Player, укажите в поле Stream имя потока testT и нажмите Start
5. Откройте REST-клиент, отправьте запрос /transcoder/terminate
6. Воспроизведение потока останавливается в связи с остановкой транскодера