Meeting SDK Type and Version
Linux Meeting SDK version 6.6.10
Description
I maintain Python bindings for the Linux Meeting SDK. I first encountered this issue when upgrading the bindings to use the latest meeting SDK version and found that the same issue happens with Zoom’s official example program. Thus it appears to be an issue in the SDK. I am running this on a Linux laptop running Ubuntu 24.
Error?
When a participant enters, then leaves the meeting, then the host ends the meeting, the meeting SDK crashes with a memory corruption error after it goes in the Disconnecting status.
How To Reproduce
- Download the official example program
- Install the Linux Meeting SDK version 6.6.10 into the example program
- Start a Zoom meeting with no waiting room
- Have the example program join that meeting
- Wait for the program to start recording
- Open a new incognito window and join the same meeting as another participant
- Have the other participant from the incognito window leave the meeting
- As the host, end the meeting
- The terminal will show that the example program crashed with a memory corruption issue after reaching this line
⏳ disconnecting from the meeting.
Here is a video showing the issue:
Tweak to the example program that resolves the issue
The issue seems to have something to do with the callback that triggers when the recording permissions change. When you remove the lines from the sample program that set up the callback for a recording permission change, and instead simply attempt to start recording a few seconds after requesting permission to record, there is no issue and program exits the meeting cleanly.
This is the exact diff to the sample program:
git diff
diff --git a/src/Zoom.h b/src/Zoom.h
index aaacac9..5be40cd 100644
--- a/src/Zoom.h
+++ b/src/Zoom.h
@@ -5,7 +5,7 @@
#include <chrono>
#include <string>
#include <sstream>
-
+#include <glib.h>
#include <jwt-cpp/jwt.h>
#include "Config.h"
@@ -95,14 +95,19 @@ class Zoom : public Singleton<Zoom> {
};
auto recCtl = m_meetingService->GetMeetingRecordingController();
- auto recordingEvent = new MeetingRecordingCtrlEvent(onRecordingPrivilegeChanged);
- recCtl->SetEvent(recordingEvent);
SDKError err = recCtl->CanStartRawRecording();
if (hasError(err)) {
Log::info("requesting local recording privilege");
recCtl->RequestLocalRecordingPrivilege();
+
+ // HACKY fix: do NOT create a MeetingRecordingCtrlEvent, instead just attempt to
+ // start the recording 10 seconds after we request it
+ g_timeout_add(10000, [](gpointer) -> gboolean {
+ Zoom::getInstance().startRawRecording();
+ return G_SOURCE_REMOVE;
+ }, NULL);
}
};
Here is a video showing that it works after making this tweak: https://drive.google.com/file/d/16JcP-2YseFlUKmcFrEGO1booQ9m4qQm5/view?usp=sharing
Hopefully this sheds light on the root cause of the issue.