他人视频流画面

更新时间: 2021-12-29 17:15:41

本文介绍连麦中与他人视频流画面相关的操作以及对应的消息通知。

说明

  • 观看他人摄像头视频流画面之前,需要主动订阅视频流,不订阅则不会进行拉流,无法观看视频流。

  • 通过拉取连麦中的成员列表,可以获得其他人的摄像头开关状态。

  • 开关摄像头(包括本人操作)会收到对应的消息通知。

订阅他人摄像头视频流画面API使用示例

iOS端(Objective-C):

// 订阅/取消订阅他人摄像头视频流画面
id<AIRBRoomChannelProtocol> room = [[AIRBRoomEngine sharedInstance] getRoomChannelWithRoomID:@"xxx"]
[room.rtc subscribeRemoteVideoStream:(BOOL)sub type:(AIRBRTCVideoStreamType)type fromUser:(NSString*)userID;

Android端(Java):

// 订阅/取消订阅他人摄像头视频流画面
rtcService.configRemoteCameraTrack(uid, false, enable);

/**
 * 订阅远端相机流,默认为订阅大流,手动订阅
 *
 * @param userId       用户Id
 * @param isMainStream true 优先订阅大流,false订阅小流
 * @param enable       true 订阅远端相机流,false停止订阅无端相机流
 */
//void configRemoteCameraTrack(String userId, boolean isMainStream, boolean enable);

Windows端(c++):

auto room_ptr = alibaba::meta_space::MetaSpace::GetInstance()->GetRoomInstance(room_id);
auto rtc_plugin = std::dynamic_pointer_cast<IRtc>(room_ptr->GetPlugin(PluginRtc));
std::string uid;
HWND hwnd;
//订阅并观看
rtc_plugin->ShowStream(uid, hwnd);

观看他人摄像头视频流画面API使用示例

iOS端(Objective-C):

// 观看他人摄像头视频流画面,需要通过实现AIRBRTCProtocol的AIRBRTCDelegate中的如下方法和事件来通知,
- (void) onAIRBRTCRemotePeerViewAvailable:(NSString*)userID view:(UIView*)view type:(AIRBRTCVideoViewType)type{
    if (type == AIRBRTCVideoViewTypeCamera){
        // 订阅
        [room.rtc subscribeRemoteVideoStream:YES type:(AIRBRTCVideoStreamTypeHigh)type fromUser:(NSString*)userID;
        // 将他人摄像头视频流画面添加到需要的地方
        [viewHolder addSubview:view]; 
    }
}

Android端(Java):

// 通过调用RtcService.addEventHandler添加的事件监听器的回调触发来判断操作状态
rtc.addEventHandler(new SampleRtcEventHandler(){
    @Override
    public void onRtcStreamIn(RtcStreamEvent event) {
        // 观看他人摄像头视频流画面
    }
});

Windows端(c++):

auto room_ptr = alibaba::meta_space::MetaSpace::GetInstance()->GetRoomInstance(room_id);
auto rtc_plugin = std::dynamic_pointer_cast<IRtc>(room_ptr->GetPlugin(PluginRtc));
std::string uid;
HWND hwnd;
//订阅并观看
rtc_plugin->ShowStream(uid, hwnd);

开关摄像头相关消息通知示例

iOS端(Objective-C):

// 开关摄像头的消息,需要通过实现AIRBRoomChannelProtocol的AIRBRoomChannelDelegate中的如下方法和事件来通知,
- (void) onAIRBRoomChannelEvent:(AIRBRoomChannelEvent) event info:(NSDictionary*)info{
    switch (event) {
        case AIRBRoomChannelEventMessageReceived:{
            AIRBRoomChannelMessageType messageType = [[info valueForKey:@"type"] integerValue];
            switch (messageType) {
                case AIRBRoomChannelMessageTypeOnCameraMuted:{
                    NSData *turnData = [[info valueForKey:@"data"] dataUsingEncoding:NSUTF8StringEncoding];
                    NSDictionary *dataDic = [NSJSONSerialization JSONObjectWithData:turnData options:NSJSONReadingMutableLeaves error:nil];
                    // 自定义处理
                }
                break;
                .....
            }
        }
        break;
        .....
    }
}

Android端(Java):

// 开关摄像头的消息
// 通过调用RtcService.addEventHandler添加的事件监听器的回调触发来判断操作状态
rtc.addEventHandler(new SampleRtcEventHandler(){
    @Override
    public void onRtcUserVideoMuted(String uid) {
        // uid摄像头关闭
    }

    @Override
    public void onRtcUserVideoEnable(String uid) {
        // uid摄像头开启
    }
});

Windows端(c++):

//继承RtcEventListener,并重写OnUserVideoMuted方法
virtual void OnUserVideoMuted(const std::string & uid, bool is_mute) override {

}