Skip to content

Commit ba895b9

Browse files
committed
update sdk to 38200 and add video buffer
1 parent b7c6826 commit ba895b9

13 files changed

+124
-45
lines changed

CMakeLists.txt

+1-1
Original file line numberDiff line numberDiff line change
@@ -92,7 +92,7 @@ if(WIN32)
9292
libobs
9393
Qt5::Core
9494
Qt5::Widgets
95-
"${CMAKE_SOURCE_DIR}/deps/Agora/${AGORA_ARCH}/agora_rtc_sdk.lib"
95+
"${CMAKE_SOURCE_DIR}/deps/Agora/${AGORA_ARCH}/agora_rtc_sdk.dll.lib"
9696
"${CMAKE_SOURCE_DIR}/deps/libyuv/${AGORA_ARCH}/yuv.lib"
9797
"${CMAKE_SOURCE_DIR}/deps/curl/${AGORA_ARCH}/libcurl.lib")
9898
endif()

data/locale/Ru-RU.ini

+3-1
Original file line numberDiff line numberDiff line change
@@ -108,4 +108,6 @@ Plugin.Settings.Camera.Token="Camera Занята(на выбор)"
108108
Plugin.Settings.Error.EmptyUrl="URL запроса пуст. Заполните действительный http-URL"
109109
Basic.Main.Agora.Invalid.CameraToken = "Ошибка подключения камеры к каналу, возможно, неверный appid/канал, недопустимый или просроченный токен и т. Д."
110110
Basic.Main.Agora.Empty.CameraToken = "Ошибка присоединения камеры к каналу, токен камеры пуст."
111-
Plugin.Settings.Log.Interval="Audio and Video log interval(seconds)"
111+
Plugin.Settings.Log.Interval="Audio and Video log interval(seconds)"
112+
Basic.Setting.Video.Buffer.Interval="Время задержки стрима (макс. 10 мин.)"
113+
Second="секунда "

data/locale/de-DE.ini

+3-1
Original file line numberDiff line numberDiff line change
@@ -108,4 +108,6 @@ Plugin.Settings.Camera.Token="Kamera-Token(Optional)"
108108
Plugin.Settings.Error.EmptyUrl="Anfrage-URL ist leer. Geben Sie eine gültige http-URL ein"
109109
Basic.Main.Agora.Invalid.CameraToken="Kamera-Verbindung fehlgeschlagen, möglicherweise ungültige Appid, ungültiger Kanal, ungültiger Token, abgelaufener Token usw."
110110
Basic.Main.Agora.Empty.CameraToken="Kamera-Verbindung fehlgeschlagen, Kamera-Token ist leer."
111-
Plugin.Settings.Log.Interval="Audio and Video log interval(seconds)"
111+
Plugin.Settings.Log.Interval="Audio and Video log interval(seconds)"
112+
Basic.Setting.Video.Buffer.Interval="Stream-Verzögerung(max.: 10 min.)"
113+
Second="zweite"

data/locale/en-US.ini

+3-1
Original file line numberDiff line numberDiff line change
@@ -109,4 +109,6 @@ Plugin.Settings.Error.EmptyUrl="Reuqest url is empty. Fill valid http url"
109109
Basic.Main.Agora.Invalid.CameraToken="Camera Join Channel Failed, maybe invalid token , expired token etc."
110110
Basic.Main.Agora.Empty.CameraToken="Camera Join Channel Failed, camera token is empty."
111111
Plugin.Settings.Log.Interval="Audio and Video log interval(seconds)"
112-
Basic.Settings.SetAudioProfile="Set Audio Profile"
112+
Basic.Settings.SetAudioProfile="Set Audio Profile"
113+
Basic.Setting.Video.Buffer.Interval="Video Buffer Time(Maximum 10 minitues)"
114+
Second="Seconds"

data/locale/es-ES.ini

