Android端实时音视频开发指南
簡介
yun2win-sdk-Android提供Android端實(shí)時音視頻完整解決方案,方便客戶快速集成實(shí)時音視頻功能. SDK 提供的能力如下:
- 發(fā)起
- 加入
- AVClient
- Channel
- AVMember
yun2win官網(wǎng):www.yun2win.com
SDK下載地址:http://www.yun2win.com/h-col-107.html
?
開發(fā)準(zhǔn)備
- 注冊并創(chuàng)建應(yīng)用
- 到?github下載yun2winSDK及demo
- 下載源碼詳解
app為主體顯示Module uikit為公共服務(wù)Module
app下libs的yun2win-av-0.1.jar為音視頻,屏幕共享SDK
主體Module結(jié)構(gòu)圖
base文件夾:app初始相關(guān)類
Bridge文件夾:推送連接、接收和發(fā)送
common文件夾:公共配置等
db文件夾:數(shù)據(jù)庫管理
entities文件夾:實(shí)體集合
manage文件夾:模型實(shí)體管理
model文件夾:模型集合
service文件夾:服務(wù)管理
ui文件夾:界面相關(guān)
- 配置信息
在清單文件AndroidManifest.xml里加入以下權(quán)限,以及寫上你注冊的appkey
權(quán)限配置(實(shí)際開發(fā)中可能需要更多的權(quán)限,可參考demo):
復(fù)制 <?xml version="1.0" encoding="utf-8" ?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.yun2win.demo"> <!-- 加入應(yīng)用需要的權(quán)限 --> <!-- 網(wǎng)絡(luò)相關(guān) --> <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" /> <!-- 手機(jī)狀態(tài) --> <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"> <!-- 設(shè)置yun2win應(yīng)用的appkey --> <meta-data android:name="YUN2WIN_APP_KEY" android:value="CerAgk970T8MlUmz" /> </application> </manifest>關(guān)于YUN2WIN_APP_KEY對應(yīng)的value獲取,在創(chuàng)建應(yīng)用后,申請APPKEY并進(jìn)行相關(guān)配置。
- app打包混淆
在proguard文件中加入以下keep
-keep class com.yun2win.** {*;}
-dontwarn com.yun2win.**
初始化
將以下代碼復(fù)制到項(xiàng)目Application類onCreate()中
復(fù)制 AVClient.init(this);發(fā)起
調(diào)用以下代碼創(chuàng)建頻道:
復(fù)制 private void createChannel(){ avClient = new AVClient(currentUser.getEntity().getId(), currentUser.getEntity().getName(), currentUser.getEntity().getAvatarUrl(),currentUser.getImToken().getAccessToken()); //創(chuàng)建頻道 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("創(chuàng)建頻道失敗"); } }); }加入
調(diào)用以下代碼加入頻道:
復(fù)制 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手冊
復(fù)制 join() 加入頻道 void leave() 離開頻道 void openAudio() 開啟語音 void openVideo() 開啟視頻 void setMute(boolean mute) 設(shè)置靜音 void setOnAudioListener(Channel.OnAudioListener onAudioListener) 設(shè)置音頻監(jiān)聽 void setOnMembersChangedListener(Channel.OnMembersChangedListener onMembersChangedListener) 設(shè)置成員變更監(jiān)聽 void setOnScreenListener(Channel.OnScreenListener onScreenListener) 設(shè)置屏幕共享監(jiān)聽 void setOnVideoListener(Channel.OnVideoListener onVideoListener) 設(shè)置視頻監(jiān)聽 void setSpeaker(boolean speaker) 設(shè)置揚(yáng)聲器 void switchCamera() 轉(zhuǎn)攝像頭AVMember
頻道成員類:主要方法,其他查看API手冊
復(fù)制 org.webrtc.VideoTrack getScreenTrack() 獲取屏幕共享流 java.lang.String getUid() 獲取成員唯一標(biāo)識碼 org.webrtc.VideoTrack getVideoTrack() 獲取視頻流 boolean isAudioMuted() 是否開啟靜音 boolean isAudioOpened() 是否開啟語音 boolean isScreenOpened() 是否開屏幕共享 boolean isVideoOpened() 是否開啟視頻 void setAudioMuted(boolean audioMuted) 設(shè)置是否靜音 void setAudioOpened(boolean audioOpened) 設(shè)置是否開啟語音 void setScreenOpened(boolean screenOpened) 設(shè)置屏幕共享 void setScreenTrack(org.webrtc.VideoTrack screenTrack) 設(shè)置屏幕共享流 void setUid(java.lang.String uid) 設(shè)置成員唯一標(biāo)識碼 void setVideoOpened(boolean videoOpened) 設(shè)置是否開啟視頻 void setVideoTrack(org.webrtc.VideoTrack videoTrack) 設(shè)置視頻流 從類繼承的方法 java.lang.Object注意事項(xiàng)
復(fù)制 1.創(chuàng)建或者獲取Channel對象后,都需要調(diào)用join方法加入頻道進(jìn)行實(shí)時通訊. 2.為確保接收到所有回調(diào),設(shè)置相應(yīng)監(jiān)聽?wèi)?yīng)該在調(diào)用join方法之前. 3.SDK不會自動開啟音頻視頻屏幕共享和白板功能,開發(fā)時根據(jù)需求調(diào)用各功能. 4.屏幕共享功能在移動端暫時不能主動發(fā)起.用戶手冊
AVSDK手冊
?
?
轉(zhuǎn)載于:https://www.cnblogs.com/yun2win/p/5780872.html
總結(jié)
以上是生活随笔為你收集整理的Android端实时音视频开发指南的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python汉化之后好用吗_关于Pyth
- 下一篇: Android性能优化典范-第2季