YstenEngineKit
安装
- Podfile 中加入下面一行代码来使用 YstenEngineKit
 
pod 'YstenEngineKit'
- 直接将
YstenEngineKit.framework和WebRTC.framework拷贝到工程中 
使用教程
本教程将讲解YstenEngineKit的基本使用功能。
YstenEngineKit 基本组成
- YstenEngine:功能实现
 - YSTTypeDefines:错误状态,连麦状态,视频自适应方式,本地视图旋转方向等枚举的声明;
 
YstenEngine使用介绍
NOTE:必须要在主线程上调用方法,所有的代理回调都会在主线程返回; plist必须增加权限:NSCameraUsageDescription和NSMicrophoneUsageDescription 1.使用userId,初始化YstenEngine
_ystenEngine = [[YstenEngine getInstance] init:self userId:g_UserId];2.通过请求获取到加入房间的token
- 加入房间,当加入房间成功后,主动将本地流发布给远端
 
[_ystenEngine joinChannel:token];
- 只是加入房间,显示本地用户视频,然后等连接房间成功后,在主动发起本地流给远端
 
[_ystenEngine joinChannelWithOutPublish:token];
// 等待用户加入房间成功,操作主动发布本地流给远端
- (void)YstenEngine:(YstenEngine *)engine onJoinComplete:(BOOL)result reason:(NSError *)reason
{
    [_ystenEngine publish];
}
3.创建显示本地视频视图
NOTE:在使用本sdk的1.7.30以下版本必须在第2步骤后才能创建,使用1.7.30以上版本在步骤1,2之前创建本地视图都可以.
- (void)createLocalView
{
    if( !localVideoView ) {
        localVideoView = [_ystenEngine createLocalVideoView:CGRectMake(0, 0, _localView.frame.size.width, _localView.frame.size.height) withDisplayType:Ysten_VideoViewDisplay_Banlance];
        [_localView addSubview:localVideoView];
        localVideoView.backgroundColor = [UIColor clearColor];
    }
}
5.远端用户加入房间或者离开房间
// 加入房间
- (void)YstenEngine:(YstenEngine *)engine onUserJoined:(NSString *)userId
{
   // 根据此userId创建视图
	UIView *remotelVideoView = [_ystenEngine createRemoteVideoView: [UIApplication sharedApplication].keyWindow.frame forUser:userId withDisplayType:Ysten_VideoViewDisplay_Banlance];
   
    if (userId && remotelVideoView) {
        [remoteVideoViewArray setObject:remotelVideoView forKey:userId];
        remotelVideoView.backgroundColor = [UIColor blueColor];
        remotelVideoView.frame = rect;
        [remotelVideoView setHidden:YES];
        
        [_remoteView addSubview:remotelVideoView];
    }
}
// 离开房间
- (void)YstenEngine:(YstenEngine *)engine onUserLeft:(NSString *)userId
{
	UIView *removeView = [remoteVideoViewArray objectForKey:userId];
    [removeView removeFromSuperview];
    [remoteVideoViewArray removeObjectForKey:userId];
    removeView = nil;
}
6.结束视频通话
   [_ystenEngine leaveChannel];
	
   // 销毁本地视图和远端视图
   for (NSString *userId in remoteVideoViewArray) {
        UIView *v = [remoteVideoViewArray objectForKey:userId];
        [v removeFromSuperview];
        v = nil;
        NSLog(@"[Demo]Remove remote view:%@", userId);
    }
    [remoteVideoViewArray removeAllObjects];
    [localVideoView removeFromSuperview];
    localVideoView = nil;
其他说明
- 属性
 
- roomState:加入房间的状态,如果是YSTRoomStateConnected,那么就可以操作相关所有的动作。
 - audioEnabled:是否本地流音频有
 - videoEnabled:是否本地流视频可显示
 - videoSize: 配置本地视频流显示分辨率,默认是{1280,720}
 
// 设置必须在此两种方式之前设置
// 方式一:
_ystenEngine.videoSize = CGSizeMake(2014, 1100);
[_ystenEngine openLocalMedia];
// 方式二:
_ystenEngine.videoSize = CGSizeMake(2014, 1100);
[_ystenEngine joinChannel:self.token];
- 主要功能:
 
