iOS端im实时音视频功能快速开发实操指导!

所需工具yun2win实时音视频IOS端sdk

下载地址:https://github.com/yun2win/yun2win-sdk-iOS/tree/master/Y2W_IM_SDK

yun2win官网:www.yun2win.com

简介

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中的协议方法
时间: 2024-11-05 19:03:47

iOS端im实时音视频功能快速开发实操指导!的相关文章

web端实时音视频功能开发指南

yun2win官网:www.yun2win.com SDK下载地址:http://www.yun2win.com/h-col-107.html 简介 yun2win-sdk-web提供web端实时音视频功能完整解决方案,方便客户快速集成音视频功能. SDK 提供整套解决方案 yun2win官网:www.yun2win.com SDK下载地址:http://www.yun2win.com/h-col-107.html 开发准备 1.准备Chrome浏览器版本49及以上 2.给网站配置CA证书 3.

从零到一,使用实时音视频 SDK 一起开发一款 Zoom 吧

zoom(zoom.us) 是一款受到广泛使用的在线会议软件.相信各位一定在办公.会议.聊天等各种场景下体验或者使用过,作为一款成熟的商业软件,zoom 提供了稳定的实时音视频通话质量,以及白板.聊天.屏幕共享.PPT放映等常用功能.但是在当今浏览器成为端上主流的时代,实时音视频又怎甘于落后呢?相比于需要安装包的 Zoom,直接在网页上开发一款类似的会议软件肯定会受到更多的关注.当需要开会的时候,直接通过一个链接,大家就可以接入并开始会议了.现在,使用七牛实时音视频的 Web SDK,我们可以将

Android端实时音视频开发指南

简介 yun2win-sdk-Android提供Android端实时音视频完整解决方案,方便客户快速集成实时音视频功能. SDK 提供的能力如下: 发起 加入 AVClient Channel AVMember yun2win官网:www.yun2win.com SDK下载地址:http://www.yun2win.com/h-col-107.html 开发准备 注册并创建应用 到 github下载yun2winSDK及demo 下载源码详解 app为主体显示Module uikit为公共服务M

摸索在web端使用腾讯云的实时音视频

今天接到一个新任务,要在web端集成,实时音频/视频,选择了腾讯云的服务: 腾讯云实时 音视频 文档地址:https://cloud.tencent.com/document/product/647/17021 点击web下的下载按钮会弹出一个网页可以在web端体验 实时 音视频 的demo demo地址:https://trtc-1252463788.file.myqcloud.com/web/demo/official-demo/index.html?_ga=1.256196107.1236

实时音视频互动系列(下):基于 WebRTC 技术的实战解析

在 WebRTC 项目中,又拍云团队做到了覆盖系统全局,保证项目进程流畅.这牵涉到主要三大块技术点: 网络端.服务端的开发和传输算法 WebRTC 协议中牵扯到服务端的应用协议和信令服务 客户端iOS.安卓 H.264 编解码技术 △ WebRTC 技术点 实时音视频互动必须遵守三大点 必须基于 UDP 协议,否则不要谈实时 因为 TCP 协议的重传机制(传输保障)会导致累积延迟问题,用 UDP 协议没有传输保障机制,但需要自行完善丢包容错逻辑. 又拍云音视频互动方案是基于UDP 协议,使用 T

小程序音视频功能的原理及应用

本文由云+社区发表 作者:常青 腾讯视频云是做什么的?腾讯视频云既不做数据库,也不做存储,也不做网络,我们只做音视频服务,也就是直播.点播.视频通话.这类面向B类客户的音视频PAAS业务. 今天主要是跟大家讲的是腾讯视频云在过去一年时间里跟小程序结合,看看怎么去把这样一个高技术含量的一个能力去跟小程序这样一个非常轻量级的平台发挥1+1>2的效应. 今天的话题分四部分,第一个是小程序音视频能拿来做什么,第二部分是将其内部是怎么做到的?第三就是讲腾讯视频云的音视频技术的一些技术细节:第四个是介绍一下

实时音视频技术难点及解决方案

对于一个实时互动的音视频系统而言,存在很多技术难点,有几个比较重要的点: 首先是低延迟,如果要满足比较流畅地进行实时互动,那么单向的端到端的迟延大概要在400毫秒以下才能保证流畅沟通; 第二点就是流畅性,你也很难想象在视频过程中频繁卡顿会有良好的互动; 第三点是回声消除,回声的产生是扬声器播放的声音经过环境反射被麦克风重新采集并传输给对方,这样对方就会一直听到自己的回声,整个互动过程会非常难受; 第四点是国内外互通,随着现在国内同质化产品越来越多,国内的竞争也异常激烈,很多厂商纷纷选择出海,这时

iOS平台上的音视频即时通讯应用开发

现在IOS很是火热,一大堆开发人员在捣鼓IOS平台的开发,相信大家也使用过QQ的语音视频对话功能,但是不知道大家有没有试过自己来开发一个基于IOS平台的音视频即时通讯的应用,这个应用必须能够做到跨平台 支持iOS平台设备上的音频即时通讯应用开发 提供Objective-C语言API接口,开放示例源代码 集成H.264.AAC.AMR等编解码技术 封装音视频的采集.编解码.传输.显示和播放等模块 支持Android.Web.PC等设备和iOS之间的互联互通 想要在IOS平台下实现音视频通信,最快捷

实时音视频互动系列(上):又拍云UTUN网络详解

如何定义实时音视频互动, 延迟 400ms 内才能无异步感 实时音视频互动如果存在1秒左右的延时会给交流者带来异步感,必须将视频播放延迟限制在400ms以内,才能给用户较好的交互体验. 当延迟控制在400ms以内时,两个人音视频互动是实时的,不会有异步感存在,即实时音视频互动. 实时音视频互动产生延迟的原因 音视频互动的延迟是如何产生的? 我们先假设这样一个场景:位于北京的A客户端与位于广州的B客户端进行实时音视频互动. 该场景会有以下几个产生延迟的原因: 光的传输耗时 30ms: 网络处理耗时