互联网点对点音视频

音视频服务开通,请参考音视频服务开通指南

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代表因本地原因,导致无法接受音视频邀请(例如不支持音视频等),具体原因请参照错误码
  • }