Skip to main content

general

SDK татаж авах​

app/libs/libijkplayer.aar, app/libs/libqrtc.aar file-уудыг өөрийн төсөл дотор libs folder-т байршуулах
app/src/main/java/com/qrtc/ folder-г өөрийн төсөл дотор src/main/java/com folder-т байршуулах
  • SDK-г ашигласан жишээ код: Доор байрлах Github repository-н src/main/java/com/suhang/meeting/MeetingMainActivity.java

AndroidSDK --> https://gitlab.com/callpromn/platform-rtc/PlatformRTC-Android

Шаардлагатай сангууд суулгах​

build.gradle дээр бусад нэмэх сан, тохиргоонууд

// Шинэ хувилбарыг (version) дэмжихгүй байх магадлалтай тул доорх хувилбарын дагуу суулгана уу
android {
compileSdk 33

defaultConfig {
minSdkVersion 21
targetSdk 33
versionCode 2
versionName "1.2.6"
}

buildTypes {
release {
minifyEnabled false
}
}

compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
}

// build.gradle дээр нэмэгдэх сангууд
dependencies {
implementation files('libs/libqrtc.aar')
implementation files('libs/libijkplayer.aar') // Зөвхөн video дуудлага ашиглах үед
implementation 'androidx.appcompat:appcompat:1.3.1'
implementation 'androidx.multidex:multidex:2.0.1'
implementation 'com.google.android.material:material:1.6.0'
implementation 'androidx.constraintlayout:constraintlayout:2.1.4'
testImplementation 'junit:junit:4.+'
androidTestImplementation 'androidx.test.ext:junit:1.1.5'
androidTestImplementation 'androidx.test.espresso:espresso-core:3.5.1'
implementation 'com.tencent.bugly:crashreport:3.1.0'
implementation 'com.tencent.bugly:nativecrashreport:3.7.0'
implementation 'com.tencent:mmkv-static:1.2.2'
implementation 'com.squareup.retrofit2:retrofit:2.2.0'
implementation 'com.squareup.retrofit2:converter-gson:2.2.0'
implementation 'com.squareup.picasso:picasso:2.71828'
implementation 'com.blankj:utilcode:1.30.7'
implementation 'me.dm7.barcodescanner:zxing:1.8.4'
implementation 'androidx.constraintlayout:constraintlayout:2.1.4'
implementation 'com.squareup.okhttp3:okhttp:4.9.0'
implementation 'de.hdodenhof:circleimageview:3.1.0'

//for libqrtc.aar lib
implementation 'com.squareup.okhttp3:logging-interceptor:4.3.0'
implementation "androidx.core:core:1.10.1"
implementation 'org.xutils:xutils:3.5.0'
implementation 'io.reactivex.rxjava2:rxandroid:2.1.1'
implementation 'io.reactivex.rxjava2:rxjava:2.2.6'
implementation 'com.linkedin.android.spyglass:spyglass:1.4.0'
implementation 'com.lovedise:permissiongen:0.0.6'
implementation 'com.nabinbhandari.android:permissions:3.8'
implementation 'com.getkeepsafe.relinker:relinker:1.4.0'
implementation 'com.alibaba:fastjson:1.2.73'
}
AndroidManifest.xml дээр нэмэгдэх permission

<?xml version="1.0" encoding="UTF-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android">

<uses-feature android:name="android.hardware.camera" />
<uses-feature android:name="android.hardware.camera.autofocus" />

<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.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.CALL_PHONE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_LOGS" />
<uses-permission android:name="android.permission.RECORD_AUDIO" />
<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.CAPTURE_AUDIO_OUTPUT" />
<uses-permission android:name="android.permission.CAPTURE_VIDEO_OUTPUT" />

<uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" />
<uses-permission android:name="android.permission.BLUETOOTH" />

<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />
<uses-permission android:name="android.permission.CHANGE_CONFIGURATION" />
<uses-permission android:name="android.permission.WRITE_SETTINGS" />

<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" android:exported="true"/>
<uses-permission android:name="android.permission.FOREGROUND_SERVICE" />

...

</manifest>

Sdk-г үүсгэж, ашиглах​

Анхаарах зүйлс
1. Дараах method-г App үүсэх үед дуудаж global-р үүсгэнэ: ( Зөвхөн video дуудлага ашиглах үед үүсгэнэ )

  PeerConnectionUtils.InitEglContext(EglBase.create(),this)
