zoukankan      html  css  js  c++  java
  • iOS端im实时音视频功能快速开发实操指导!

     

    简介

    Y2W_RTC_SDK集成多种实时通讯能力:

    1. 实时音频
    2. 实时视频
    3. 屏幕共享
    4. 协作白板

    开发流程

    1. 发起方使用Y2WRTCManager对象的createChannel方法创建Y2WRTCChannel对象
    2. 接收方使用Y2WRTCManager对象的getChannel方法获取Y2WRTCChannel对象
    3. 给Y2WRTCChannel添加委托对象,并实现Y2WRTCChannelDelegate协议方法
    4. 然后调用join方法加入频道
    5. 调用leave方法离开频道
    6. 根据需求调用openAudio开启音频连接
    7. 根据需求调用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;

    注意事项

    1. 获取到channel对象后需要调用join方法加入频道进行实时通讯
    2. 为确保接收到所有回调,设置委托对象应该在调用join方法之前
    3. SDK不会自动开启音频视频屏幕共享和白板功能,开发时根据需求调用各功能:
      开启音频:[channel openAudio];
      开启视频:[channel openVideo];
    4. 屏幕共享功能在移动端暂时不能主动发起,接收只需实现Y2WRTCChannelDelegate中的协议方法

     

  • 相关阅读:
    今天特别忙
    代码重构十
    周末,悠哉的一天
    周六,游戏的一天
    代码重构九
    微信公众号网页上点击放大图片浏览,解决方案
    thinkphp 百度地图Api坐标计算 A坐标距离B坐标多少公里 并按照距离近的排序 坐标排序 外部字段排序
    php 中的关系运算符
    jquery 倒计时
    数组排序,
  • 原文地址:https://www.cnblogs.com/yun2win/p/5765746.html
Copyright © 2011-2022 走看看