简介
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.屏幕共享功能在移动端暂时不能主动发起.
用户手册
AVSDK手册