+3-1
Original file line numberDiff line numberDiff line change
@@ -108,4 +108,6 @@ Plugin.Settings.Camera.Token="Token de cámara(opcional)"
108108
Plugin.Settings.Error.EmptyUrl="La URL de la solicitud está vacía. Complete una URL http válida"
109109
Basic.Main.Agora.Invalid.CameraToken="Falló la activación de la cámara del canal, puede ser appid no válido, canal no válido, token no válido, token caducado, etc."
110110
Basic.Main.Agora.Empty.CameraToken="Falló la activación de la cámara del canal, el token de la cámara está vacío."
111-
Plugin.Settings.Log.Interval="Audio and Video log interval(seconds)"
111+
Plugin.Settings.Log.Interval="Audio and Video log interval(seconds)"
112+
Basic.Setting.Video.Buffer.Interval="duración de la caché de transmisión (máx.: 10 minutos)"
113+
Second="Segundos"

data/locale/zh-CN.ini

+3-1
Original file line numberDiff line numberDiff line change
@@ -109,4 +109,6 @@ Plugin.Settings.Error.EmptyUrl="请求信息为空。填入有效http url"
109109
Basic.Main.Agora.Invalid.CameraToken="摄像头加入频道失败,摄像头Token无效,或者Token过期"
110110
Basic.Main.Agora.Empty.CameraToken="摄像头加入频道失败,摄像头Token为空"
111111
Plugin.Settings.Log.Interval="音视频日志时间间隔(秒)"
112-
Basic.Settings.SetAudioProfile="设置Audio Profile"
112+
Basic.Settings.SetAudioProfile="设置Audio Profile"
113+
Basic.Setting.Video.Buffer.Interval="视频缓存时间(最长10分钟)"
114+
Second=""

data/locale/zh-TW.ini

+3-1
Original file line numberDiff line numberDiff line change
@@ -110,4 +110,6 @@ Plugin.Settings.Error.EmptyUrl="请求信息为空。填入有效http url"
110110
Basic.Main.Agora.Invalid.CameraToken="攝像頭加入頻道失敗,攝像頭Token無效,或者Token過期"
111111
Basic.Main.Agora.Empty.CameraToken="攝像頭加入頻道失敗,攝像頭Token爲空"
112112
Plugin.Settings.Log.Interval="音視頻日志時間間隔(秒)"
113-
Basic.Settings.SetAudioProfile="設置Audio Profile"
113+
Basic.Settings.SetAudioProfile="設置Audio Profile"
114+
Basic.Setting.Video.Buffer.Interval="視頻緩存時間(最長時間10分鐘)"
115+
Second=""

src/Agora/agorartcengine.cpp

+10-2
Original file line numberDiff line numberDiff line change
@@ -71,7 +71,7 @@ class AgoraRtcEngineEvent :public QObject,
7171
emit m_engine.onRemoteVideoStateChanged(uid, (int)state, (int)reason, elapsed);
7272
}
7373

74-
virtual void onRtmpStreamingStateChanged(const char *url, RTMP_STREAM_PUBLISH_STATE state, RTMP_STREAM_PUBLISH_ERROR errCode) override
74+
virtual void onRtmpStreamingStateChanged(const char *url, RTMP_STREAM_PUBLISH_STATE state, RTMP_STREAM_PUBLISH_ERROR_TYPE errCode) override
7575
{
7676
emit m_engine.onRtmpStreamingStateChanged(url, state, errCode);
7777
}
@@ -280,7 +280,7 @@ bool AgoraRtcEngine::InitEngine(std::string appid)
280280
m_rtcEngine->enableVideo();
281281
m_rtcEngine->setClientRole(CLIENT_ROLE_BROADCASTER);
282282
m_pMediaEngine->setExternalVideoSource(true, false);
283-
m_rtcEngine->setExternalAudioSource(true, 48000, 2);
283+
m_pMediaEngine->setExternalAudioSource(true, 48000, 2);
284284

285285
m_audioDeviceManager = new AAudioDeviceManager(m_rtcEngine);
286286
m_initialize = true;
@@ -569,6 +569,14 @@ void AgoraRtcEngine::SetPcmInfo(bool b, std::string path)
569569
}
570570
}
571571

