互联网点对点音视频
音视频服务开通,请参考音视频服务开通指南。
1、互联网点对点音视频开发说明
1.1、实时音频、实时视频均通过相同的接口进行调用,遵循相同的业务流程。不同的业务通过呼叫接口参数callType进行区分,1视频、0音频。
1.2、接口逻辑
接口调用是采取异步调用的方式。所有的呼叫相关接口的调用结果通过回调接口RL_YTX.onCallMsgListener来接受服务端返回的各种状态。
1.3、业务流程
- 客户A呼叫客户B发起请求
- 云通讯服务端收到A请求并把请求转发给B
- 客户B收到请求并应答
- 云通讯服务端收到B应答并转发A
- A收到应答,通话建立。
2、代码示例
设置音视频展示标签
假设Tony想要和John 进行视频通话,要考虑如何在本地展示对方影像和自己影像。那么就需要设置页面Video句柄。(发起视频呼叫和接受视频呼叫之前需要先调用此方法),示例代码如下:
- //view 是展示对方的影像或声音
- //localView是展示自己的影像或声音
- //这里的 view 和 localView 根据实际需要选择video标签或者audio标签,要求是dom元素
- RL_YTX.setCallView(view,localView);
发送音视频请求
假设Tony对John发起呼叫,示例代码如下:
- var makeCallBuilder= new RL_YTX.MakeCallBuilder();
- makeCallBuilder.setCalled(‘John的号码’);
- makeCallBuilder.setCallType(1);//呼叫的类型 0 音频 1视频
- RL_YTX.setCallView(view,localView); //呼叫类型1的时候这么传//
- RL_YTX.setCallView(view,null);//呼叫类型是0的时候这么传
- RL_YTX.makeCall(makeCallBuilder,function(){
- //呼叫成功
- }, function callback(obj){
- obj.code
- //错误码
- })
接收音视频请求
John接收Tony的呼叫请求,示例代码如下:
- var voipAcceptBuilder = new RL_YTX.AcceptCallBuilder();
- voipAcceptBuilder.setCallId(callId);//请求的callId
- //通过RL_YTX.onCallMsgListener(callback)中的callback.callId属性获得callId
- voipAcceptBuilder.setCaller(caller);//请求的主叫号码,即Tony的号码
- //通过RL_YTX.onCallMsgListener(callback)中的callback.caller属性获得caller
- RL_YTX.accetpCall(voipAcceptBuilder,function(){
- }, function callback(obj)
- {
- alert(obj. code) //错误码
- })
拒绝音视频请求
John 拒绝Tony的请求,示例代码如下:
- var VoipRejectBuilder = new RL_YTX.RejectCallBuilder();VoipRejectBuilder.setCallId(callId);
- //请求的callId
- VoipRejectBuilder.setCaller(caller);
- //请求的主叫号码,即Tony的号码
- //通过RL_YTX.onCallMsgListener(callback)中的callback.callId属性获得callId
- //通过RL_YTX.onCallMsgListener(callback)中的callback.caller属性获得caller
- //通过RL_YTX.onCallMsgListener(callback)中的callback.reason属性获得reason
- RL_YTX.rejectCall(VoipRejectBuilder,function(){
- }, function(obj){
- alert(obj.code)})
取消音视频
Tony 呼叫John后需要取消呼叫,示例代码如下:
- var VoipReleaseBuilder = new RL_YTX.ReleaseCallBuilder();
- VoipReleaseBuilder.setCallId(callId);
- //请求的callId
- VoipReleaseBuilder.setCaller(caller);
- //请求的主叫号码,即Tony的号码
- VoipReleaseBuilder.setCalled(called);
- //请求的被叫号码,即John的号码
- //通过RL_YTX.onCallMsgListener(callback)中的callback.callId属性获得callId
- //通过RL_YTX.onCallMsgListener(callback)中的callback.caller属性获得called
- //通过RL_YTX.onCallMsgListener(callback)中的callback.called属性获得caller
- RL_YTX.releaseCall(VoipReleaseBuilder,function(){
- }, function(obj){
- alert(obj.code)})
H5设置编码
在调用音频/视频录制之前调用。示例代码如下:
- RL_YTX.setRecordVideo();
视频录制
点对点过程中,录制本地视频。
代码示例
- $(document).on('click', '[data-record]', function() {//视频录制
- //根据属性录制本地或者远端的
- var s = $(this).attr("data-record");
- if(s == "true"){
- s = "local";
- }else{
- s= "remote"
- }
- //第一个参数是远端声音还是本地声音,第二个参数为是否录制视频,true为录制视频+音频,false为音频
- var record = RL_YTX.VideoRecord(s,true);
- //接口会返回一个对象,对象中含有录制的开始,停止,暂停,继续功能。
- console.log(record);
- //如果有错误码,则代表该浏览器不支持视频录制功能。
- if(record.code){
- alert("不支持");
- return ;
- }
- //开始录制视频
- record.start();
- //10秒后自动停止录制
- setTimeout(function (e) {
- record.stop(function (obj) {
- //停止录制接口接收一个回调函数,
- console.log(obj);
- //创建一个a标签,用于下载
- var a = document.createElement("a");
- a.href = obj.url;
- //设置下载文件的文件名,以时间戳命名。
- a.download = new Date().getTime();
- a.click();
- });
- console.log("10s停止录制");
- },10000);
- });
切换摄像头
代码示例
- // 获取设备id
- RL_YTX.getDevices(function(arr){
- if(arr.value.length <2)
- return;
- //判断设备数量,如果小于2个则没有切换的必要
- try{
- var did = arr.value[0].deviceId;
- //将获取到的id传给SDK
- RL_YTX.exchangeCamera(did,function (e) {
- console.log(e,"切换成功");
- },function (err) {
- console.log(err,"切换失败");
- });
- }catch (e){
- alert(e.message);
- }
- });
设置摄像头/麦克风
- //关闭麦克风
- RL_YTX.deployVideoVoice(false,"audio");
- //关闭摄像头
- RL_YTX.deployVideoVoice(false,"video");
音视频消息通知
客户端监听sdk的呼叫事件,根据obj.state区分调用哪些回调参数并进行相应的页面逻辑处理。(在登录成功的方法里面设置),示例代码如下:
- RL_YTX.onCallMsgListener(function(obj){
- obj.callId;//唯一消息标识
- obj.caller;//主叫号码
- obj.called; //被叫无值
- obj.callType;//0 音频 1 视频
- obj.state;
- //1 对方振铃(被叫的振铃消息) 2 呼叫中(主叫呼叫发送成功返回该值) 3 呼叫建立(被叫接收后主叫监听到该值)
- //4 呼叫失败(对主叫;对方拒绝或者忙) 5 结束通话(主叫取消成功和主、被叫挂机成功后得到该值)
- //6 呼叫到达(被叫监听到呼叫请求时获得该值)
- //7 媒体已正式建立连接(被叫获取该值)
- obj.code;// 200操作成功,非200代表因本地原因,导致无法接受音视频邀请(例如不支持音视频等),具体原因请参照错误码
- }