【音视频】Android CallLib 开发指南

开通方式

音视频服务开通,请参考音视频开通方式说明。

使用说明

由于底层引擎技术不同,2.6.0 之后的音视频 SDK 与 2.6.0 之前的 SDK 中的实时音视频不能互通。

音视频 SDK 为商用收费功能,之前的 SDK 中的实时音视频为免费测试功能,如果您还想使用之前的实时音视频,可以使用 2.5.2 版本,2.6.0 之后的音视频服务使用说明如下:

集成说明

1、 首先请参考官网文档集成 CallLib SDK 。

2、 使用融云通话之前,必须先初始化 SDK 和连接服务器,详细内容可以参考 IMLib 快速集成文档

快速集成

发起通话

您可以调用 RongCallClient 下面接口发起通话。

/**
 * 发起一个通话
 * @param conversationType  会话类型
 * @param targetId          目标会话id
 * @param userIds           邀请参与通话的用户ID列表
 * @param mediaType         发起的通话媒体类型
 * @param extra             附加信息
 * @return                  呼叫id
 */
 public String startCall(Conversation.ConversationType conversationType, String targetId, List<String> userIds, RongCallCommon.CallMediaType mediaType, String extra);

设置通话来电监听

RongCallClient.setReceivedCallListener(new IRongReceivedCallListener() {    
    /**
     * 来电回调
     * @param callSession 通话实体
     */
    @Override
    public void onReceivedCall(RongCallSession callSession) {        
    //accept or hangup the call
    }    
    
    /**
     * targetSDKVersion>=23时检查权限的回调。当targetSDKVersion<23的时候不需要实现。
     * 在这个回调里用户需要使用Android6.0新增的动态权限分配接口requestCallPermissions通知用户授权,
     * 然后在onRequestPermissionResult回调里根据用户授权或者不授权分别回调
     * RongCallClient.getInstance().onPermissionGranted()和
     * RongCallClient.getInstance().onPermissionDenied()来通知CallLib。
     * 其中audio call需要获取Manifest.permission.RECORD_AUDIO权限;
     * video call需要获取Manifest.permission.RECORD_AUDIO和Manifest.permission.CAMERA两项权限。
     * @param callSession 通话实体
     */
    @Override
    public void onCheckPermission(RongCallSession callSession) {

    }
});

接听和挂断通话

您可以调用 RongCallClient 下面接口接听和挂断通话。

/**
 * 接听通话
 * @param callId 呼叫id,可以从来电监听的callSession中获取
 */public void acceptCall(String callId);
/**
 * 挂断通话
 * @param callId 呼叫id,可以从来电监听的callSession中获取
 */public void hangUpCall(String callId);

会话是否支持发起通话--call_conversation--

目前,SDK 支持在单聊中发起单人通话,在讨论组中发起多人通话。

您可以通过 RongCallClient 的下面接口查询当前会话类型的通话能力。

/**
 * 当前会话类型是否支持音频通话。
 * @param type  会话类型
 * @return      true:支持; false:不支持
 */
 public boolean isAudioCallEnabled(Conversation.ConversationType type);
 
/**
 * 当前会话类型是否支持视频通话。
 * @param type  会话类型
 * @return      true:支持; false:不支持
 */
 public boolean isVideoCallEnabled(Conversation.ConversationType type);

获取当前的通话实体

您可以通过RongCallClient的下面接口获取当前的通话实体,通话实体中维护着当前通话的所有信息。

/**
 * 获取当前通话实体,通话实体中维护着当前通话的所有信息。
 * @return 当前通话实体
 */
 public RongCallSession getCallSession();

邀请用户加入当前通话

您可以通过 RongCallClient 的下面接口邀请用户加入当前通话(仅限讨论组和群组)。

/**
 * 邀请用户加入当前通话(仅限讨论组和群组)
 * @param callId    通话id
 * @param userIds   邀请的用户id列表
 */
 public void addParticipants(String callId, List<String> userIds);

通话过程中的媒体接口

您可以通过 RongCallClient 的下面接口进行媒体类的操作。

/**
 * 切换 audio,video 通话
 * @param mediaType 要切换的媒体类型:audio、video
 */
 public void changeCallMediaType(RongCallCommon.CallMediaType mediaType);
 
/**
 * 前后摄像头切换
 */
 public void switchCamera();
 
/**
 * 设置是否打开本地摄像头
 * @param enabled true:打开摄像头;false:关闭摄像头。
 */
 public void setEnableLocalVideo(boolean enabled);
 
