全部产品

使用 iOS SDK

更新时间:2020-06-18 10:03:49

初始化 ARTVCEngine 并监听事件回调

  • 初始化设置 uid 和 delegate。
    1. _artvcEgnine = [[ARTVCEngine alloc] init];
    2. _artvcEgnine.uid = self.uid;
    3. _artvcEgnine.delegate = self;
  • 监听事件回调(按需实现回调,比如错误处理是需要实现的)。
    1. #pragma mark - ARTVCEngineDelegate
    2. -(void)didReceiveRoomInfo:(ARTVCRoomInfomation*)roomInfo{
    3. }
    4. -(void)didReceiveLocalFeed:(ARTVCFeed*)localFeed{
    5. self.feedForPreview = localFeed;
    6. }
    7. -(void)didEncounterError:(NSError *)error forFeed:(ARTVCFeed*)feed{
    8. [self showToastWith:[NSString stringWithFormat:@"%@, Error:%@",feed,error] duration:2.0];
    9. }
    10. .....

设置服务端地址

  1. _artvcEgnine.roomServerCustomUrl = @"your room server url here";
  2. ...

设置视频编码分辨率

  1. //设置视频编码分辨率,默认是 ARTVCVideoProfileType_640x360_15Fps。
  2. artvcEgnine.videoProfileType = ARTVCVideoProfileType_640x360_15Fps;

设置自动/手动推拉流开关

默认是自动推流/拉流。

  1. _artvcEgnine.autoPublish = YES;
  2. _artvcEgnine.autoSubScribe = YES;

设置是音视频通话还是纯音频通话

  • 音视频通话
    1. ARTVCPublishConfig* config = [[ARTVCPublishConfig alloc] init];
    2. config.videoEnable = YES;//默认是 YES
    3. config.audioEnable = YES;//默认是 YES
    4. config.videoProfile = _artvcEgnine.videoProfileType;
    5. _artvcEgnine.autoPublishConfig = config;
    6. ARTVCSubscribeOptions* options = [[ARTVCSubscribeOptions alloc] init];
    7. _artvcEgnine.autoSubscribeOptions = options;
  • 纯音频通话
    1. ARTVCPublishConfig* config = [[ARTVCPublishConfig alloc] init];
    2. config.videoEnable = NO;
    3. config.audioEnable = YES;//默认是 YES
    4. _artvcEgnine.autoPublishConfig = config;
    5. ARTVCSubscribeOptions* options = [[ARTVCSubscribeOptions alloc] init];
    6. options.receiveVideo = NO;
    7. _artvcEgnine.autoSubscribeOptions = options;

音视频通话下启动相机预览

对于纯音频通话,跳过此步骤。

  1. //默认使用前置摄像头,如果设置为 YES 则使用后置摄像头。
  2. [_artvcEgnine startCameraPreviewUsingBackCamera:NO];
  • 启动相机预览后,如果本地 feed 没有被回调过。之后回调会返回一个 ARTVCFeed 对象,可用于关联后续返回的渲染 view。
    1. -(void)didReceiveLocalFeed:(ARTVCFeed*)localFeed forPublishConfig:(ARTVCPublishConfig*)publishConfig{
    2. self.feedForPreview = localFeed;
    3. }
  • 预览 view 初始化的回调。
    1. -(void)didVideoRenderViewInitialized:(UIView*)renderView forFeed:(ARTVCFeed*)feed{
    2. if([feed isEqual:self.feedForPreview]){
    3. [self showToastWith:@"video preview view created" duration:1.0];
    4. }else{
    5. self.feedForRemote = feed;
    6. };
    7. //可触发 UI 布局,把 renderView add 到 view 层级中去
    8. }
  • 预览首帧渲染的回调。
    1. -(void)didFirstVideoFrameRendered:(UIView*)renderView forFeed:(ARTVCFeed*)feed{
    2. }

