Почему происходит транскодинг из h264 в h264 и как отключить его ?

Kirill

Member
Доброго дня!
Отправляю стрим на WCS ip камеры с такими кодеками
Code:
h264, yuvj420p(pc, bt709, progressive), 1920x1080 [SAR 1:1 DAR 16:9], 25 fps, 25 tbr, 90k tbn, 50 tbc
pcm_alaw, 8000 Hz
На выходе битрейт отличный от того, который я отправляю на сервер. Судя по всему wcs производит транскодинг видео потока ( не понятно почему, ведь видео и так уже в h264) .
upload_2018-7-18_11-41-54.png

Воспроизвожу поток в wcs демо, webrtc .
WCS 5.1
 

Kirill

Member
Добрый день.

Что показывает http://localhost:8081/?action=stat в поле native_resources ?
https://docs.flashphoner.com/pages/viewpage.action?pageId=1049115

При транскодинге там должна быть запись типа 100072054, ENCODER, H.264, 20225
Последняя цифра - количество сэмплов, которое прошло через encoder.
Code:
-----Native Resources-----
native_resources=139708525293888,ENCODER:PNG,0;139707783436592,DECODER:H264,115493923;139708514429504,ENCODER:H264,44407;
 

Max

Administrator
Staff member
Проблему удалось воспроизвести. Открыли внутренний тикет WCS-1342.
По результатам отпишем.
 

Kirill

Member
Проблему удалось воспроизвести. Открыли внутренний тикет WCS-1342.
По результатам отпишем.
Очень ждем, спасибо
 
Last edited:

Kirill

Member
Можно ли как-то отключить транскодинг или контролировать параметры транскодинга ?
 

Max

Administrator
Staff member
Транскодинг можно убрать настройкой:
Code:
force_client_requested_video_resolution=false
В качестве побочного эффекта, если плеер задаст желаемое разрешение, например 640x360, то рескейлинга и транскодинга в это разрешение не произойдет.
 

Max

Administrator
Staff member
Пока разбираемся как сделать чтобы работало по-умолчанию без изменений в этой настройке.
 

Max

Administrator
Staff member
Видеотранскодинг включается автоматически в одном из следующих 4 случаев:
1. Кодеки стримера и плеера не совпадают по имени.
Например, стример отправляет H.264, плеер пытается играть VP8.
2. Кодеки H.264 отличаются по параметру packetization-mode
Например стример отправляет packetization-mode=1 (default), а плеер явно указывает packetization-mode=0
Ситуация достаточно редкая, т.к. почти все устройства поддерживают packetization-mode=1
3. Разрешение плеера явно указано.
Пример:
Code:
session.createStream({name:"stream1", constraints:{audio:true, video:{width:640,height:480}}}).play();
Если плеер явно указал желаемое разрешение, то включится транскодинг даже в том случае если указанное плеером разрешение совпадает с тем что указал publisher.
Так сделано потому что WebRTC браузер может менять разрешение видео во время публикации и чтобы привести его к указанному во всех случаях, придется транскодировать.
4. Битрейт плеера явно указан.
Code:
session.createStream({name:"stream1", constraints:{audio:true, video:{bitrate:300}}}).play();
В этом случае включится транскодер чтобы кодировать поток в заданный битрейт.

В текущей реализации принудительно отключить транскодинг нельзя. Можно лишь убрать факторы, которые его вызывают.
Подумаем как отключить транскодинг и как корректно дать пользователю информацию об ошибке, о том, что он не сможет проиграть стрим по причине того что требуется транскодинг, а транскодинг отключен. WCS-1346.
 
Top