欧美日韩专区-欧美日韩中文一区二区三区-欧美日韩中文一区-欧美日韩中文国产一区二区三区-日韩成人在线免费视频

1、實時音視頻開發說明

1.1、實時音頻、實時視頻均通過相同的接口進行調用,遵循相同的業務流程。不同的業務通過呼叫接口參數CallType進行區分,CallType一共有2種類型:CallType.VIDEO(視頻),CallType.VOICE(音頻)。

注意:5.0以上的SDK集成的客戶端,測試音視頻功能,音視頻,會議,群組等操作需要,先將在我們控制臺創建的應用上線,才可測試(控制臺提供的測試demo中的應用id和應用token,不能用來測試,需要使用自己在官網控制臺創建的應用的id和應用token)。

1.2、接口邏輯:

接口調用是采取異步調用的方式。所有的呼叫相關接口的調用結果通過回調接口OnVoipListener中的方法OnCallEvents來接受服務端返回的各種狀態。

1.3、業務流程

(1)客戶A呼叫客戶B發起請求

(2)云通訊服務端收到A請求并把請求轉發給B

(3)客戶B收到請求并應答

(4)云通訊服務端收到B應答并轉發A

(5)A收到應答,通話建立

2、代碼示例

? 音頻呼叫 — 我們假設Tony音頻呼叫John,則代碼如下:

String mCurrentCallId = ECDevice.getECVoIPCallManager().makeCall(ECVoIPCallManager.CallType.VOICE,
"john的賬號");
說明:mCurrentCallId如果返回空則代表呼叫失敗,可能是參數錯誤引起。否則返回是一串數字,是當前通話的標識。

                    

? 視頻呼叫 — 我們假設Tony視頻呼叫John,此時代碼和音頻呼叫相同,區別是呼叫類型需要傳入CallType.VIDEO,并且在呼叫前需要設置本地和對方的視頻view,代碼如下:

//view 顯示遠端視頻的surfaceview 
//localView本地顯示視頻的view
ECDevice.getECVoIPSetupManager().setVideoView(view, localView);
String mCurrentCallId = ECDevice.getECVoIPCallManager().makeCall(ECVoIPCallManager.CallType.VIDEO, 
"john的賬號");
說明:mCurrentCallId如果返回空則代表呼叫失敗,可能是參數錯誤引起。否則返回是一串數字,是當前通話的標識。
             
                    

? 獲取來電參數 — 被叫John接到Tony的呼叫,John同意接聽該呼入,John側的呼入activity的設置已經在sdk初始化的回調onInitialized中設置過。Sdk底層收到呼入請求后,會自動彈出該Activity.在Activity的onCreate中取出相關的參數。

1、 在呼入調起的界面中,獲取到呼入的類型是音頻或者視頻呼叫,然后來設置對應UI布局,代碼如下:

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

Bundle extras =  savedInstanceState;
//或者
Bundle extras =  getIntent().getExtras();

if (extras == null) {

     finish();

     return;

 }

//獲取是否是呼入還是呼出

 mIncomingCall = !(getIntent().getBooleanExtra(EXTRA_OUTGOING_CALL, false));

//獲取是否是音頻還是視頻

mCallType = (ECVoIPCallManager.CallType) 

getIntent().getSerializableExtra(ECDevice.CALLTYPE);       

//獲取當前的callid

mCallId = getIntent().getStringExtra(ECDevice.CALLID);

//獲取對方的號碼

 mCallNumber = getIntent().getStringExtra(ECDevice.CALLER);

}

}

                    

2、假設John側調起來音頻或者視頻呼入的界面,界面上有“接受”和“拒絕”兩個按鈕;

(1)John點擊“接受”按鈕,則調用的代碼:

//如果視頻呼叫,則在接受呼叫之前,需要先設置視頻通話顯示的view

ECDevice.getECVoIPSetupManager().setVideoView(view, localView);

//view 顯示遠端視頻的surfaceview 

//localView本地顯示視頻的view

ECDevice.getECVoIpCallManager().acceptCall(mCurrentCallId);

                    

(2)John點擊“拒絕”按鈕,音視頻拒絕的代碼是一致的,調用的代碼是:

