这段时间写基于环信的视频语音通话功能,看环信官方给的demo发现不怎么好写,然后通过各种查资料,又结合文档,终于还是在借助别人的 demo下完成了这个功能。汗颜!!!
首先当我们点击视频通话时—>发起实时通话
可以直接调用:
- (void)startCall:(EMCallType)aType
remoteName:(NSString *)aRemoteName
ext:(NSString *)aExt
completion:(void (^)(EMCallSession *aCallSession, EMError *aError))aCompletionBlock;



void (^completionBlock)(EMCallSession *, EMError *) = ^(EMCallSession *aCallSession, EMError *aError){
//创建通话实例是否成功
//TODO: code
};

中直接写跳转页面到你自己设置的视频界面例如:

[[EMClient sharedClient].callManager startCall:callType remoteName:remote ext:nil completion:^(EMCallSession *aCallSession, EMError *aError) {if (!aError) {weakSelf.currentSession = aCallSession;weakSelf.callController = [[QZCallViewController alloc] initWithCallSession:weakSelf.currentSession];[[UIApplication sharedApplication].keyWindow.rootViewController presentViewController:weakSelf.callController animated:YES completion:nil];} else {UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@"呼叫失败" message:aError.errorDescription delegate:nil cancelButtonTitle:@"确定" otherButtonTitles:nil, nil];[alertView show];}}];

为了使用方便我们将有关视频通话的方法放在一个类中:QZHelper
那么在.h中我们需要的方法有:
1、类的初始化
2、发出视频通话
3、挂断通话
4、被叫方同意实时通话
初始化的时候我们可以采用单例的形式

+ (instancetype)shareHelper
{static dispatch_once_t onceToken;dispatch_once(&onceToken, ^{helper = [[QZHelper alloc] init];});return helper;
}

再在init方法中配置音视频属性

- (instancetype)init
{self = [super init];if (self) {[self _unRegisterCallNotifications];[self _registerCallNotifications];EMCallOptions *options = [[EMClient sharedClient].callManager getCallOptions];//当对方不在线时,是否给对方发送离线消息和推送,并等待对方回应options.isSendPushIfOffline = YES;//设置视频分辨率:自适应分辨率、352 * 288、640 * 480、1280 * 720options.videoResolution = EMCallVideoResolution640_480;//最大视频码率,范围 50 < videoKbps < 5000, 默认0, 0为自适应,建议设置为0options.maxVideoKbps = 0;//最小视频码率options.minVideoKbps = 0;//是否固定视频分辨率,默认为NOoptions.isFixedVideoResolution = NO;[[EMClient sharedClient].callManager setCallOptions:options];}return self;
}
- (void)_unRegisterCallNotifications
{[[EMClient sharedClient] removeDelegate:self];[[EMClient sharedClient].callManager removeDelegate:self];
}
- (void)_registerCallNotifications
{[[EMClient sharedClient] addDelegate:self delegateQueue:dispatch_get_main_queue()];[[EMClient sharedClient].callManager addDelegate:self delegateQueue:dispatch_get_main_queue()];
}

发出通话:(如觉得不太方便可重写一个方法将原方法嵌套)

[[EMClient sharedClient].callManager startCall:callType remoteName:remote ext:nil completion:^(EMCallSession *aCallSession, EMError *aError) {if (!aError) {weakSelf.currentSession = aCallSession;weakSelf.callController = [[QZCallViewController alloc] initWithCallSession:weakSelf.currentSession];[[UIApplication sharedApplication].keyWindow.rootViewController presentViewController:weakSelf.callController animated:YES completion:nil];} else {UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@"呼叫失败" message:aError.errorDescription delegate:nil cancelButtonTitle:@"确定" otherButtonTitles:nil, nil];[alertView show];}}];

发出通话请求后,被叫方会接受信息执行方法:

/*!*  用户A拨打用户B,用户B会收到这个回调**  @param aSession  会话实例*/
- (void)callDidReceive:(EMCallSession *)aSession;

其中QZViewController为视频链接界面 可自行设计只需将当前session传去即可。
当被叫方同意实时通话时 被叫方会走这个方法:

/*!*  接收方同意通话请求**  @param  aCallId     通话ID**  @result 错误信息*/
- (EMError *)answerIncomingCall:(NSString *)aCallId;//调用:
//EMError *error = nil;
//error = [[EMClient sharedClient].callManager answerIncomingCall:@"sessionId"];                           

这时主叫方和被叫方都会接受回调 :

/*!*  通话通道建立完成,用户A和用户B都会收到这个回调**  @param aSession  会话实例*/
- (void)callDidConnect:(EMCallSession *)aSession;

当被叫方同意后主叫方也会受到回调

/*!*  用户B同意用户A拨打的通话后,用户A会收到这个回调**  @param aSession  会话实例*/
- (void)callDidAccept:(EMCallSession *)aSession;