2. QRTCMeetingDelegate class-г implement хийн listener-н method-уудыг удамшуулна. ( com.qrtc.meeting.QRTCMeetingDelegate )

  • listener-н method-уудыг ашиглах гэж буй class дотроо override хийж ашиглана.

Жишээ нь:


public class MeetingMainActivity extends AppCompatActivity implements QRTCMeetingDelegate, View.OnClickListener {
@Override
public void onDisplayNameChanged(String userId,String displayName) {
...
}
}
3. QRTCMeeting class-н sharedInstance method-г ашиглан QRTCMeeting-н шинэ объект үүсгэнэ ( Sdk-г ашиглах Activity дотор )

  QRTCMeeting mQRTCMeeting = QRTCMeeting.sharedInstance(context);
4. login method-г дуудан method-уудыг ашиглахад бэлэн болно.

  mQRTCMeeting.login(sdkAppId, userId, userName, userSig, callback);
  • sdkAppId: String - ( RTC-dash-с үүсгэж өгсөн appId )

  • userId: String - Өрөөнд нэвтрэх хэрэглэгчийн Id ( Өрөөний Id + "_" + тухайн app дээрх хэрэглэгчийн ID roomId_userId )

  • userName: String - Хурлын өрөөнд бусад хэрэглэгчдэд харагдах хэрэглэгчийн нэр

  • userSig: String - Одоогоор ашиглагдахгүй байгаа тул хувьсагчийн утгыг хоосон дамжуулах ( "" )

  • callback: login method хийгдэж дууссаны дараа хийгдэх функц ( new QRTCMeetingCallback.ActionCallback()-г ашиглах )


  new QRTCMeetingCallback.ActionCallback() {
@Override
public void onCallback(int code, String msg) {
... // Жишээ нь: startCreateOrEnterMeeting();
}
}
5. Өрөөнд нэвтрэхээс өмнө бичлэгний encode болон дууны чанарыг тохируулах.

Sdk-г идэвхгүй болгох​

QRTCMeeting.destroySharedInstance()

Өрөөнд нэвтрэх​

mQRTCMeeting.enterRoom(roomId, serverUrl, acceptLanguage, xConferenceToken, avatarUrl, callback)
  • roomId: String - RTC-dash-с үүсгэж өгсөн appId дээр хурлын нэрийг залгасан ID ( appId_roomName )

  • serverUrl: String - video болон audio-г дамжуулах server-н url ( Тестийн сервер: wss://platform-test.callpro.mn/ )

  • xConferenceToken: String - Өрөөнд нэвтрэхэд ашиглагдах Token. Back-end дээр үүсгэнэ. (https://www.npmjs.com/package/rtc-token)

  • acceptLanguage, avatarUrl: String - Одоогоор ашиглагдахгүй байгаа тул хувьсагчийн утгыг хоосон дамжуулах ( "" )

  • callback: login method хийгдэж дууссаны дараа хийгдэх функц ( new QRTCMeetingCallback.ActionCallback()-г ашиглах )


  new QRTCMeetingCallback.ActionCallback() {
@Override
public void onCallback(int code, String msg) {
... // Жишээ нь: startCreateOrEnterMeeting();
}
}

Өрөөнөөс гарах​

mQRTCMeeting.exitRoom(callback)

  • callback: Өрөөнөөс гарсны дараа хийгдэх функц ( new QRTCMeetingCallback.ActionCallback()-г ашиглах )

Өрөөнд байгаа хэрэглэгчид рүү msg илгээх​

mQRTCMeeting.sendRoomTextMsg(msg, callback)
  • msg: String - хэрэглэгчид рүү илгээх мессеж

  • callback: мессеж илгээгдсний дараа хийгдэх функц ( new QRTCMeetingCallback.ActionCallback()-г ашиглах )

Бусад хэрэглэгчдэд харагдах нэрээ солих​

mQRTCMeeting.changeDisplayName(displayName, callback)
  • displayName: String - Бусад хэрэглэгчдэд харагдах нэр

  • callback: Нэр солигдсны дараа хийгдэх функц ( new QRTCMeetingCallback.ActionCallback()-г ашиглах )

CL200A төхөөрөмжийн товчлуур тохируулах​

  • 26: power button

  • 130: Recording key

  • 133: Light keys

  • 134: fn function key

  • 135: Videos

  • 284: SOS button

  • 285: PTT key


// Ашиглах activity дээрээ receiver үүсгэх
private BroadcastReceiver sosReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
try {
if (intent.getAction().equals("android.intent.action.SIDE_KEY_INTENT")) {
switch( intent.getIntExtra("key_code",0) ){
case 284: {
Log.i(TAG, "Sos button pressed");
... // SOS товчлуур дарагдахад хийгдэх зүйлс
break;
}
}
}
}
catch (Exception e){
Log.e(TAG,e.toString());
}
}
};
// onCreate хэсэгт нэмэгдэх code
@Override
protected void onCreate(Bundle savedInstanceState) {
...
IntentFilter filter = new IntentFilter("android.intent.action.SIDE_KEY_INTENT");
registerReceiver(sosReceiver, filter);
}