创建或者加入房间

  1. 作为主叫方,创建房间。
    1. ARTVCCreateRoomParams* params = [[ARTVCCreateRoomParams alloc] init];
    2. params.uid = self.uid;
    3. params.bizName = DEMO_BIZ;
    4. params.subBiz = DEMO_SUBBIZ;
    5. params.signature = DEMO_SIGNATURE;
    6. [_artvcEgnine createRoom:params];
    • 创建房间成功,会有房间信息回调。
      1. -(void)didReceiveRoomInfo:(ARTVCRoomInfomation*)roomInfo{
      2. }
    • 创建房间失败,会有 Error 回调。
      1. //error.code == ARTVCErrorCodeProtocolErrorCreateRoomFailed
      2. -(void)didEncounterError:(NSError *)error forFeed:(ARTVCFeed*)feed{
      3. }
    • 其他人加入房间后,会有成员加入房间的回调。
      1. -(void)didParticepantsEntered:(NSArray<ARTVCParticipantInfo*>*)participants{
      2. }
  2. 作为主被叫方,加入房间。
    1. ARTVCJoinRoomParams* params = [[ARTVCJoinRoomParams alloc] init];
    2. params.uid = self.uid;
    3. params.bizName = DEMO_BIZ;
    4. params.subBiz = DEMO_SUBBIZ;
    5. params.roomId = self.roomId;
    6. params.signature = DEMO_SIGNATURE;
    7. params.rtoken = self.rtoken;
    8. [_artvcEgnine joinRoom:params];
    • 加入房间成功,会有加入房间成功的回调以及房间已有成员的回调。
      1. -(void)didJoinroomSuccess{
      2. }
      3. -(void)didParticepantsEntered:(NSArray<ARTVCParticipantInfo*>*)participants{
      4. }
    • 加入房间失败,会有 error 回调。
      1. //error.code == ARTVCErrorCodeProtocolErrorJoinRoomFailed
      2. -(void)didEncounterError:(NSError *)error forFeed:(ARTVCFeed*)feed{
      3. }
    • 后续其他人加入房间后,会有成员加入房间的回调。
      1. -(void)didParticepantsEntered:(NSArray<ARTVCParticipantInfo*>*)participants{
      2. }

创建或者加入房间成功后开始推流与拉流

默认是自动推流与拉流。

  • 推流/拉流过程中,有如下相关状态回调。
    1. -(void)didConnectionStatusChangedTo:(ARTVCConnectionStatus)status forFeed:(ARTVCFeed*)feed{
    2. [self showToastWith:[NSString stringWithFormat:@"connection status:%d\nfeed:%@",status,feed] duration:1.0];
    3. if((status == ARTVCConnectionStatusClosed) && [feed.uid isEqualToString:[self uid]]){
    4. [self.artvcEgnine stopCameraPreview];//音视频通话下,停止摄像头。
    5. [self.artvcEgnine leaveRoom];
    6. }
    7. }
  • ARTVCConnectionStatus 状态解释。
    枚举 解释
    ARTVCConnectionStatusConnecting 200 开始发布和订阅时,首先回调该状态。
    ARTVCConnectionStatusConnected 202 发布/订阅成功时回调该状态。
    ARTVCConnectionStatusDisConnected 203 出现闪断,底层媒体流断开,底层会做自动重连。业务拿到这个回调仅做用户提示,不需要做 leaveRoom 处理。
    ARTVCConnectionStatusFailed 204 底层 ICE 失败无法继续,是一个终极错误。业务拿到这个回调可做停止摄像头 leaveRoom 处理。
    ARTVCConnectionStatusClosed 206 每个发布和订阅结束时,回调该状态。它是最后的状态,业务拿到这个回调可做停止摄像头 leaveRoom 处理。
  • 推流成功后,其他房间成员会收到新 feed 的回调。
    1. -(void)didNewFeedAdded:(ARTVCFeed*)feed{
    2. [self showToastWith:[NSString stringWithFormat:@"new feed published by others:%@",feed] duration:2.0];
    3. }
  • 自动订阅模式下,会主动订阅该 feed。
  • 订阅成功后,房间其他成员会收到如下回调。
    1. -(void)didSubscriber:(NSString*)subscriber subscribedAFeed:(ARTVCFeed*)feed{
    2. [self showToastWith:[NSString stringWithFormat:@"subscriber subscribed :%@",feed] duration:2.0];
    3. }

通话结束

  • 音视频通话停止摄像头并离开房间。
    1. [_artvcEgnine stopCameraPreview];
    2. [_artvcEgnine leaveRoom];
  • 纯音频通话离开房间。
    1. [_artvcEgnine leaveRoom];
  • 成员离开房间后,房间其他成员会收到成员离开的回调。
    1. -(void)didParticepant:(ARTVCParticipantInfo*)participant leaveRoomWithReason:(ARTVCParticipantLeaveRoomReasonType)reason{
    2. [self showToastWith:[NSString stringWithFormat:@"participant left:%@ reason:%d",participant,reason] duration:2.0];
    3. }
  • 自动发布订阅模式下离开房间,会自动取消发布本地的流以及取消订阅曾订阅过的流。
  • 取消发布后,房间其他成员会收到取消发布的回调。
    1. -(void)didFeedRemoved:(ARTVCFeed*)feed{
    2. [self showToastWith:[NSString stringWithFormat:@"feed unpublished by others:%@",feed] duration:2.0];
    3. }
  • 取消订阅后,房间其他成员会收到取消订阅的回调。
    1. -(void)didSubscriber:(NSString*)subscriber unsubscribedAFeed:(ARTVCFeed*)feed{
    2. [self showToastWith:[NSString stringWithFormat:@"subscriber unsubscribed :%@",feed] duration:2.0];
    3. }