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