本文介绍连麦中与他人视频流画面相关的操作以及对应的消息通知。
说明
观看他人摄像头视频流画面之前,需要主动订阅视频流,不订阅则不会进行拉流,无法观看视频流。
通过拉取连麦中的成员列表,可以获得其他人的摄像头开关状态。
开关摄像头(包括本人操作)会收到对应的消息通知。
订阅他人摄像头视频流画面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 {
}
该文章对您有帮助吗?