【问题标题】:Custom video source for WebRTC on AndroidAndroid 上 WebRTC 的自定义视频源
【发布时间】:2020-07-24 09:34:14
【问题描述】:

概述

我想使用自定义视频源通过 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 包。

类似的问题/文章:

【问题讨论】:

  • 您想将视频文件流式传输到 WebRTC(例如聊天视频中的假人?仅作为示例)或广播现有的广播公司?你需要它作为 android 应用程序吗?我是否会提供一种挂钩现有应用程序的方法? android标签相关吗?因为你提供了 chromium 的源代码
  • 我想流式传输现有的视频源,我通过onReceive 方法接收数据。我需要在 Android 应用程序中处理它,因为该设备通过 USB 电缆连接到手机。源代码托管在 chromium 上,但它适用于 Android 应用程序。似乎整个 WebRTC 项目都托管在那里。
  • 请解释一下,您要将现有视频源流式传输到哪里?例如,您从 URL 接收字节,您的 android 手机将它们解密,因此您会将它们视为帧,您想将它们发送到哪里?
  • @JimWest 这是一个使用 WebRTC 的 P2P 连接。这不是向另一端流式传输到客户端的问题,这是 WebRTC Java 实现的问题,显然不支持除现有前置/后置摄像头之外的外部视频源进行处理。
  • 您想将本地视频而不是摄像头传输到正在运行的视频聊天中吗?不清楚你想要实现什么

标签: java android streaming webrtc webrtc-android


【解决方案1】:

这个问题有两种可能的解决方案:

  1. 实现自定义VideoCapturer 并在onReceive 处理程序中使用byte[] 流数据创建VideoFrame。其实有一个很好的例子FileVideoCapturer,它实现了VideoCapturer
  2. 简单地从NV21Buffer构造VideoFrame,它是从我们的字节数组流数据创建的。然后我们只需要使用我们之前创建的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();
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-09-24
    • 1970-01-01
    • 1970-01-01
    • 2015-11-15
    • 2021-04-13
    • 1970-01-01
    • 2019-02-20
    相关资源
    最近更新 更多