/**
 * 设置是否打开本地音频
 * @param enabled true:打开本地音频 false:关闭本地音频
 */
 public void setEnableLocalAudio(boolean enabled);
 
/**
 * 设置是否打开免提
 * @param enabled true:打开免提 false:关闭免提
 */
 public void setEnableSpeakerphone(boolean enabled);

设置通话状态的回调

您需要设置通话状态的回调,来监听通话状态的变化。

RongCallClient.getInstance().setVoIPCallListener(new IRongCallListener() {    
    /**
     * 电话已拨出。
     * 主叫端拨出电话后,通过回调 onCallOutgoing 通知当前 call 的详细信息。
     *
     * @param callSession 通话实体。
     * @param localVideo  本地 camera 信息。
     */
    @Override
    public void onCallOutgoing(RongCallSession callSession, SurfaceView localVideo) {

    }    
    
    /**
     * 已建立通话。
     * 通话接通时,通过回调 onCallConnected 通知当前 call 的详细信息。
     *
     * @param callSession 通话实体。
     * @param localVideo  本地 camera 信息。
     */
    @Override
    public void onCallConnected(RongCallSession callSession, SurfaceView localVideo) {

    }    
    
    /**
     * 通话结束。
     * 通话中,对方挂断,己方挂断,或者通话过程网络异常造成的通话中断,都会回调 onCallDisconnected。
     *
     * @param callSession 通话实体。
     * @param reason      通话中断原因。
     */
    @Override
    public void onCallDisconnected(RongCallSession callSession, RongCallCommon.CallDisconnectedReason reason) {

    }    
    
    /**
     * 被叫端正在振铃。
     * 主叫端拨出电话,被叫端收到请求,发出振铃响应时,回调 onRemoteUserRinging。
     *
     * @param userId 振铃端用户 id。
     */
    @Override
    public void onRemoteUserRinging(String userId) {

    }    
    
    /**
     * 被叫端加入通话。
     * 主叫端拨出电话,被叫端收到请求后,加入通话,回调 onRemoteUserJoined。
     *
     * @param userId      加入用户的 id。
     * @param mediaType   加入用户的媒体类型,audio or video。
     * @param remoteVideo 加入用户者的 camera 信息。
     */
    @Override
    public void onRemoteUserJoined(String userId, RongCallCommon.CallMediaType mediaType, SurfaceView remoteVideo) {

    }    
    
    /**
     * 通话中的某一个参与者,邀请好友加入通话,发出邀请请求后,回调 onRemoteUserInvited。
     *
     * @param userId    被邀请者的 id。
     * @param mediaType 被邀请者的 id。
     */
    @Override
    public void onRemoteUserInvited(String userId, RongCallCommon.CallMediaType mediaType) {

    }    
    
    /**
     * 通话中的远端参与者离开。
     * 回调 onRemoteUserLeft 通知状态更新。
     *
     * @param userId 远端参与者的 id。
     * @param reason 远端参与者离开原因。
     */
    @Override
    public void onRemoteUserLeft(String userId, RongCallCommon.CallDisconnectedReason reason) {

    }    
    
    /**
     * 当通话中的某一个参与者切换通话类型,例如由 audio 切换至 video,回调 onMediaTypeChanged。
     *
     * @param userId    切换者的 userId。
     * @param mediaType 切换者,切换后的媒体类型。
     * @param video     切换着,切换后的 camera 信息,如果由 video 切换至 audio,则为 null。
     */
    @Override
    public void onMediaTypeChanged(String userId, RongCallCommon.CallMediaType mediaType, SurfaceView video) {

    }    
    
    /**
     * 通话过程中,发生异常。
     *
     * @param errorCode 异常原因。
     */
    @Override
    public void onError(RongCallCommon.CallErrorCode errorCode) {

    }    
    
    /**
     * 远端参与者 camera 状态发生变化时,回调 onRemoteCameraDisabled 通知状态变化。
     *
     * @param userId   远端参与者 id。
     * @param disabled 远端参与者 camera 是否可用。
     */
    @Override
    public void onRemoteCameraDisabled(String userId, boolean disabled) {

    }
});

原文地址:http://blog.51cto.com/13600211/2107680

时间: 2024-08-02 02:48:20

【音视频】Android CallLib 开发指南的相关文章

技术福利【干货】音视频 iOS CallKit 开发指南

