Create a WebRTC VideoTrack with a "custom" Capturer on Android with libjingle

How to use a "custom" video capturer to create a VideoTrack and provide frames?

The classic approach to create a VideoTrack is:

1 - Get a VideoCapturer instance

VideoCapturer capturer = VideoCapturer.create(name);

2 - Create a VideoSource

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

3 - Create a VideoTrack using the video source

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

4 - Add the track to the MediaStream


I was wondering if there is a way to change step one. Instead of using the native Capturer instance, use an Android one, and provide the frames to the VideoTrack using the callback:

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

Any suggestions?


The easiest way (although a bit "hacky") to do this is to copy the source of RTCVideoCapturer to a local class withing your project and just use that local class. You can now edit the class to suit your needs. Even when not copying the file but actually building your own, it's probably better to copy large parts of the existing capturer than to reinvent the wheel.