Versions Compared

Key

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

Table of Contents

Поддерживаемые кодеки

Видео:

  • H264
  • VP8
  • H265 (начиная со сборки 5.2.1803)

Аудио:

  • Opus
  • AAC
  • G711 (PCMA, PCMU)
  • G722

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

...

При этом поток будет транскодирован к тем ширине и высоте кадра, которые запрашивает подписчик. Если высота не указана подписчиком, будет установлена высота картинки 120. Если ширина не указана подписчиком, будет установлена ширина картинки 160.

Синхронизация аудио и видео на выходе транскодера

...

Округление ширины картинки при сохранении соотношения сторон

В сборке 5.2.1842 добавлена возможность указать округление ширины картинки при включенном сохранении соотношения сторон. По умолчанию, ширина округляется в меньшую сторону:

Code Block
themeRDark
avvideo_transcoder_pacedround_senderratio=true

...

0

Например, при транскодировании картинки 1280x720 к разрешению 480p по умолчанию будет получена картинка 852x480. Настройка

Code Block
themeRDark
avvideo_pacedtranscoder_sender_max_buffer_size=5000

По умолчанию размер буфера составляет 5000 кадров

Для контроля работы выравнивающего буфера используется статистика, получаемая при помощи запроса

Code Block
languagebash
themeRDark
curl -s 'http://localhost:8081/?action=stat&format=json&groups=buffer_stats'

Добавление водяного знака в определенный поток

В сборке 5.2.693 появилась возможность добавлять в выходной поток транскодера водяной знак при создании транскодера по REST API, например

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

Если имя файла указано без пути, файл должен располагаться в каталоге /usr/local/FlashphonerWebCallServer/conf. Можно также указать полный путь к файлу, например

Code Block
languagebash
themeRDark
{
 "uri": "transcoder://tcode1",
 "remoteStreamName": "test",
 "localStreamName": "testT",
 "encoder": {
  "width": 640,
  "height": 480,
  "keyFrameInterval": 30,
  "fps": 30,
  "watermark": "/opt/media/Test.png"
 }
}

Динамическое добавление и изменение водяного знака

В сборке 5.2.1349 добавлена возможность динамически добавлять и изменять водяной знак, не останавливая транскодер. Водяной знак может быть добавлен, изменен или перемещен в соответствии с указанными координатами при помощи REST API запроса /transcoder2/set_watermark 

Code Block
languagejs
themeRDark
{
 "uri":"transcoder2://tcode1",
 "watermark":"/opt/media/logo.png",
 "x":10,
 "y":10,
 "marginTop":5,
 "marginLeft":5,
 "marginBottom":5,
 "marginRight":5
}

Здесь

  • watermark - имя файла водяного знака
  • x, y - координаты верхнего левого угла водяного знака на картинке потока
  • marginTop, marginLeft, marginBottom, marginRignt - отступы от границ картинке потока

Если координаты выходят за границы картинки потока, водяной знак будет вписан в эти границы с учетом отступов.

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

Code Block
languagejs
themeRDark
{
 "uri":"transcoder2://tcode1",
 "watermark":""
}

Многопоточное кодирование

В сборке 5.2.816 добавлена возможность многопоточного кодирования при использовании кодировщика на базе OpenH264. Количество потоков кодирования устанавливается следующей настройкой

Code Block
themeRDark
video_encoder_max_threads=2

По умолчанию, количество потоков установлено в 2.

Многопоточное кодирование включается в зависимости от разрешения выходного потока транскодера. Граница устанавливается при помощи следующей настройки

Code Block
themeRDark
video_encoder_second_thread_threshold=777000

Значение представляет собой произведение ширины картинки на высоту. Таким образом, по умолчанию в несколько потоков кодируются картинки разрешением 720p. При необходимости, этот порог можно понизить. Например, для того, чтобы кодировать в несколько потоков картинки 480p, установите значение

Code Block
themeRDark
video_encoder_second_thread_threshold=408950round_ratio=1

включает округление в большую сторону: в этом случае будет получена картинка 854x480.

Соотношение сторон для вертикального видео

Начиная со сборки 5.2.1911, WCS определяет ориентацию публикуемого потока по ширине и высоте кадра и поддерживает соотношение сторон следующим образом:

1. Для горизонтального видео (ширина картинки больше либо равна высоте) значение height  из профиля транскодирования применяется к высоте, ширина транскодируемого потока вычисляется по высоте. Например, для потока 1920x1080 (16:9) при заказанном транскодинге с height: 360  результат будет иметь разрешение 640x360.

2. Для вертикального видео (ширина картинки меньше высоты) значение height  из профиля транскодирования применяется к ширине, высота транскодируемого потока вычисляется по ширине. Например, для потока 1080x1920 (9:16) при заказанном транскодинге с height: 360  результат будет иметь разрешение 360x640.

Синхронизация аудио и видео на выходе транскодера

По умолчанию, транскодер не синхронизирует аудио и видео в выходном потоке, оставляя значение синхронизации как есть. Это может приводить к несовпадению звука и видео в транскодированном потоке. Чтобы этого избежать, в сборке 5.2.543 добавлен выравнивающий буфер, который включается настройкой

Code Block
themeRDark
av_paced_sender=true

Размер выравнивающего буфера задается в кадрах настройкой

Code Block
themeRDark
av_paced_sender_max_buffer_size=5000

По умолчанию размер буфера составляет 5000 кадров

Для контроля работы выравнивающего буфера используется статистика, получаемая при помощи запроса

