Android上WebRTC的自定义视频源

问题描述 投票:3回答:1

概述

我想使用自定义视频源通过WebRTC Android实施对视频进行实时流式传输。如果我理解正确,则现有的实现仅支持Android手机上的前置和后置摄像头。在这种情况下,以下类是相关的:

当前正在使用Android手机上的前置摄像头,我正在执行以下步骤:

CameraEnumerator enumerator = new Camera1Enumerator(false);
VideoCapturer videoCapturer = enumerator.createCapturer(deviceName, null);
VideoSource videoSource = peerConnectionFactory.createVideoSource(false);
videoCapturer.initialize(surfaceTextureHelper, this.getApplicationContext(), videoSource.getCapturerObserver());
VideoTrack localVideoTrack = peerConnectionFactory.createVideoTrack(VideoTrackID, videoSource);

我的场景

我有一个回调处理程序,它从自定义视频源接收字节数组中的视频缓冲区:

public void onReceive(byte[] videoBuffer, int size) {}

我将如何发送此字节数组缓冲区?我不确定该解决方案,但我想我必须实现自定义VideoCapturer

现有问题

[This question可能是相关的,尽管我没有使用libjingle库,只有本地WebRTC Android包。

类似问题/文章:

java android streaming webrtc webrtc-android
1个回答
0
投票

有两种可能的解决方案:

  1. 实施自定义VideoCapturer,并在VideoFrame处理程序中使用byte[]流数据创建onReceive。实际上,存在一个很好的FileVideoCapturer示例,它实现了VideoCapturer
  2. 简单地从VideoFrame构造NV21Buffer,这是从我们的字节数组流数据创建的。然后,我们只需要使用我们先前创建的VideoSource来捕获该帧。示例:
public void onReceive(byte[] videoBuffer, int size, int width, int height) {
    long timestampNS = TimeUnit.MILLISECONDS.toNanos(SystemClock.elapsedRealtime());
    NV21Buffer buffer = new NV21Buffer(videoBuffer, width, height, null);

    VideoFrame videoFrame = new VideoFrame(buffer, 0, timestampNS);
    videoSource.getCapturerObserver().onFrameCaptured(videoFrame);

    videoFrame.release();
}
© www.soinside.com 2019 - 2024. All rights reserved.