SDK для видеозвонков / чата для Android 1080p?

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

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

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

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

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

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


person Richard Copperwaite    schedule 16.06.2020    source источник
comment
Я не видел, чтобы Skype или Hangouts работали быстрее 30 кадров в секунду. И, как вы сказали, обычно они не работают с разрешением выше 720p. Я думаю, вы правы, что декодирование видео в текстуру - это то, что необходимо, что, конечно, будет работать только тогда, когда графический процессор поддерживает видеокодек и текущие параметры. Однако я почти уверен, что Chrome на Android использует кодек с аппаратным ускорением для вызовов WebRTC. Я действительно не знаю, что предложить, кроме как посмотреть, как Gstreamer делает WebRTC. Может быть, его реализация вам поможет.   -  person Brad    schedule 16.06.2020
comment
Это нереально с 1080P 60fps на Android. Однако это может быть достигнуто на Macbook Pro ... Я также работаю над своим собственным плагином Live Stream FMETP STREAM. И я скажу, что это узкое место Android в 2020 году ...   -  person imleoson    schedule 16.06.2020
comment
Чтобы уточнить, мне не нужен видеопоток со скоростью 60 кадров в секунду, 24 кадра в секунду было бы хорошо, но мне нужно, чтобы мое приложение работало со скоростью минимум 60 кадров в секунду, поэтому мне нужно, чтобы текстура загружалась в графический процессор без остановки потока рендеринга - это моя проблема .   -  person Richard Copperwaite    schedule 16.06.2020
comment
В моем собственном проекте я использую решение для асинхронного кодирования для повышения производительности. Пока он не блокирует основной поток, fps будет соболиным.   -  person imleoson    schedule 18.06.2020


Ответы (1)


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

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

person Richard Copperwaite    schedule 19.06.2020