Локальный видеопоток не отображается при использовании Camera2 API - PullRequest
0 голосов
/ 20 января 2019

Все остальное в моем приложении выглядит нормально, как удаленные, так и локальные потоки отображаются нормально, если я использую Camera1 API. Но когда я пытаюсь использовать Camera2 API, локальный видеопоток больше не отображается, вместо этого отображается черный экран. Локальный поток все еще отображается на удаленном конце, и в журнале также нет сообщений об ошибках. API - единственное, что я изменил в своем коде. Кто-нибудь знает, что здесь происходит?

Я столкнулся с подобной проблемой здесь , но она устарела и не подлежит тестированию, поскольку setVideoHwAccelerationOptions() устарела, а связанные с ней вещи обрабатываются закодированными фабриками, как описано здесь .

Вот мой код для строительства этих фабрик, на случай, если это будет полезно:

final VideoEncoderFactory encoderFactory;
final VideoDecoderFactory decoderFactory;
encoderFactory = new DefaultVideoEncoderFactory(
    rootEglBase.getEglBaseContext(), true /* enableIntelVp8Encoder */, false);
decoderFactory = new DefaultVideoDecoderFactory(rootEglBase.getEglBaseContext());

1 Ответ

0 голосов
/ 21 января 2019

Проблема решена!Оказывается, все, что связано с камерой и рендерингом, должно иметь один и тот же экземпляр EglBase и его context.Я создал несколько экземпляров при инициализации соединения.

Что касается причины, по которой локальный видеопоток не отображается только при использовании Camera2 API, я полагаю, потому что Camera2Enumerator - это тот, который требует контекста, вероятно, EglBaseContext, тогда как Camera1не требует этого(Я не уверен в этом, поправьте меня, если я ошибаюсь.)

В любом случае, TL; DR : проверьте код и убедитесь, что вы используете один EglBase экземпляр для всех связанных операций.

...