然后在各个回调中调用适当的方法 通话基本上就完成了
有时间再继续完善

基于环信视频语音通话功能相关推荐

  1. 基于环信实现在线聊天功能

    由于最近接触到的项目需要用到聊天功能,关于聊天的SDK跟安卓同事统一,最终选择了环信.在官方下载好SDK,并研究了一波,最终实现自定义聊天功能. ###实现前准备 1.下载环信SDK,我使用的版本是V ...

  2. 基于环信webim视频语音通话

    最近项目上要加一个视频通话功能,要求pc端与移动端.移动端与移动端能进行视频语音通话功能,便百度了下,腾讯云和网易云都有这样的功能,但是一个要收费,一个要用户信息,最后还是选择了环信,去环信官网指定的 ...

  3. 用腾讯即时通讯IM和实时音视频实现完整语音通话功能

    说来奇怪,即时通讯领域的霸主QQ,微信,旗下产品出的腾讯即时通讯IM就像个残疾人一样,这里不对那里不对,要达到生产级别,就不得不去改它很多源码才行.今天先不吐槽其他的,我们看看如何在腾讯Im里面完成语 ...

  4. 用腾讯即时通讯IM和实时音视频实现陪玩系统源码的语音通话功能

    在陪玩系统源码中,用户之间主要的交流方式就是语音通话,实时互动性的语音通话能让人产生面对面交谈的感觉,所以在陪玩系统源码中,语音通话功能的开发非常重要,今天我们就一起来看看如何用腾讯即时通讯IM和实时 ...

  5. mui初级入门教程(五)— 聊聊即时通讯(IM),基于环信 web im SDK

    文章来源:小青年原创 发布时间:2016-06-15 关键词:mui,环信 web im,html5+,im,页面传值,缓存 转载需标注本文原始地址: http://zhaomenghuan.gith ...

  6. Android基于环信自定义消息实现转账红包(一)

    最近做了一个项目,需要实现转账红包功能.我这里接入的是环信,我自己做的过程中也比较坎坷,所以想把实现的方法整理了一下分享给大家(如果大家有更好的实现方法,欢迎评论区留言,废话不多说了开始上货,东西有点 ...

  7. 基于环信sdk在uni-app框架中快速开发一款多平台社交Demo

    说在前面:此款 demo 是基于 环信sdk 开发的一款具有单聊.群聊.聊天室.音视频等功能的应用.在此之前我们已经开发完 Vue.react(web端).微信小程序.这三个热门领域的版本,如有需要源 ...

  8. 基于环信的仿QQ即时通讯的简单实现

    代码地址如下: http://www.demodashi.com/demo/11645.html 我的博客地址 之前一直想实现聊天的功能,但是感觉有点困难,今天看了环信的API,就利用下午的时间动手试 ...

  9. Android基于环信SDK开发IM即时聊天(一)

    2016-09-02更新:可以看一下最新的这篇文章和源码,Android基于环信SDK开发IM即时聊天(二) 目前市面上我了解的做第三方即时聊天SDK的有两家:环信.融云,这里我使用环信SDK来完成即 ...

最新文章

  1. 看看现在大型网站都是用什么语言写的 ?
  2. Java基础笔记12
  3. maplet, power set, domain subtraction,
  4. Android系统root破解原理分析
  5. 拥抱云原生,Fluid结合JindoFS :阿里云OSS加速利器
  6. Menagerie(AtCoder-2234)
  7. 計算機二級-java04
  8. python的全局变量和局部变量
  9. JavaEE学习05--cookiesession
  10. 算法:从上往下打印二叉树
  11. 数据库系统概论知识点总结(附期末考试题库)
  12. c#编写闭合导线简易平差程序
  13. 【尚硅谷_数据结构与算法】十二、算法
  14. 鹏城实验室支持建设的OpenI启智社区荣登2021“科创中国”开源创新榜
  15. 怎样查看对方计算机网络密码,如何查看邻居家的wifi密码?不知道wifi密码怎么蹭网...
  16. 计算机组成原理第五版第四章课后答案,计算机组成原理第四章课后习题及答案_唐朔飞(完整版).docx...
  17. win10清除系统激活密钥
  18. shell习题-27
  19. 汽车厂商对高通骁龙820A系统平台的支持
  20. FPGA与单片机之间的数据通信

热门文章

  1. 不愧java_JAVA高手请进
  2. SIMCom常见模组外围电路设计
  3. js复数类的学习和使用
  4. 计算机连接投影仪后黑屏咋调试,电脑连接投影机播放电影过程中经常性黑屏一秒故障解决一例-投影仪怎么连接电脑...
  5. 对8421码,5421码,2421码,余3码的认识
  6. 微软的奥尔良项目简介
  7. 安卓开发实现获取扫码枪扫码二维码、条形码后的内容
  8. .NET Framework 类库——C#命名空间大全
  9. 软件版本 ——测试版
  10. 2021年电商企业倒闭名单