Главная страница \ Статьи \ Метод проб и ошибок \ Разное \ Добавляем поддержку VP8 в Asterisk 1.8

Добавляем поддержку VP8 в Asterisk

Задался целью соединить между собой разные устройства (iPhone, планшет, PC) видеочатом между собой. Но возникла проблема при работе через браузер: Asterisk не поддерживает протокол VP8, которые реализуется в некоторых клиентах и веб-браузерах.

 По первому же запросу asterisk vp8 support был найден патч [https://github.com/AutoStatic/asterisk-vp8] к Asterisk 11. Стоит сказать, что патч служит для того, чтобы Asterisk разрешил взаимодействие с использованием кодека VP8 и только, т.е. оба клиента должны поддерживать кодек VP8. На данный момент я знаю, что этот протокол поддерживают: Bria for iOS, Bria for Andriod, Google Chrome. Чтобы не было каких-либо страшных накладок разберём патч по действиям:

channels/chan_sip.c

Ищем в указанном файле строку "We have a rtpmap", нам нужно найти второе вхождение. У меня это 10090 строка. Далее нужно заменить условие:

if (!strncasecmp(mimeSubtype, "H26", 3) || !strncasecmp(mimeSubtype, "MP4", 3)) {

на

if (!strncasecmp(mimeSubtype, "H26", 3) || !strncasecmp(mimeSubtype, "MP4", 3) || !strncasecmp(mimeSubtype, "VP8", 3)) {
 

channels/sip/include/sip.h

А вот здесь уже пошли различия. Если в 11 версии список совместимостей генерируется в функции, то в 1.8 задаётся при помощи define.

Ищем "DEFAULT_CAPABILITY", у меня это 224 строка и добавляем в конец:

#define DEFAULT_CAPABILITY (AST_FORMAT_ULAW | AST_FORMAT_TESTLAW | AST_FORMAT_ALAW | AST_FORMAT_GSM | AST_FORMAT_H263 | AST_FORMAT_VP8)

Здесь всё.

channels/console_video.c

Ищём второе вхождение строки "console_video_formats" (у меня это 149 строка) и добавляем в список поддерживаемых форматов AST_FORMAT_VP8:

int console_video_formats =
AST_FORMAT_H263_PLUS | AST_FORMAT_H263 |
AST_FORMAT_MP4_VIDEO | AST_FORMAT_H264 | AST_FORMAT_H261 |
AST_FORMAT_VP8;

Здесь всё.

include/asterisk/frame.h

И снова не совпадение. В 11 менялся файл format.h, а в 1.8 - этот. Ищем "MPEG4 Video" и сразу после него добавляем:

/*! VP8 Video */
#define AST_FORMAT_VP8 (1ULL << 23)

И здесь всё.

main/frame.c

В общем в 1.8 Asterisk почти всё по-другому. Снова ищем "MPEG4 Video" (122 строка) и после него добавляем:

{ AST_FORMAT_VP8, "vp8", 0, "VP8 Video" },

И здесь всё.

main/rtp_engine.c

Ну и последний файл. Ищем "AST_FORMAT_H264" (строка 128) и после неё, до MPEG4, добавляем:

{{1, AST_FORMAT_VP8}, "video", "VP8", 90000},

Ещё раз ищем "AST_FORMAT_H264" (строка 172) и после неё добавляем:

[100] = {1, AST_FORMAT_VP8},

Всё.

Сборка

Теперь собираем Asterisk и наслаждаемся поддержкой VP8.

Готовый патч для поддержки VP8 для Asterisk 1.8.20.1.

Заметки

Видео у меня завелось между двумя клиентами Bria только с выключенными всеми остальными кодеками (а именно с выключенным H264) и работающим VP8.  Но завелось и заработало. Теперь настала очередь поднять WebSocket-сервер и соединиться из-под Google Chrome.

Вопросы? Предложения?

Natalya [10.04.2013]
I've been lokoing for a post like this for an age
Powered by Elise