572+
void AgoraRtcEngine::SetVideoBuffer(int second)
573+
{
574+
AParameter apm(m_rtcEngine);
575+
char szParam[200] = { 0 };
576+
sprintf(szParam, "{\"rtc.media_send_delay\":%d}", second * 1000);
577+
apm->setParameters(szParam);
578+
}
579+
572580
void* AgoraRtcEngine::AgoraAudioObserver_Create()
573581
{
574582
m_externalAudioframe.channels = 2;

src/Agora/agorartcengine.hpp

+1
Original file line numberDiff line numberDiff line change
@@ -85,6 +85,7 @@ class AgoraRtcEngine : public QObject
8585
void SetJoinFlag(bool b) { m_joined = b; }
8686
void SetLogInterval(int interval) { m_logInterval = interval;}
8787

88+
void SetVideoBuffer(int second);
8889
agora::rtc::IRtcEngine* getRtcEngine() { return m_rtcEngine; }
8990
signals:
9091
void onJoinChannelSuccess(const char* channel, unsigned int uid, int elapsed);

src/forms/AgoraSettings.ui

+74-28
Original file line numberDiff line numberDiff line change
@@ -81,7 +81,7 @@
8181
<item>
8282
<widget class="QStackedWidget" name="settingsPages">
8383
<property name="currentIndex">
84-
<number>1</number>
84+
<number>0</number>
8585
</property>
8686
<widget class="QWidget" name="agoraPage">
8787
<layout class="QVBoxLayout" name="verticalLayout_16">
@@ -112,9 +112,9 @@
112112
<property name="geometry">
113113
<rect>
114114
<x>0</x>
115-
<y>0</y>
115+
<y>-112</y>
116116
<width>679</width>
117-
<height>506</height>
117+
<height>570</height>
118118
</rect>
119119
</property>
120120
<layout class="QVBoxLayout" name="verticalLayout_23">
@@ -311,6 +311,23 @@
311311
</property>
312312
</widget>
313313
</item>
314+
<item row="15" column="1">
315+
<layout class="QHBoxLayout" name="horizontalLayout_Camera">
316+
<item>
317+
<widget class="QLineEdit" name="lineEditCameraUID"/>
318+
</item>
319+
<item>
320+
<widget class="QLabel" name="labelCameraToken">
321+
<property name="text">
322+
<string>Plugin.Settings.Camera.Token</string>
323+
</property>
324+
</widget>
325+
</item>
326+
<item>
327+
<widget class="QLineEdit" name="lineEditCameraToken"/>
328+
</item>
329+
</layout>
330+
</item>
314331
<item row="16" column="0">
315332
<widget class="QLabel" name="labSystemCPU">
316333
<property name="text">
@@ -364,44 +381,73 @@
364381
</property>
365382
</widget>
366383
</item>
367-
<item row="15" column="1">
368-
<layout class="QHBoxLayout" name="horizontalLayout_Camera">
369-
<item>
370-
<widget class="QLineEdit" name="lineEditCameraUID"/>
371-
</item>
372-
<item>
373-
<widget class="QLabel" name="labelCameraToken">
374-
<property name="text">
375-
<string>Plugin.Settings.Camera.Token</string>
376-
</property>
377-
</widget>
378-
</item>
379-
<item>
380-
<widget class="QLineEdit" name="lineEditCameraToken"/>
381-
</item>
382-
</layout>
383-
</item>
384-
<item row="20" column="1">
385-
<widget class="QCheckBox" name="chkPersistSaveAppid">
386-
<property name="text">
387-
<string>Basic.Settings.Agora.PersistSaveAppid</string>
388-
</property>
389-
</widget>
390-
</item>
391384
<item row="19" column="1">
392385
<widget class="QCheckBox" name="chkDualStream">
393386
<property name="text">
394387
<string>Agora.Settings.DualStream</string>
395388
</property>
396389
</widget>
397390
</item>
398-
<item row="20" column="0">
391+
<item row="21" column="0">
399392
<widget class="QCheckBox" name="chkAutoLoadConfig">
400393
<property name="text">
401394
<string>Basic.Agora.AutoLoadConfig</string>
402395
</property>
403396
</widget>
404397
</item>
398+
<item row="21" column="1">
399+
<widget class="QCheckBox" name="chkPersistSaveAppid">
400+
<property name="text">
401+
<string>Basic.Settings.Agora.PersistSaveAppid</string>
402+
</property>
403+
</widget>
404+
</item>
405+
<item row="26" column="1">
406+
<layout class="QHBoxLayout" name="horizontalLayout_3">
407+
<item>
408+
<widget class="QLabel" name="labVideoBufferInterval">
409+
<property name="text">
410+
<string>Basic.Setting.Video.Buffer.Interval</string>
411+
</property>
412+
</widget>
413+
</item>
414+
<item>
415+
<widget class="QSpinBox" name="spinSecond">
416+
<property name="minimumSize">
417+
<size>
418+
<width>60</width>
419+
<height>0</height>
420+
</size>
421+
</property>
422+
<property name="maximumSize">
423+
<size>
424+
<width>16777215</width>
425+
<height>16777215</height>
426+
</size>
427+
</property>
428+
<property name="maximum">
429+
<number>600</number>
430+
</property>
431+
<property name="displayIntegerBase">
432+
<number>10</number>
433+
</property>
434+
</widget>
435+
</item>
436+
<item>
437+
<widget class="QLabel" name="labSecond">
438+
<property name="maximumSize">
439+
<size>
440+
<width>80</width>
441+
<height>16777215</height>
442+
</size>
443+
</property>
444+
<property name="text">
445+
<string>Second</string>
446+
</property>
447+
</widget>
448+
</item>
449+
</layout>
450+
</item>
405451
</layout>
406452
</widget>
407453
</item>

src/forms/window-agora-main.cpp

+8-1
Original file line numberDiff line numberDiff line change
@@ -187,6 +187,8 @@ AgoraBasic::~AgoraBasic()
187187
}
188188

