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

AndroidWebrtcLibjingle

Android Problem Overview


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?

Android Solutions


Solution 1 - Android

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.

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionManzaView Question on Stackoverflow
Solution 1 - Androidlorenzo373View Answer on Stackoverflow