ECDevice.getECVoIpCallManager().rejectCall(mCurrentCallId,”拒絕的原因,傳入整形值”); 

                    

? 處理回調事件 — Tony在呼叫John的過程中,會有若干狀態返回,都在回調onCallEvents中處理,其監聽的設置已經在sdk初始化的回調onInitialized中設置過。代碼示例如下:

注意:在集成音視頻通話的時候,當結束當前通話的時候,需要在處理回調事件的onCallEvents中調用一下releaseCall方法,以保證當前通話占用的資源都釋放了,避免在下次呼叫的時候出現線路被占用現象。(android、ios均需這樣操作),Android的調用地方,onCallEvents中的 ECCALL_RELEASED:

@Override

protected void onCallEvents(ECVoIPCallManager.VoIPCall voipCall) {

      if(voipCall==null) return;

      switch(voipCall. callState){

       case ECCALL_ALERTING: 

          Log(” 對方振鈴”);

          break;

       case ECCALL_PROCEEDING: 

          Log(” 呼叫中”);

          break;

       case ECallAnswered: 

          Log(” John接受了呼叫應答”);

          break;

       case ECCALL_FAILED:// 

          Log(” 呼叫失敗”);

          break;

       case ECCALL_RELEASED:

           //無論是Tony還是John主動結束通話,雙方都會進入到此回調

           Log(” 結束當前通話”);

           break;

       default:

           break;

}

}

}

                        

? 處理回調事件 — Tony和John的通話過程中,任何一方想結束呼叫,則都可以調用如下代碼:

ECDevice.getECVoIpCallManager().releaseCall(mCurrentCallId);
                
                    

3、輔助接口

(1)設置揚聲器狀態

ECDevice. getECVoIPSetupManager().enableLoudSpeaker( boolean on);
功能: 設置揚聲器的狀態;
參數:on:true是開啟,false則為關閉。

                    

(2)獲取揚聲器狀態

ECDevice. getECVoIPSetupManager().getLoudSpeakerStatus();
功能:獲取當前揚聲器的狀態
參數:無
返回值:true是開啟,false則為關閉。

                    

(3)設置靜音

ECDevice. getECVoIPSetupManager().setMute(boolean on);
功能:設置通話靜音狀態
參數:on:傳入true則對方聽不到說話,false則對方可以聽到說話。
返回值:無

                    

(4)獲取靜音的狀態

ECDevice.getECVoIPSetupManager().getMuteStatus();
功能:獲取當前通話靜音狀態
參數:無
返回值:返回true則是靜音狀態,false則不是靜音狀態.

                    

(5)設置視頻通話顯示的窗口

ECDevice.getECVoIPSetupManager().setVideoView( SurfaceView view,  SurfaceView localView);
功能:設置視頻通話過程中顯示的視圖
參數:view對方顯示的視圖,localView本地顯示的視圖。
返回值:無
                    

(6)創建一個用于繪制視頻圖像的ECOpenGlView控件

ECOpenGlView mGlView = new ECOpenGlView(this);
// 設置預覽類型為本地預覽、可以顯示于其他SurfaceView之上
mGlView.setGlType(ECOpenGlView.RenderType.RENDER_PREVIEW);
// 或者設置為遠端繪制
mGlView.setGlType(ECOpenGlView.RenderType.RENDER_REMOTE);       
// 設置當前圖像填充方式(根據中心區域顯示,填充屏幕并剪切)
mSelfGlView.setAspectMode(ECOpenGlView.AspectMode.CROP);
// 按照圖像的比例顯示(分辨率和圖像分辨率不等時上下、左右會出現一種黑邊情況)
mSelfGlView.setAspectMode(ECOpenGlView.AspectMode.FIT);
// 按照View的寬高拉伸圖像
mSelfGlView.setAspectMode(ECOpenGlView.AspectMode.FILL);
                    

(7)設置遠端視頻圖像顯示View為ECOpenGlView

ECVoIPSetupManager setUpMgr = ECDevice.getECVoIPSetupManager();
if(setUpMgr != null) {
         setUpMgr.setVideoView(mGlView , mCaptureView);
}
                    

