Пользовательский пример кода Agora дает ошибку - PullRequest
0 голосов
/ 11 апреля 2020

Я пытаюсь настроить пользовательский источник видео для видеопотока в Agora для Unity, следуя инструкциям центра разработчиков Agora здесь (и, в частности, пример кода внизу):

https://docs.agora.io/en/Video/custom_video_unity?platform=Unity

ЭТОТ КОД работает. Я могу успешно отправить видеопоток и посмотреть его на другом устройстве, и он выглядит правильно.

Однако , консоль Unity сообщает об ошибке в каждом отдельном кадре, говоря:

D3D11 неподдерживаемый формат текстур назначения целевых файлов ReadPixels (14)

Документация Unity для Texture2D.ReadPixels говорит, что он работает на форматах текстур RGBA32, ARGB32 и RGB24, но в примере Agora используется текстура в формате BGRA32.

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

Я попытался настроить ожидаемую текстуру на конце Агоры с помощью изменение этой строки в примере:

externalVideoFrame.format = ExternalVideoFrame.VIDEO_PIXEL_FORMAT.VIDEO_PIXEL_BGRA;

Но ... нет соответствующего определения для VIDEO_PIXEL_RGBA. Доступны следующие параметры: VIDEO_PIXEL_UNKNOWN, VIDEO_PIXEL_I420, VIDEO_PIXEL_BGRA, VIDEO_PIXEL_NV12, VIDEO_PIXEL_I422

Итак ... мое приложение работает правильно, но я тону в сообщениях об ошибках сомнительной важности, которые, похоже, вызывают подозрения, вызывающие сомнительную значимость, которая, кажется, вызывает у меня сомнительную причину, которая, похоже, вызывает подозрения, вызывающие сомнительную значимость, которая, похоже, вызывает недоумение, которое, похоже, вызывает сомнение, которое, похоже, вызывает сомнение, которое, кажется, вызывает сомнение. для разработки и отладки в будущем.

Что я могу сделать?

1 Ответ

0 голосов
/ 13 апреля 2020

Для проблемы с инвертированным цветом убедитесь, что у вас на ресивере одинаковый формат кодирования. Если вы используете скрипт SDK VideoSurface.cs, измените строку, в которой он создает текстуру (около строки 172), где она должна выглядеть следующим образом: nativeTexture = new Texture2D((int)defWidth, (int)defHeight, TextureFormat.BGRA32, false);

(Это был RGBA32 в стандартном коде SDK) .

...