Создайте WebRTC VideoTrack с помощью настраиваемого Capturer на Android с libjingle

Как использовать «настраиваемый» видеозахват для создания VideoTrack и предоставления кадров?

Классический подход к созданию VideoTrack:

1 - Получите экземпляр VideoCapturer

VideoCapturer capturer = VideoCapturer.create(name);

2 - Создайте источник видео

VideoSource videoSource = peerconnectionFactory.createVideoSource(capturer, videoConstraints);

3 - Создайте VideoTrack, используя источник видео

VideoTrack videoTrack = peerconnectionFactory.createVideoTrack("Label", videoSource);

4 - Добавьте трек в MediaStream


Мне было интересно, есть ли способ изменить первый шаг. Вместо использования собственного экземпляра Capturer используйте экземпляр Android и передайте кадры в VideoTrack с помощью обратного вызова:

public void onPreviewFrame(byte[] data, Camera camera) {
   // provide the frames to the VideoTrack
}

Какие-либо предложения?


person Manza    schedule 14.05.2014    source источник
comment
Не знаю, чего вы хотите достичь. На самом деле это не встроенный захватчик. Он использует класс камеры Android для захвата, а кадр передается в собственную библиотеку. Может быть, код, который вы используете, находится внутри банки.   -  person Biraj Zalavadia    schedule 01.08.2014
comment
В jar-файле есть класс VideoCaptureAndroid.java, из которого кадры захватываются и передаются в нативную библиотеку.   -  person Biraj Zalavadia    schedule 01.08.2014
comment
@BirajZalavadia, да, я видел это, но как только я это вспомнил, все важные методы были частными, поэтому казалось, что его нужно было реализовать   -  person Manza    schedule 01.08.2014
comment
да, вы правы, но если вы используете исходный код, а не jar, вы можете изменить его, как хотите.   -  person Biraj Zalavadia    schedule 01.08.2014
comment
Чего вы хотите добиться, перехватывая кадры?   -  person Biraj Zalavadia    schedule 01.08.2014
comment
В основном я хочу иметь возможность изменять, редактировать или добавлять вручную кадры к видеодорожке и, в конечном итоге, предоставлять кадр для внешнего источника видео (например, веб-камеры)   -  person Manza    schedule 01.08.2014
comment
@Manza Вы нашли способ сделать это?   -  person Andro    schedule 14.06.2017
comment
@Manza Тебе удалось это сделать?   -  person W.M.    schedule 18.03.2020
comment
@Manza Привет, ты успешно справился с этим? (через 6 лет :))   -  person ch271828n    schedule 12.06.2020
comment
К сожалению нет :(   -  person Manza    schedule 18.06.2020


Ответы (1)


Самый простой способ (хотя и немного «хакерский») сделать это - скопировать источник RTCVideoCapturer в локальный класс внутри вашего проекта и просто использовать этот локальный класс. Теперь вы можете отредактировать класс в соответствии со своими потребностями. Даже если вы не копируете файл, а создаете свой собственный, вероятно, лучше скопировать большие части существующего модуля захвата, чем изобретать велосипед.

person lorenzo373    schedule 06.02.2015