Android 1080p видео звонок / чат SDK? - PullRequest
2 голосов
/ 16 июня 2020

Я пытаюсь встроить поток видеочата 1080p в приложение Unity на Android.

Я пробовал использовать Agora.io для этой цели, но текущий версия Agora для Unity полностью работает на ЦП, а копирование текстуры 1080p с ЦП на ГП занимает 20 мсек на моем устройстве Android - слишком медленно, чтобы поддерживать постоянную частоту кадров 60 кадров в секунду в моем приложении. В идеале мне нужна либо операция копирования, чтобы не блокировать поток рендеринга, либо мне нужно, чтобы копирование происходило менее чем за 10 мс, либо мне нужно, чтобы декодирование происходило полностью аппаратно.

Я немного покопался в как другие приложения для видеоплеера достигают этого, и обычно они используют Android MediaCode c или ExoPlayer для декодирования видео непосредственно в текстуру на оборудовании. Однако это не представляется возможным для приложения видеочата, потому что процесс кодирования видеопотока в один из Android -поддерживаемых форматов приведет к слишком большой задержке.

I Мне любопытно, как приложения, такие как Skype и Hangouts, достигают этого - но я подозреваю, что они либо работают со скоростью 30 кадров в секунду, либо ограничивают разрешение видео до 720p или ниже.

Я также рассматривал возможность создания собственного протокола видеочата, используя что-то вроде Базовое сжатие текстур для распаковки текстур на GPU, а не на CPU, но очень мало информации о том, как компилировать и интегрировать Basis в приложение Android.

Итак, мой вопрос: знает ли кто-нибудь о SDK для видеочата, который предлагает такую ​​производительность и точность без чрезмерного объема работы по разработке?

1 Ответ

0 голосов
/ 19 июня 2020

Итак, как оказалось, мое профилирование было совершенно неправильным. Копирование текстуры вовсе не было задержкой - на самом деле декодирование текстуры и копирование на графический процессор занимали около 3 мс, мой профилировщик просто сообщал неверные тайминги.

Настоящим узким местом был тот факт, что я пытался визуализировать изображение на поверхности треугольника 250K. Оказывается, при нормальных обстоятельствах мое устройство Android могло визуализировать поверхность только из 100 тыс. Треугольников с помощью GLES. Однако после перехода на Vulkan, убедившись, что треугольники соединены ребрами (резко уменьшив буфер индекса me sh) и выполнив небольшую оптимизацию me sh, я смог увеличить свой бюджет треугольника до 400 КБ и добиться стабильного кадра 60 кадров в секунду. скорость с потоком видео-чата Agora 1080p 30 кадров в секунду.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...