(8)設置本地/遠端視頻圖像顯示View為ECOpenGlView

// 創建一個本地圖像顯示控件
ECOpenGlView mSelfGlView = new ECOpenGlView(this);
// 設置預覽類型為本地預覽、可以顯示于其他SurfaceView之上
mSelfGlView.setGlType(ECOpenGlView.RenderType.RENDER_PREVIEW);
// 設置當前圖像填充方式(根據中心區域顯示,填充屏幕并剪切)
mSelfGlView.setAspectMode(ECOpenGlView.AspectMode.CROP);
// 創建一個遠端圖像顯示控件
ECOpenGlView mRemoteGlView = new ECOpenGlView(this);
// 設置預覽類型為遠端、可以顯示于其他SurfaceView之下
mRemoteGlView.setGlType(ECOpenGlView.RenderType.RENDER_PREVIEW);
// 設置當前圖像填充方式(根據中心區域顯示,填充屏幕并剪切)
mRemoteGlView.setAspectMode(ECOpenGlView.AspectMode.CROP);
// 調用SDK接口設置圖像顯示View
ECVoIPSetupManager setUpMgr = ECDevice.getECVoIPSetupManager();
if(setUpMgr != null) {
		// 設置圖像采集
		setUpMgr.setCaptureView(new ECCaptureView(this));
		// 設置本地遠端圖像顯示View
		setUpMgr.setGlDisplayWindow(mSelfGlView , mRemoteGlView);
	}
                    

(9)動態切換本地/遠端圖像(對換本地遠端圖像顯示位置)

		mSelfGlView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                ECVoIPSetupManager setUpMgr = ECDevice.getECVoIPSetupManager();
                if(setUpMgr != null) {
                    // 設置當前遠端圖像顯示為全屏/小屏幕
                    mMaxSizeRemote = !mMaxSizeRemote;
                    // 調用接口對換View位置
                    if(mMaxSizeRemote) {
                        setUpMgr.setGlDisplayWindow(mSelfGlView , mRemoteView);
                    } else {
                        setUpMgr.setGlDisplayWindow(mRemoteView , mSelfGlView);
                    }

                }
            }
        });
                    

(10)視頻會議使用ECOpenGlView顯示成員圖像

// 創建一個圖像顯示控件View
ECOpenGlView mGlView = new ECOpenGlView(this);
mGlView.setGlType(ECOpenGlView.RenderType.RENDER_REMOTE);
mSelfGlView.setAspectMode(ECOpenGlView.AspectMode.CROP);
// 獲取會議管理API接口
ECMeetingManager meetMgr = ECDevice.getECMeetingManager();
// 使用接口設置圖像顯示View
meetMgr.requestMemberVideoInVideoMeeting("conf0000", null, "yuntx", mGlView , "ip", 8080, null);
                    

(11)獲取手機攝像頭參數

ECDevice.getECVoIPSetupManager().getCameraInfos();
功能: 獲取手機攝像頭參數信息(攝像頭個數,名稱、以及攝像頭所持有的分辨率)
參數:無。
返回值:手機攝像頭參數信息

                    

(12)切換前置和后置攝像頭

	/**
     * 選擇攝像頭。可以在通話過程中選擇;如果不調用,底層將使用系統默認攝像頭
     * @param cameraIndex CameraInfo的index值
     * @param capabilityIndex CameraCapability的index值。范圍[0,capabilityCount-1]
     * @param fps 最大幀數
     * @param rotate 旋轉的角度( {ROTATE_AUTO,ROTATE_0,ROTATE_90,ROTATE_180,ROTATE_270};中的值)
     * @param force 是否強制啟動本SDK調用的攝像頭。默認選false
     * @param scale 縮放
     * @return 是否成功 0:成功; 非0失敗
     */
      ECDevice.getECVoIPSetupManager().selectCamera(int cameraIndex, int capabilityIndex,
			int fps, Rotate rotate, boolean force,float scale);

                    

(13)設置VoIP呼叫透傳信息

// 創建一個個人信息參數對象
  VoIPCallUserInfo mUserInfo = new VoIPCallUserInfo();
  mUserInfo.setNickName("nickname");
  mUserInfo.setPhoneNumber("PhoneNumber");
