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: алдааг тайлбарласан мессеж