189189
config_set_bool(globalAgoraConfig, "AgoraTool", "savePcm", m_settings.savePcm);
190+
config_set_int(globalAgoraConfig, "AgoraTool", "videoInterval", m_settings.videoInterval);
191+
190192
config_set_bool(globalAgoraConfig, "AgoraTool", "setAudioProfile", m_settings.setAudioProfile);
191193
config_set_uint(globalAgoraConfig, "AgoraTool", "logInterval", m_settings.logInterval);
192194
config_set_uint(globalAgoraConfig, "AgoraTool", "InformationMode", m_settings.info_mode);
@@ -227,6 +229,7 @@ AgoraBasic::~AgoraBasic()
227229

228230
config_set_bool(globalAgoraConfig, "AgoraTool", "savePcm", false);
229231
config_set_bool(globalAgoraConfig, "AgoraTool", "setAudioProfile", false);
232+
config_set_int(globalAgoraConfig, "AgoraTool", "videoInterval", 0);
230233

231234
config_set_uint(globalAgoraConfig, "AgoraTool", "InformationMode", 0);
232235
config_set_string(globalAgoraConfig, "AgoraTool", "InformationUrl", "");
@@ -387,6 +390,8 @@ void AgoraBasic::InitBasicConfig()
387390
m_settings.logInterval = 20;
388391

389392
m_settings.savePcm = config_get_bool(globalAgoraConfig, "AgoraTool", "savePcm");
393+
m_settings.videoInterval = config_get_int(globalAgoraConfig, "AgoraTool", "videoInterval");
394+
390395
m_settings.setAudioProfile = config_get_bool(globalAgoraConfig, "AgoraTool", "setAudioProfile");
391396
}
392397

