基于环信视频语音通话功能
这段时间写基于环信的视频语音通话功能,看环信官方给的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;
然后在各个回调中调用适当的方法 通话基本上就完成了
有时间再继续完善
基于环信视频语音通话功能相关推荐
- 基于环信实现在线聊天功能
由于最近接触到的项目需要用到聊天功能,关于聊天的SDK跟安卓同事统一,最终选择了环信.在官方下载好SDK,并研究了一波,最终实现自定义聊天功能. ###实现前准备 1.下载环信SDK,我使用的版本是V ...
- 基于环信webim视频语音通话
最近项目上要加一个视频通话功能,要求pc端与移动端.移动端与移动端能进行视频语音通话功能,便百度了下,腾讯云和网易云都有这样的功能,但是一个要收费,一个要用户信息,最后还是选择了环信,去环信官网指定的 ...
- 用腾讯即时通讯IM和实时音视频实现完整语音通话功能
说来奇怪,即时通讯领域的霸主QQ,微信,旗下产品出的腾讯即时通讯IM就像个残疾人一样,这里不对那里不对,要达到生产级别,就不得不去改它很多源码才行.今天先不吐槽其他的,我们看看如何在腾讯Im里面完成语 ...
- 用腾讯即时通讯IM和实时音视频实现陪玩系统源码的语音通话功能
在陪玩系统源码中,用户之间主要的交流方式就是语音通话,实时互动性的语音通话能让人产生面对面交谈的感觉,所以在陪玩系统源码中,语音通话功能的开发非常重要,今天我们就一起来看看如何用腾讯即时通讯IM和实时 ...
- mui初级入门教程(五)— 聊聊即时通讯(IM),基于环信 web im SDK
文章来源:小青年原创 发布时间:2016-06-15 关键词:mui,环信 web im,html5+,im,页面传值,缓存 转载需标注本文原始地址: http://zhaomenghuan.gith ...
- Android基于环信自定义消息实现转账红包(一)
最近做了一个项目,需要实现转账红包功能.我这里接入的是环信,我自己做的过程中也比较坎坷,所以想把实现的方法整理了一下分享给大家(如果大家有更好的实现方法,欢迎评论区留言,废话不多说了开始上货,东西有点 ...
- 基于环信sdk在uni-app框架中快速开发一款多平台社交Demo
说在前面:此款 demo 是基于 环信sdk 开发的一款具有单聊.群聊.聊天室.音视频等功能的应用.在此之前我们已经开发完 Vue.react(web端).微信小程序.这三个热门领域的版本,如有需要源 ...
- 基于环信的仿QQ即时通讯的简单实现
代码地址如下: http://www.demodashi.com/demo/11645.html 我的博客地址 之前一直想实现聊天的功能,但是感觉有点困难,今天看了环信的API,就利用下午的时间动手试 ...
- Android基于环信SDK开发IM即时聊天(一)
2016-09-02更新:可以看一下最新的这篇文章和源码,Android基于环信SDK开发IM即时聊天(二) 目前市面上我了解的做第三方即时聊天SDK的有两家:环信.融云,这里我使用环信SDK来完成即 ...
最新文章
- 看看现在大型网站都是用什么语言写的 ?
- Java基础笔记12
- maplet, power set, domain subtraction,
- Android系统root破解原理分析
- 拥抱云原生,Fluid结合JindoFS :阿里云OSS加速利器
- Menagerie(AtCoder-2234)
- 計算機二級-java04
- python的全局变量和局部变量
- JavaEE学习05--cookiesession
- 算法:从上往下打印二叉树
- 数据库系统概论知识点总结(附期末考试题库)
- c#编写闭合导线简易平差程序
- 【尚硅谷_数据结构与算法】十二、算法
- 鹏城实验室支持建设的OpenI启智社区荣登2021“科创中国”开源创新榜
- 怎样查看对方计算机网络密码,如何查看邻居家的wifi密码?不知道wifi密码怎么蹭网...
- 计算机组成原理第五版第四章课后答案,计算机组成原理第四章课后习题及答案_唐朔飞(完整版).docx...
- win10清除系统激活密钥
- shell习题-27
- 汽车厂商对高通骁龙820A系统平台的支持
- FPGA与单片机之间的数据通信