iOS CallKit 开发指南 简介 CallKit 是融云音视频通话功能的 UI 界面 SDK.包含了单人.多人音视频通话的界面的各种场景和功能.您可以快速的集成 CallKit 来实现丰富的音视频通话界面,并进行自己的 UI 定制开发.同时我们开源了 CallKit,您可以根据您的需要去使用. GitHub 项目:CallKit 开源代码 使用说明 由于底层引擎技术不同,2.6.0 之后的音视频 SDK 与 2.6.0 之前的 SDK 中的 VoIP 不能互通. 音视频 SDK 为商用收费

分享:百度地图Android SDK开发指南

最新的百度地图(v3.2)下载包中居然没有开发指南,自己整理了一下网页版的百度地图Android SDK开发指南,分享给和自己一样需要Demo的学生党.下载链接: http://pan.baidu.com/s/1jGqYF5c 密码: wpf9.

Android L开发指南

导语:Android下一代操作系统“ L”对开发者意味着什么?ART模式能否让应用的体验超越苹果? 刚刚结束的 Google I/O大会上,Android下一代操作系统“ L”带来不少惊喜.新系统运行更快.更省电. 然而开发者对这个新系统也有颇多疑问,比如新的运行模式ART对开发者意味着什么?ART模式能否让应用的体验超越苹果?360首席技术专家任寰认为在ART运行方式下“L”的性能提升在15%到80%之间.同时,ART优化了垃圾回收方式,执行效率比现行的Dalvik提高50%以上,减少了执行垃

web版本的音视频聊天室开发

目前网上视频聊天室.视频会议软件.可视IP电话软件随处可见,你是否想自己做一个玩玩?其实这类软件无非是视频加上网络而建成的.如果熟悉视频捕 捉和网络传输技术,根本就难不倒你.本文详细介绍了如何利用别人提供的sdk来开发视频聊天室 首先介绍一下视频聊天技术发展历程 1. C/S结构的视频聊天软件或插件.这是最早的视频聊天开发技术,已经被淘汰. 2. P2P模式的视频聊天软件或插件.这是前几年以及目前很多大型视频聊天项目的主要使用技术.也是很多小型视频聊天室使用的技术. 3.基于P2P模式+C/S模

手机端的音视频监控系统开发

网络信息化的趋势,随着流媒体技术.无线网络技术以及视频压缩技术的不断进步,视频监控技术得到了广泛的应用,同时,监控的规模和范围也在不断的扩大.人们对于安全保障的要求不断的提高,从而使得过去以图文为主的内容服务应经不能够满足用户的需求,取而代之的则是音视频多媒体服务.使用移动终端技术的视频监控系统,不仅具有体积小型化.安装傻瓜化以及配置灵活化的优势,最重要的是还降低了成本.由于网络功能和视频压缩都被集中的保存在小体积的设备中,因此,通过网络远程监控视频设备就可以获得监控视频.目前,网络视频监控不仅

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

所需工具yun2win实时音视频IOS端sdk 下载地址:https://github.com/yun2win/yun2win-sdk-iOS/tree/master/Y2W_IM_SDK yun2win官网:www.yun2win.com 简介 Y2W_RTC_SDK集成多种实时通讯能力: 实时音频 实时视频 屏幕共享 协作白板 开发流程 发起方使用Y2WRTCManager对象的createChannel方法创建Y2WRTCChannel对象 接收方使用Y2WRTCManager对象的get

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

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

音视频二次开发 IP组播技术

在Internet上,多媒体业务诸如:流媒体,视频会议和视频点播等,正在成为信息传送的重要组成部分.点对点传输的单播方式不能适应这一类业务传输特性--单点发送多点接收,因为服务器必须为每一个接收者提供一个相同内容的IP报文拷贝,同时网络上也重复地传输相同内容的报文,占用了大量资源.在这种情况下组播(multicast)应运而生,它的出现解决了一个主机向特定的多个接收者发送消息的方法.1989年,IETF通过RFC1112,定义了Internet上的组播方式. 主机组的成员可以动态变化,主机有权选

Android NDK开发指南---Application.mk文件和android.mk文件

https://android.googlesource.com/platform/development/+/donut-release/ndk/docs/OVERVIEW.TXT https://android.googlesource.com/platform/ndk/+/4e159d95ebf23b5f72bb707b0cb1518ef96b3d03/docs/ANDROID-MK.TXT https://android.googlesource.com/platform/ndk/+/4