簡介
yun2win-sdk-Android提供Android端實時音視頻完整解決方案,方便客戶快速集成實時音視頻功能. SDK 提供的能力如下:
- 發起
- 加入
- AVClient
- Channel
- AVMember
yun2win官網:www.yun2win.com
SDK下載地址:http://www.yun2win.com/h-col-107.html
開發准備
-
到 github下載 yun2winSDK及demo
-
下載源碼詳解
app為主體顯示Module uikit為公共服務Module
app下libs的yun2win-av-0.1.jar為音視頻,屏幕共享SDK
主體Module結構圖
base文件夾:app初始相關類
Bridge文件夾:推送連接、接收和發送
common文件夾:公共配置等
db文件夾:數據庫管理
entities文件夾:實體集合
manage文件夾:模型實體管理
model文件夾:模型集合
service文件夾:服務管理
ui文件夾:界面相關
-
配置信息
在清單文件AndroidManifest.xml里加入以下權限,以及寫上你注冊的appkey
權限配置(實際開發中可能需要更多的權限,可參考demo):
復制<?xml version="1.0" encoding="utf-8" ?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.yun2win.demo"> <!-- 加入應用需要的權限 --> <!-- 網絡相關 --> <uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> <uses-permission android:name="android.permission.CHANGE_WIFI_STATE" /> <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /> <uses-permission android:name="android.permission.WRITE_SETTINGS" /> <!-- 手機狀態 --> <uses-permission android:name="android.permission.GET_TASKS" /> <uses-permission android:name="android.permission.FLASHLIGHT" /> <uses-permission android:name="android.permission.VIBRATE" /> <uses-permission android:name="android.permission.WAKE_LOCK" /> <uses-permission android:name="android.permission.BLUETOOTH" /> <uses-permission android:name="android.permission.BLUETOOTH_ADMIN" /> <uses-permission android:name="android.permission.CHANGE_CONFIGURATION" /> <uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" /> <!-- 讀寫文件 --> <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <!-- 多媒體 --> <uses-permission android:name="android.permission.CAMERA" /> <uses-permission android:name="android.permission.RECORD_AUDIO" /> <uses-permission android:name="android.permission.READ_PHONE_STATE" /> <application android:name="y2w.base.AppContext" android:allowbackup="true" android:icon="@drawable/lyy_icon" android:label="@string/app_name" android:theme="@style/AppTheme"> <!-- 設置yun2win應用的appkey --> <meta-data android:name="YUN2WIN_APP_KEY" android:value="CerAgk970T8MlUmz" /> </application> </manifest>
關於YUN2WIN_APP_KEY對應的value獲取,在創建應用后,申請APPKEY並進行相關配置。
-
app打包混淆
在proguard文件中加入以下keep
-keep class com.yun2win.** {*;}
-dontwarn com.yun2win.**
初始化
將以下代碼復制到項目Application類onCreate()中
復制
AVClient.init(this);
發起
調用以下代碼創建頻道:
復制
private void createChannel(){ avClient = new AVClient(currentUser.getEntity().getId(), currentUser.getEntity().getName(), currentUser.getEntity().getAvatarUrl(),currentUser.getImToken().getAccessToken()); //創建頻道 avClient.createChannel(new AVBack.Result() { @Override public void onSuccess(Channel channel) { avChannel = channel; avChannel.setOnMembersChangedListener(new MembersChangedListener()); avChannel.setOnVideoListener(new VideoListener()); avChannel.setOnAudioListener(new AudioListener()); avChannel.setOnScreenListener(new ScreenListener()); avChannel.join();//加入通知 memberNotice(memberIds); if(callType.equals(EnumManage.AvCallType.video.toString())){ handler.sendEmptyMessage(Oper.OpenVideo); handler.sendEmptyMessage(Oper.OpenAudio); }else{ handler.sendEmptyMessage(Oper.OpenAudio); } } @Override public void onError(Integer integer) { noticeShow("創建頻道失敗"); } }); }
加入
調用以下代碼加入頻道:
復制
private void getChannel(String channelId){ avClient = new AVClient(currentUser.getEntity().getId(),currentUser.getEntity().getName(), currentUser.getEntity().getAvatarUrl(), currentUser.getImToken().getAccessToken()); //獲取頻道 avClient.getChannel(channelId, new AVBack.Result() { @Override public void onSuccess(Channel channel) { avChannel = channel; avChannel.setOnMembersChangedListener(new MembersChangedListener()); avChannel.setOnVideoListener(new VideoListener()); avChannel.setOnAudioListener(new AudioListener()); avChannel.setOnScreenListener(new ScreenListener()); avChannel.join();//加入通知 if (callType.equals(EnumManage.AvCallType.video.toString())) { handler.sendEmptyMessage(Oper.OpenVideo); handler.sendEmptyMessage(Oper.OpenAudio); } else { handler.sendEmptyMessage(Oper.OpenAudio); } } @Override public void onError(Integer integer) { noticeShow("獲取頻道失敗"); } }); }
提醒
加入方法必須填入需要加入的channelId。
Channel
頻道類:主要方法,其他查看API手冊
復制
join() 加入頻道 void leave() 離開頻道 void openAudio() 開啟語音 void openVideo() 開啟視頻 void setMute(boolean mute) 設置靜音 void setOnAudioListener(Channel.OnAudioListener onAudioListener) 設置音頻監聽 void setOnMembersChangedListener(Channel.OnMembersChangedListener onMembersChangedListener) 設置成員變更監聽 void setOnScreenListener(Channel.OnScreenListener onScreenListener) 設置屏幕共享監聽 void setOnVideoListener(Channel.OnVideoListener onVideoListener) 設置視頻監聽 void setSpeaker(boolean speaker) 設置揚聲器 void switchCamera() 轉攝像頭
AVMember
頻道成員類:主要方法,其他查看API手冊
復制
org.webrtc.VideoTrack getScreenTrack() 獲取屏幕共享流 java.lang.String getUid() 獲取成員唯一標識碼 org.webrtc.VideoTrack getVideoTrack() 獲取視頻流 boolean isAudioMuted() 是否開啟靜音 boolean isAudioOpened() 是否開啟語音 boolean isScreenOpened() 是否開屏幕共享 boolean isVideoOpened() 是否開啟視頻 void setAudioMuted(boolean audioMuted) 設置是否靜音 void setAudioOpened(boolean audioOpened) 設置是否開啟語音 void setScreenOpened(boolean screenOpened) 設置屏幕共享 void setScreenTrack(org.webrtc.VideoTrack screenTrack) 設置屏幕共享流 void setUid(java.lang.String uid) 設置成員唯一標識碼 void setVideoOpened(boolean videoOpened) 設置是否開啟視頻 void setVideoTrack(org.webrtc.VideoTrack videoTrack) 設置視頻流 從類繼承的方法 java.lang.Object
注意事項
復制
1.創建或者獲取Channel對象后,都需要調用join方法加入頻道進行實時通訊. 2.為確保接收到所有回調,設置相應監聽應該在調用join方法之前. 3.SDK不會自動開啟音頻視頻屏幕共享和白板功能,開發時根據需求調用各功能. 4.屏幕共享功能在移動端暫時不能主動發起.
用戶手冊