@@ -808,7 +813,7 @@ void AgoraBasic::JoinChannel(std::string token)
808813
joinFailedTimer.stop();
809814
joinFailedTimer.start(10000);
810815
blog(LOG_INFO, "agora token:%s", m_settings.token.c_str());
811-
816+
rtcEngine->SetVideoBuffer(m_settings.videoInterval);
812817
rtcEngine->JoinChannel(m_settings.token.c_str()
813818
, m_settings.channelName.c_str(), m_settings.uid, m_settings.setAudioProfile ,m_settings.bDualStream,
814819
!m_settings.muteAllRemoteAudioVideo, !m_settings.muteAllRemoteAudioVideo,
@@ -1206,6 +1211,8 @@ void AgoraBasic::onJoinChannelSuccess_slot(const char* channel, unsigned int uid
12061211
obs_enum_sources(EnumSources, this);
12071212
RemoveVideoPluginFilters();
12081213
AddFilterCurrentScene();
1214+
1215+
12091216
rtcEngine->JoinChannel(m_settings.camera_token.c_str(),
12101217
m_settings.channelName.c_str(), m_settings.camera_uid);
12111218
rtcEngine->SetCameraEncoderConfiguration(

src/forms/window-agora-main.hpp

+3
Original file line numberDiff line numberDiff line change
@@ -71,6 +71,9 @@ typedef struct tagAgoraToolSettings {
7171
bool bDualStream = false;
7272
bool bSendObsCamera = false;
7373
unsigned int camera_uid = 0;
74+
75+
int videoInterval = 0;
76+
7477
std::string camera_token = "";
7578
int plugin_camera_fps = 15;
7679
int plugin_camera_bitrate = 0;

src/forms/window-agora-settings.cpp

+9-7
Original file line numberDiff line numberDiff line change
@@ -107,11 +107,11 @@ AgoraSettings::AgoraSettings(QWidget *parent)
107107
ui->chkObsCamera->setText(tr("Plugin.Settings.SendObsCamera"));
108108

109109
ui->labelCameraToken->setText(tr("Plugin.Settings.Camera.Token"));
110-
#if WIN32
111-
#else
112-
ui->labUrl->hide();
113-
ui->lineEditUrl->hide();
114-
#endif
110+
111+
ui->chkSavePCM->setText(tr("Basic.Settings.Agora.Save.PCM"));
112+
ui->labVideoBufferInterval->setText(tr("Basic.Setting.Video.Buffer.Interval"));
113+
ui->labSecond->setText(tr("Second"));
114+
115115
//Audio
116116
ui->audioRecordingDevicesGroupBox->setTitle(tr("Agora.Settings.Recording"));
117117
ui->label_2->setText(tr("Agora.Record.Devices"));
@@ -312,6 +312,8 @@ AgoraSettings::AgoraSettings(QWidget *parent)
312312
HookWidget(ui->chkSetAudioProfile, CHECK_CHANGED, AUDIO_CHANGED);
313313
HookWidget(ui->spinCPU, SPINBOX_CHANGED, GENERAL_CHANGED);
314314
HookWidget(ui->chkLoopback, CHECK_CHANGED, AUDIO_CHANGED);
315+
316+
HookWidget(ui->spinSecond, SPINBOX_CHANGED, GENERAL_CHANGED);
315317

316318
connect(ui->chkPersistSaveAppid, &QCheckBox::toggled, this, &AgoraSettings::onChkSaveAppidSettings);
317319
connect(ui->chkObsCamera, &QCheckBox::toggled, this, &AgoraSettings::on_chkObsCamera_check);
@@ -463,7 +465,7 @@ void AgoraSettings::SaveGeneralSettings()
463465
settings.camera_uid = 0;
464466
settings.bSendObsCamera = ui->chkObsCamera->isChecked();
465467
settings.camera_token = ui->lineEditCameraToken->text().toStdString();
466-
settings.cpuThreshold = ui->spinCPU->value();
468+
settings.videoInterval = ui->spinSecond->value();
467469

468470
QString str = ui->lineEditLogInterval->text();
469471
if (str.isEmpty()) {
@@ -599,7 +601,7 @@ void AgoraSettings::LoadGeneralSettings()
599601
ui->lineEditAgoraRtmpWidth->setText(QString("%1").arg(settings.rtmp_width));
600602
ui->lineEditAgoraRtmpHeight->setText(QString("%1").arg(settings.rtmp_height));
601603
ui->spinCPU->setValue(settings.cpuThreshold);
602-
604+
ui->spinSecond->setValue(settings.videoInterval);
603605
ui->chkObsCamera->setChecked(settings.bSendObsCamera);
604606
if (settings.camera_uid > 0) {
605607
QString strCameraUid = QString("%1").arg(settings.camera_uid);

0 commit comments

Comments
 (0)