Agora多对一直播

时间:2019-12-21 10:51:47

标签: agora.io

我有一个要求,即不同的用户将视频从他们的摄像机流传输到服务器,并且将有一个仪表板,管理员可以在其中实时查看所有流,例如监视的工作方式?我认为视频广播可以提供帮助,但是文档显示它可以实现一对多和多对多的实时流式传输,但是没有提到多对一的情况。我该如何实现?

1 个答案:

答案 0 :(得分:0)

您描述的用例将以与多对多广播相同的方式实现。

对于您的用例,您将所有摄像机流作为广播人加入频道,然后“监视”用户将作为观众加入。观众成员订阅所有远程流,而不必广播自己的流。

[更新]
使用Agora的SDK,您可以使用外部视频源,您只需要自己管理即可。如果您使用的是自定义视频源,则无需使用RTMP。

IVideoFrameConsumer mConsumer;
boolean mHasStarted;

// Create a VideoSource instance.
VideoSource source = new VideoSource() {
    @Override
    public int getBufferType() {
        // Get the current frame type. 
        // The SDK uses different methods to process different frame types.
        // If you want to switch to another VideoSource type, create another instance.
        // There are three video frame types: BYTE_BUFFER(1); BYTE_ARRAY(2); TEXTURE(3)
        return BufferType.BYTE_ARRAY;
    }

    @Override
     public boolean onInitialize(IVideoFrameConsumer consumer) {
        // Consumer was created by the SDK.
        // Save it in the lifecycle of the VideoSource.
        mConsumer = consumer;
    }

    @Override
     public boolean onStart() {
        mHasStarted = true;
    }

    @Override
      public void onStop() {
        mHasStarted = false;
    }

    @Override
     public void onDispose() {
        // Release the consumer.
        mConsumer = null;
    }
};

// Change the inputting video stream to the VideoSource instance.
rtcEngine.setVideoSource(source);

// After receiving the video frame data, use the consumer class to send the data.
// Choose differnet methods according to the frame type.
// For example, the current frame type is byte array, i.e. NV21.
if (mHasStarted && mConsumer != null) {
    mConsumer.consumeByteArrayFrame(data, AgoraVideoFrame.NV21, width, height, rotation, timestamp);
}

完整指南:https://docs.agora.io/en/Video/custom_video_android?platform=Android