Android端實時音視頻開發指南


簡介

yun2win-sdk-Android提供Android端實時音視頻完整解決方案,方便客戶快速集成實時音視頻功能. SDK 提供的能力如下:

  • 發起
  • 加入
  • AVClient
  • Channel
  • AVMember

 

開發准備

  • 到  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.屏幕共享功能在移動端暫時不能主動發起.

用戶手冊

AVSDK手冊

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM