Локальный видео рендерер в Android WebRTC - PullRequest
0 голосов
/ 11 мая 2018

Я использую эту библиотеку: https://bintray.com/google/webrtc/google-webrtc

То, чего я хочу достичь (по крайней мере, в начале моего проекта), это рендерить видео локально. Я использую это руководство (единственное в Интернете) https://vivekc.xyz/getting-started-with-webrtc-for-android-daab1e268ff4. К сожалению, последняя строка кода больше не актуальна. Конструктор нуждается в обратном вызове, который я понятия не имею, как реализовать:

localVideoTrack.addRenderer(new VideoRenderer(i420Frame -> { // no idea what to put here }));

Мой код точно такой же, как в опубликованном уроке. Это самый первый шаг к ознакомлению с технологией WebRTC в Android, которую я не могу понять. Моя камера захватывает видео, потому что я вижу его в своем журнале:

I/org.webrtc.Logging: CameraStatistics: Camera fps: 28.

Основная проблема заключается в том, что я понятия не имею, как передать его моему SurfaceViewRenderer через обратный вызов. Кто-нибудь сталкивался с этой проблемой? Я буду очень признателен за любую помощь или предложения.

Вот официальный пример приложения, которое является единственным источником, но оно сделано не так, как в учебнике, оно намного сложнее: https://webrtc.googlesource.com/src/+/master/examples/androidapp/src/org/appspot/apprtc

1 Ответ

0 голосов
/ 20 мая 2018

Вы правы, API больше не соответствует этому в учебнике, но он близок.

VideoTrack имеет метод addRenderer(VideoRenderer renderer), который требует создания VideoRenderer с параметром SurfaceViewRenderer. Но это больше невозможно, поэтому вместо этого вы должны использовать метод addSink(VideoSink sink) VideoTrack. Объект SurfaceViewRenderer реализует метод VideoSink onFrame(VideoFrame frame), чтобы сделать эту работу.

VideoTrack videoTrack = utility.createVideoTrack();
videoTrack.addSink(this.localSurfaceViewRenderer);

Я использовал тот же официальный пример приложения в качестве ссылки, чтобы прийти к такому выводу, и он прекрасно работает для меня.

...