所需工具yun2win實時音視頻IOS端sdk
下載sdk地址:https://github.com/yun2win/yun2win-sdk-iOS/tree/master/Y2W_IM_SDK
yun2win官網:www.yun2win.com
簡介
Y2W_RTC_SDK集成多種實時通訊能力:
- 實時音頻
- 實時視頻
- 屏幕共享
- 協作白板
開發流程
- 發起方使用Y2WRTCManager對象的createChannel方法創建Y2WRTCChannel對象
- 接收方使用Y2WRTCManager對象的getChannel方法獲取Y2WRTCChannel對象
- 給Y2WRTCChannel添加委托對象,並實現Y2WRTCChannelDelegate協議方法
- 然后調用join方法加入頻道
- 調用leave方法離開頻道
- 根據需求調用openAudio開啟音頻連接
- 根據需求調用openVideo開啟視頻連接
代碼示例
- 創建及獲取頻道
復制調用以下代碼創建頻道對象:
Y2WRTCManager *manager = [[Y2WRTCManager alloc] init]; manager.token = token; manager.memberId = uid; manager.memberName = name; manager.memberAvatarUrl = avatarUrl; [manager createChannel:^(NSError *error, Y2WRTCChannel *channel) { // 獲取到頻道對象,根據業務需求直接使用或跳轉頁面使用 }];復制調用以下代碼獲取頻道對象:Y2WRTCManager *manager = [[Y2WRTCManager alloc] init]; manager.channelId = channelID; manager.token = token; manager.memberId = uid; manager.memberName = name; manager.memberAvatarUrl = avatarUrl; [manager getChannel:^(NSError *error, Y2WRTCChannel *channel) { // 獲取到頻道對象,根據業務需求直接使用或跳轉頁面使用 }];提醒
發起方創建頻道后,需要在上層業務自行轉發channelID,以便加入同一頻道。
- 添加回調和進入頻道
復制
channel.delegate = self; [channel join]; - 開啟語音功能
復制
/** * 開啟音頻連接 */ [channel openAudio]; /** * 開啟揚聲器 */ [channel setSpeaker:YES]; - 開啟視頻功能
復制
/** * 開啟視頻連接 */ [channel openVideo]; /** * 切換到后置攝像頭 */ [channel useBackCamera:YES]; - 開啟屏幕共享
復制
/** * 暫不支持移動端發起,接收時會進行回調 */ - (void)channel:(Y2WRTCChannel *)channel didOpenScreenOfMember:(Y2WRTCMember *)member;
Y2WRTCManager
用於發起或加入頻道
屬性
復制
@property (nonatomic, copy) NSString *channelId; // 頻道ID,發起方會自動獲取,加入時需要填入發起方獲取的ID @property (nonatomic, copy) NSString *memberId; // 頻道連接中的成員ID @property (nonatomic, copy) NSString *token; // 用戶token
方法
復制
/** * 創建並加入頻道 * * @param block 發起失敗會返回錯誤對象,成功返回頻道對象,使用此對象進行操作和監聽回調 */ - (void)createChannel:(void(^)(NSError *error, Y2WRTCChannel *channel))block; /** * 加入頻道 * * @param block 加入失敗會返回錯誤對象,成功返回頻道對象,使用此對象進行操作和監聽回調 */ - (void)getChannel:(void(^)(NSError *error, Y2WRTCChannel *channel))block;
Y2WRTCChannel
用於管理頻道
屬性
復制
@property (nonatomic, copy) NSString *channelId; // 頻道ID @property (nonatomic, weak) Y2WRTCMember *currentMember; // 當前成員 @property (nonatomic, weak) id<Y2WRTCChannelDelegate> delegate; // 委托對象
方法
- 基礎功能
復制
/** * 獲取頻道內的當前成員 * * @return 成員數組 */ - (NSArray<Y2WRTCMember *> *)getMembers; /** * 加入頻道 */ - (void)join; /** * 離開頻道 */ - (void)leave;提醒
調用join方法時也會觸發- (void)channel:(Y2WRTCChannel *)channel didJoinMember:(Y2WRTCMember *)member回調。
- 音頻功能
復制
/** * 開啟音頻連接 */ - (void)openAudio; /** * 關閉音頻功能(關閉后無法發送和接受音頻) */ - (void)closeAudio; /** * 是否開啟揚聲器 * * @param speaker bool */ - (void)setSpeaker:(BOOL)speaker; /** * 當前是否使用的揚聲器 * * @return bool */ - (BOOL)speakerEnabled; /** * 是否設置麥克風靜音 * * @param mute bool */ - (void)setMicMute:(BOOL)mute; /** * 麥克風是否靜音狀態 * * @return bool */ - (BOOL)micMuteEnabled; - 視頻功能
復制
/** * 開啟視頻功能 */ - (void)openVideo; /** * 關閉視頻功能(關閉后無法發送和接受視頻) */ - (void)closeVideo; /** * 切換前后攝像頭 * * @param use YES為使用后置攝像頭 */ - (void)useBackCamera:(BOOL)use; /** * 當前是否使用的后置攝像頭 * * @return YES為后置攝像頭,NO為前置攝像頭 */ - (BOOL)isUseBackCamera;
Y2WRTCChannelDelegate
Y2WRTCChannel的委托對象需要實現的協議方法,用於頻道內事件的回調
方法
復制
/** * 有成員加入此頻道 * * @param channel 頻道對象 * @param member 成員對象 */ - (void)channel:(Y2WRTCChannel *)channel didJoinMember:(Y2WRTCMember *)member; /** * 有成員離開此頻道 * * @param channel 頻道對象 * @param member 成員對象 */ - (void)channel:(Y2WRTCChannel *)channel didLeaveMember:(Y2WRTCMember *)member; /** * 有成員開啟了音頻 * * @param channel 頻道對象 * @param member 成員對象 */ - (void)channel:(Y2WRTCChannel *)channel didOpenAudioOfMember:(Y2WRTCMember *)member; /** * 有成員關閉了音頻 * * @param channel 頻道對象 * @param member 成員對象 */ - (void)channel:(Y2WRTCChannel *)channel didCloseAudioOfMember:(Y2WRTCMember *)member; /** * 有成員關閉或開啟了麥克風 * * @param channel 頻道對象 * @param member 成員對象 */ - (void)channel:(Y2WRTCChannel *)channel didSwitchMuteAudioOfMember:(Y2WRTCMember *)member; /** * 音頻連接出現錯誤 * * @param channel 頻道對象 * @param error 錯誤對象 */ - (void)channel:(Y2WRTCChannel *)channel onAudioError:(NSError *)error; /** * 有成員開啟了視頻 * * @param channel 頻道對象 * @param member 成員對象 */ - (void)channel:(Y2WRTCChannel *)channel didOpenVideoOfMember:(Y2WRTCMember *)member; /** * 有成員關閉了視頻 * * @param channel 頻道對象 * @param member 成員對象 */ - (void)channel:(Y2WRTCChannel *)channel didCloseVideoOfMember:(Y2WRTCMember *)member; /** * 有成員關閉或開啟了攝像頭 * * @param channel 頻道對象 * @param member 成員對象 */ - (void)channel:(Y2WRTCChannel *)channel didChangeVideoMuteFromMember:(Y2WRTCMember *)member; /** * 視頻連接出現錯誤 * * @param channel 頻道對象 * @param error 錯誤對象 */ - (void)channel:(Y2WRTCChannel *)channel onVideoError:(NSError *)error; /** * 有成員開啟了屏幕共享 * * @param channel 頻道對象 * @param member 成員對象 */ - (void)channel:(Y2WRTCChannel *)channel didOpenScreenOfMember:(Y2WRTCMember *)member; /** * 有成員關閉了屏幕共享 * * @param channel 頻道對象 * @param member 成員對象 */ - (void)channel:(Y2WRTCChannel *)channel didCloseScreenOfMember:(Y2WRTCMember *)member; /** * 屏幕共享連接出現錯誤 * * @param channel 頻道對象 * @param error 錯誤對象 */ - (void)channel:(Y2WRTCChannel *)channel onScreenError:(NSError *)error;
Y2WRTCMember
成員對象,管理成員的狀態並提供視頻數據
屬性
復制
@property (nonatomic, copy, readonly) NSString *uid; // 用戶ID @property (nonatomic, retain, readonly) Y2WRTCVideoTrack *videoTrack; // 視頻數據流 @property (nonatomic, retain, readonly) Y2WRTCVideoTrack *screenTrack; // 屏幕數據流 @property (nonatomic, assign, readonly) BOOL audioOpened; // 是否開啟了音頻連接 @property (nonatomic, assign, readonly) BOOL audioMuted; // 是否開啟了靜音(關閉麥克風) @property (nonatomic, assign, readonly) BOOL videoOpened; // 是否開啟了視頻連接 @property (nonatomic, assign, readonly) BOOL screenOpened; // 是否開啟了屏幕共享連接
Y2WRTCVideoTrack
管理視頻流數據,直接給渲染器的videoTrack屬性賦值即可。
Y2WRTCVideoView
渲染器,用於渲染視頻,直接給videoTrack屬性賦值即可。
屬性
復制
/** * 當前使用的視頻流管理器 */ @property (nonatomic, weak) Y2WRTCVideoTrack *videoTrack; /** * 委托對象 */ @property (nonatomic, weak) id<Y2WRTCVideoViewDelegate> delegate; /** * 視頻內容的填充模式 * * 默認 Y2WRTCVideoViewFillModeScaleAspectFill */ @property (nonatomic, assign) Y2WRTCVideoViewFillMode fillMode; /** * 截圖 */ @property (nonatomic, weak) UIImage *snapshot;
Y2WRTCVideoViewDelegate協議方法
復制
/** * 視頻內容分辨率發生變化,返回最新大小 * * @param videoView 觸發此回調的渲染器對象 * @param size 尺寸 */ - (void)videoView:(Y2WRTCVideoView *)videoView didChangeVideoSize:(CGSize)size;
注意事項
- 獲取到channel對象后需要調用join方法加入頻道進行實時通訊
- 為確保接收到所有回調,設置委托對象應該在調用join方法之前
- SDK不會自動開啟音頻視頻屏幕共享和白板功能,開發時根據需求調用各功能:
開啟音頻:[channel openAudio];
開啟視頻:[channel openVideo]; - 屏幕共享功能在移動端暫時不能主動發起,接收只需實現Y2WRTCChannelDelegate中的協議方法