Code Block
languagebash
themeRDark
curl -s 'http://localhost:8081/?action=stat&format=json&groups=buffer_stats'

Добавление водяного знака в определенный поток

В сборке 5.2.693 появилась возможность добавлять в выходной поток транскодера водяной знак при создании транскодера по REST API, например

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

Если имя файла указано без пути, файл должен располагаться в каталоге /usr/local/FlashphonerWebCallServer/conf. Можно также указать полный путь к файлу, например

Code Block
languagebash
themeRDark
{
 "uri": "transcoder://tcode1",
 "remoteStreamName": "test",
 "localStreamName": "testT",
 "encoder": {
  "width": 640,
  "height": 480,
  "keyFrameInterval": 30,
  "fps": 30,
  "watermark": "/opt/media/Test.png"
 }
}

Динамическое добавление и изменение водяного знака

В сборке 5.2.1349 добавлена возможность динамически добавлять и изменять водяной знак, не останавливая транскодер. Водяной знак может быть добавлен, изменен или перемещен в соответствии с указанными координатами при помощи REST API запроса /transcoder2/set_watermark 

Code Block
languagejs
themeRDark
{
 "uri":"transcoder2://tcode1",
 "watermark":"/opt/media/logo.png",
 "x":10,
 "y":10,
 "marginTop":5,
 "marginLeft":5,
 "marginBottom":5,
 "marginRight":5
}

Здесь

  • watermark - имя файла водяного знака
  • x, y - координаты верхнего левого угла водяного знака на картинке потока
  • marginTop, marginLeft, marginBottom, marginRignt - отступы от границ картинки потока

Если координаты выходят за границы картинки потока, водяной знак будет вписан в эти границы с учетом отступов.

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

Code Block
languagejs
themeRDark
{
 "uri":"transcoder2://tcode1",
 "watermark":""
}

Многопоточное кодирование

В сборке 5.2.816 добавлена возможность многопоточного кодирования при использовании кодировщика на базе OpenH264. Количество потоков кодирования устанавливается следующей настройкой

Code Block
themeRDark
video_encoder_max_threads=2

По умолчанию, количество потоков установлено в 2.

Многопоточное кодирование включается в зависимости от разрешения выходного потока транскодера. Граница устанавливается при помощи следующей настройки

Code Block
themeRDark
video_encoder_second_thread_threshold=777000

Значение представляет собой произведение ширины картинки на высоту. Таким образом, по умолчанию в несколько потоков кодируются картинки разрешением 720p. При необходимости, этот порог можно понизить. Например, для того, чтобы кодировать в несколько потоков картинки 480p, установите значение

Code Block
themeRDark
video_encoder_second_thread_threshold=408950

Определение индентификатора профиля кодирования H264

В сборке 5.2.1644 добавлен инструмент, при помощи которого можно определить идентификатор профиля кодирования H264 по параметрам кодирования:

Code Block
languagebash
themeRDark
sudo bash /usr/local/FlashphonerWebCallServer/tools/h264_profile_tool.sh --config=codec,resolution,profile,level[,preset]

Здесь

Например, для следующих параметров

Code Block
languagebash
themeRDark
sudo bash /usr/local/FlashphonerWebCallServer/tools/h264_profile_tool.sh --config="OPENH264,1280x720,66,31,ultrafast"

на консоль будет выведен идентификатор

Code Block
languagebash
themeRDark
42c01f <= "OPENH264,66,31,ultrafast,1280x720"

Также при помощи инструмента можно получить список всех поддерживаемых профилей для всех кодировщиков

Code Block
languagebash
themeRDark
sudo bash /usr/local/FlashphonerWebCallServer/tools/h264_profile_tool.sh --catalog --output=catalog.csv

или для определенного кодировщика

Code Block
languagebash
themeRDark
sudo bash /usr/local/FlashphonerWebCallServer/tools/h264_profile_tool.sh --catalog --encoders=OPENH264 --output=openH264.csv

Список выводится в файл в формате CSV

Code Block
themeRDark
codec,profile,level,preset,resolution,profile-level-id

например

Code Block
themeRDark
FF,0,0,fast,320x180,42c01e
...

Если библиотеки кодировщика нет в поставке сервера, то при запросе  идентификатора профиля инструмент выведет ошибку

Code Block
themeRDark
Unable to create instance of encoder: FF

а при запросе списка профилей выведет ошибку

Code Block
themeRDark
Unsupported encoder: FF

и создаст CSV файл нулевой длины.

Известные проблемы

1. Настройка качества кодирования не применяется при использовании OpenH264Симптомы: качество картинки в плеере не изменяется при различных значениях настройки

Симптомы: качество картинки в плеере не изменяется при различных значениях настройки constraints.video.quality , например

Code Block
themeRDark
constraints.video.quality=5

не отличается от 

Code Block
themeRDark
constraints.video.quality

...

=20

Решение: не использовать кодирование на базе OpenH264, поскольку управление CRF в нем не поддерживается

Code Block
themeRDark
constraints.video.quality=5

не отличается от 

encoder_priority=FF

2. Если файл водяного знака поврежден, либо файл отсутствует, используется водяной знак по умолчанию (черная картинка)

Симптомы: при добавлении водяного знака в выходном потоке черный экран, в серверном логе сообщение

Code Block
themeRDark
constraints.video.quality=20Wrong watermark file format. Should be PNG.

Решение: не использовать кодирование на базе OpenH264, поскольку управление CRF в нем не поддерживается

...

themeRDark

...

использовать только PNG файл с корректной структурой для добавления водяного знака.