Listener​

Өрөө устгагдах үед​

onRoomDestroy( String roomId )

  • roomId: String - Устгагдсан өрөөний Id

Бусад хэрэглэгч өрөөнд нэвтрэх үед​

onRemoteUserEnterRoom(String userId, String userName)
  • userId: String - Өрөөнд нэвтэрсэн хэрэглэгчийн Id ( Өрөөний Id + "_" + тухайн app дээрх хэрэглэгчийн ID roomId_userId )

  • userName: String - Хурлын өрөөнд бусад хэрэглэгчдэд харагдах тухайн хэрэглэгчийн нэр

Бусад хэрэглэгч өрөөнөөс гарах үед​

onRemoteUserLeaveRoom(String userId)

  • userId: String - Өрөөнөөс гарсан хэрэглэгчийн Id ( Өрөөний Id + "_" + тухайн app дээрх хэрэглэгчийн ID roomId_userId )

Хэрэглэгчдэд харагдах нэр өөрчлөгдөх үед​

onDisplayNameChanged(String userId,String displayName)
  • userId: String - Дэлгэцний нэр нь солигдсон хэрэглэгчийн Id ( Өрөөний Id + "_" + тухайн app дээрх хэрэглэгчийн ID roomId_userId )

  • displayName: String - Хурлын өрөөнд бусад хэрэглэгчдэд харагдах тухайн хэрэглэгчийн өөрчлөгдсөн нэр

Бусад хэрэглэгчээс мессеж ирэх үед​

onRecvRoomTextMsg(String message, QRTCMeetingDef.UserInfo userInfo)
  • message: Бусад хэрэглэгчээс ирсэн мессеж

  • userInfo: Хэрэглэгчийн мэдээлэл агуулсан объект

  • userInfo.userId: Хэрэглэгчийн ID

  • userInfo.userName: Хэрэглэгчийн мэдээлэл агуулсан string

Бусад хэрэглэгчээс тусгай кодтой мессеж ирэх үед​

onRecvRoomCustomMsg(String cmd,String message, QRTCMeetingDef.UserInfo userInfo)
  • cmd: Бусад хэрэглэгчээс илгээсэн тусгай код

  • message: Бусад хэрэглэгчээс ирсэн мессеж

  • userInfo: Хэрэглэгчийн мэдээлэл агуулсан объект

  • userInfo.userId: Хэрэглэгчийн ID

  • userInfo.userName: Хэрэглэгчийн мэдээлэл агуулсан string

Хэрэглэгчдийн сүлжээний чанар өөрчлөгдөх үед​

onNetworkQuality( QRTCCloudDef.QRTCQuality localQuality, List<QRTCCloudDef.QRTCQuality> remoteQuality )
  • localQuality: Өөрийн сүлжээний чанарыг илэрхийлсэн QRTCCloudDef.QRTCQuality class-н объект

  • List<QRTCCloudDef.QRTCQuality>: Бусад хэрэглэгчийн сүлжээний чанарыг илэрхийлсэн QRTCCloudDef.QRTCQuality class-н объектууд агуулсан жагсаалт


  public static class QRTCQuality {
public String userId;
public int quality;
/* quality:
int QRTC_QUALITY_UNKNOWN = 0;
int QRTC_QUALITY_Excellent = 1;
int QRTC_QUALITY_Good = 2;
int QRTC_QUALITY_Poor = 3;
int QRTC_QUALITY_Bad = 4;
int QRTC_QUALITY_Vbad = 5;
int QRTC_QUALITY_Down = 6;
*/
}

Серверийн холбоосын хугацаа дуусах үед​

onConnectionTimeout()

Серверийн холбоос салах үед​

onConnectionLost()

Сервертэй дахин холбогдох хүсэлт илгээх үед​

onTryToReconnect()

Сервертэй дахин холбогдох үед​

onConnectionRecovery()

Алдаа гарах үед​

onErrorMsg( int code, String message )
  • code: алдааны утгыг илэрхийлсэн тоо

  • message: алдааг тайлбарласан мессеж