- 创建本地视频显示视图:- (UIView *)createLocalVideoView:(CGRect)frame withDisplayType:(YstenVideoViewDisplayType)type
 - 创建远端视频显示视图:- (UIView *)createRemoteVideoView:(CGRect)frame forUser:(NSString *)userId withDisplayType:(YstenVideoViewDisplayType)type
 - 本地视频是否显示:- (void)enableLocalVideo:(BOOL)enable
 - 本地音频是否静音:- (void)enableLocalAudio:(BOOL)enable
 - 切换前后置摄像头:- (void)switchCamera
 - 打开扬声器:- (void)activeSpeakerphone:(BOOL)enable
 - 发布本地流:- (void)publish
 - 取消发布本地流:- (void)unPublish
 - 重新发布本地流: - (void)republish
 - 重新订阅远端用户的流:- (void)resubscribeUserId:(NSString *)userId
 - 订阅所有的远端用户:- (void)subscribeAllRemote
 - 取消订阅所有的远端用户:- (void)unsubscribeAllRemote
 - 打开本地媒体:- (void)openLocalMedia
 
// 可以在初始化ystenEngine后即可调openLocalMedia方法,然后在代理回调函数, 初始化本地视图
- (void)YstenEngine:(YstenEngine *)engine onFirstLocalVideo:(NSString *)userId
{
	if (localVideoView) {
		[localVideoView removeFromSuperview];
		localVideoView = nil;
	}
	[self createLocalView];
}
- (void)createLocalView
{
    if( !localVideoView ) {
        localVideoView = [_ystenEngine createLocalVideoView:CGRectMake(0, 0, _localView.frame.size.width, _localView.frame.size.height) withDisplayType:Ysten_VideoViewDisplay_Banlance];
        [_localView addSubview:localVideoView];
        localVideoView.backgroundColor = [UIColor clearColor];
    }
}
- 代理回调
 
- 所有的错误情况回调:- (void)YstenEngine:(YstenEngine *)engine errorMessage:(NSError *)error
 - 房间状态变化回调:- (void)YstenEngine:(YstenEngine *)engine roomStateDidChange:(YSTRoomState)roomState
 - 加入房间回调:- (void)YstenEngine:(YstenEngine *)engine onJoinComplete:(BOOL)result reason:(NSError *)reason
 - 离开房间回调:- (void)YstenEngine:(YstenEngine *)engine onLeaveComplete:(BOOL)result reason:(NSError *)reason
 - 发布本地流成功:- (void)YstenEngine:(YstenEngine *)engine didPublish:(NSString *)userId
 - 取消发布本地流成功:- (void)YstenEngine:(YstenEngine *)engine didUnpublish:(NSString *)userId
 - 成功订阅用户:- (void)YstenEngine:(YstenEngine *)engine didSubscribe:(NSString *)userId
 - 取消订阅用户成功:- (void)YstenEngine:(YstenEngine *)engine didUnSubscribe:(NSString *)userId
 - 远端首帧显示:- (void)YstenEngine:(YstenEngine *)engine onFirstRemoteVideo:(NSString *)userId
 - 流状态显示:- (void)YstenEngine:(YstenEngine *)engine onStatReport:(NSDictionary *)report
 - 音频流开启或关闭:- (void)YstenEngine:(YstenEngine *)engine onEnableAudio:(BOOL)enable forUser:(NSString *)userId
 - 视频流开启或关闭:- (void)YstenEngine:(YstenEngine *)engine onEnableVideo:(BOOL)enable forUser:(NSString *)userId
 - 远端用户进入房间并推流:- (void)YstenEngine:(YstenEngine *)engine onUserJoined:(NSString *)userId
 - 远端推流用户离开房间:- (void)YstenEngine:(YstenEngine *)engine onUserLeft:(NSString *)userId
 - 未推流用户加入房间:- (void)YstenEngine:(YstenEngine *)engine onUserJoin:(NSString *)userId
 - 未推流用户离开房间:- (void)YstenEngine:(YstenEngine *)engine onUserLeave:(NSString *)userId
 
作者
Crassus, [email protected]
协议
YstenEngineKit 被许可在 MIT 协议下使用。查阅 LICENSE 文件来获得更多信息。