// 調用VoIP設置接口注入VoIP呼叫透傳參數
  ECVoIPSetupManager setupManager = ECDevice.getECVoIPSetupManager();
  setupManager.setVoIPCallUserInfo(mUserInfo);

                    

(14)設置是否啟用來去電鈴聲播放

// 獲取一個VoIP設置接口對象
ECVoIPSetupManager setupManager = ECDevice.getECVoIPSetupManager();

// 設置來電響鈴(v5.1.8r版本以及以前)
setupManager.setIncomingSoundEnabled(true);

// 查詢是否來電響鈴(v5.1.8r版本以及以前)
setupManager.isIncomingSoundEnabled();

// 設置VoIP呼叫是否播放回鈴音(v5.1.8r版本以及以前)
setupManager.setOutgoingSoundEnabled(true);

// 查詢是否啟用呼叫播放回鈴音(v5.1.8r版本以及以前)
setupManager.isOutgoingSoundEnabled();

// 設置VoIP呼叫是否播放呼叫失敗提示音(v5.1.8r版本以及以前)
setupManager.setDisconnectSoundEnabled(true);

// 查詢是否啟用呼叫失敗提示音(v5.1.8r版本以及以前)
setupManager.isDisconnectSoundEnabled();

v5.1.9r版本開始通過如下接口設置:
// 設置VOIP 自定義鈴聲路徑
ECVoIPSetupManager setupManager = ECDevice.getECVoIPSetupManager();
if(setupManager != null) {
	// 目前支持下面三種路徑查找方式
	// 1、如果是assets目錄則設置為前綴[assets://]
	setupManager.setInComingRingUrl(true, "assets://phonering.mp3");
	setupManager.setOutGoingRingUrl(true, "assets://phonering.mp3");
	setupManager.setBusyRingTone(true, "assets://played.mp3");
	// 2、如果是raw目錄則設置為前綴[raw://]
	// 3、如果是SDCard目錄則設置為前綴[file://]
}

                    

(15)設置音頻處理開關,在通話前調用

// 獲取一個VoIP設置接口對象
ECVoIPSetupManager setupManager = ECDevice.getECVoIPSetupManager();
// 比如設置開啟回音消除模式
setupManager.setAudioConfigEnabled(ECVoIPSetupManager.AudioType.AUDIO_EC ,
        true , ECVoIPSetupManager.AudioMode.EC_Conference);

                    

(16)查詢相關的音頻處理參數

// 獲取一個VoIP設置接口對象
ECVoIPSetupManager setupManager = ECDevice.getECVoIPSetupManager();
// 比如是否啟用回音消除
setupManager.getAudioConfig(ECVoIPSetupManager.AudioType.AUDIO_EC);
// 查詢回音消除模式
setupManager.getAudioConfigMode(ECVoIPSetupManager.AudioType.AUDIO_EC);

                    

(17)設置視頻通話碼流(需要在通話前使用)

// 獲取一個VoIP設置接口對象
ECVoIPSetupManager setupManager = ECDevice.getECVoIPSetupManager();
// 比如:將視頻通話碼流設置成150 
setupManager.setVideoBitRates(150);

                    

(18)設置SDK支持的編解碼方式,默認全部支持

// 獲取一個VoIP設置接口對象
ECVoIPSetupManager setupManager = ECDevice.getECVoIPSetupManager();
// 比如:設置當前通話使用 G729編碼傳輸
setupManager.setCodecEnabled(ECVoIPSetupManager.Codec.Codec_G729 , true);
// 查詢制定編解碼是否支持
setupManager.getCodecEnabled(ECVoIPSetupManager.Codec.Codec_G729);

                    

(19)實時獲取通話中的統計數據

// 獲取一個VoIP設置接口對象
ECVoIPSetupManager setupManager = ECDevice.getECVoIPSetupManager();
// 比如:獲取音頻通話信息
// 具體參數信息可以參考API文檔CallStatisticsInfo
CallStatisticsInfo statistics = setupManager.getCallStatistics("callId", false);

                    

(20)獲取VoIP、視頻、實時對講、聊天室、會議上下行流量

// 獲取一個VoIP設置接口對象
ECVoIPSetupManager setupManager = ECDevice.getECVoIPSetupManager();
// 具體參數信息可以參考API文檔NetworkStatistic
NetworkStatistic networkStatistic = setupManager.getNetworkStatistic("callId");

                    

(21)獲取服務器callSid,建議通話建立后獲取。代碼示例如下:

 private Map map = new HashMap();

   private void get(){
        String s = ECDevice.getECVoIPCallManager().getUserData(3,mCallId);
        if(!TextUtils.isEmpty(s)){
            if(s.contains(";")) {
               String[] arr = s.split("\\;");
               if (arr != null) {
                   for (String item : arr) {
                       if (!TextUtils.isEmpty(item) && item.startsWith("servercallid")){
                            String[] arr2 = item.split("\\=");
                           if (arr2 != null && arr2.length == 2) {
                                map.put("sid", arr2[1]);
                           }
                       }
                   }
                }
            }else {
               if(s.startsWith("servercallid=")){
                    String [] arr = s.split("\\=");
                    if(arr!=null&&arr.length==2){
                        map.put("sid",arr[1]);
                    }
                }
            }
        }
 }
                    

(22)獲取用戶在線狀態

ECDevice.getUsersState(new String[]{userId}, new OnGetUsersStateListener() {
            @Override
            public void onGetUsersState(ECError error, ECUserState... userState) {
                //查詢多個用戶狀態回調 可變數組 userState
            }
        });

                    

(23)單應用多證書

    /**
	 * ECDevice類
     * 多證書設置
     * @param pushCerKey 推送證書標識,與服務器上傳證書保持一致
     */
    ECDevice.setPushCerKey("xxxx");
                    

(24)設置網絡代理

    
    /**
	 * ECDevice類
     * 設置網絡代理。需要走代理時登錄前設置,不支持ssl;socks5代理支持im和點對點(底層將關閉媒體流內網打洞),http代理支持im
     * @param proxyHost   代理服務器地址,最大長度255。當設置空時,取消代理
     * @param proxyPort   代理端口
     * @param authType    鑒權類型。 目前支持 0 不鑒權;2 用戶名密碼鑒權
     * @param userName    用戶名,最大長度255。authType=2時有效
     * @param userPass    用戶名密碼,最大長度255。authType=2時有效
     * @param proxyType   代理類型。 目前支持 0 socks5代理;1 http代理
     * @return
     */
	ECDevice.setNetworkProxy(proxyHost,proxyPort,authType,userName,userPass,proxyType);
                    

文檔更新時間:2017年12月4日

主站蜘蛛池模板: 中文字幕在线视频精品 | 一牛精品视频在线观看免费 | 三妻四妾高清完整版在线观看免费 | 久久精品久久精品久久 | 综合久久久久6亚洲综合 | 亚洲欧美一区二区三区在线播放 | 亚洲开心网| 国产成人综合久久精品亚洲 | 国产无限制自拍 | 一区免费在线观看 | 午夜剧场刺激性爽免费视频 | 国色天香论坛视频高清在线 | 国产精品久久国产精品99盘 | 日韩欧美精品在线观看 | 精品麻豆国产 | 欧美一区二区日韩一区二区 | 亚洲国产色婷婷精品综合在线观看 | 成人精品一区二区www | 制服丝袜天堂 | 精品欧美亚洲韩国日本久久 | 一级毛片在线播放免费 | 99久久综合狠狠综合久久一区 | 国产精品一区久久 | 亚洲国产成人久久综合一区77 | 伊人激情在线 | 国内精品久久久久久 | 中文字幕在线永久在线视频2020 | 迅雷在线观看神马电影 | 亚洲电影在线观看 | 亚洲国产一区二区三区亚瑟 | 在线精品免费视频 | 亚洲黄色小视频 | 伊人精品视频在线 | 第四色婷婷基地 | 羞羞动漫免费看网站 | 日韩欧美综合 | 亚洲人天堂 | 亚洲一区二区久久 | 羞羞网页 | 日韩专区视频 | 国产小视频在线高清播放 |