Hello everyone,
Description
I wanted to share my experience with the raw data collection process using the Zoom Meeting SDK on Windows. I followed the tutorial provided by Zoom, but unfortunately, I was not able to achieve my desired results.
As per the tutorial, I implemented an instance of IZoomSDKRendererDelegate to process the raw video data and set up an IZoomSDKAudioRawDataDelegate for the audio raw data. However, even after following the steps mentioned in the tutorial, I did not get the expected output.
The link to the tutorial I followed is https://developers.zoom.us/docs/sdk/native-sdks/windows/raw-data/. If anyone has any additional resources or insights to share, I would be grateful.
Which Windows Meeting SDK version?
zoom-sdk-windows-5.13.5.12103
Thank you in advance for your help.
To reproduce
As per Zoom’s recommendation, I would like to suggest adding a “To Reproduce (If applicable)” section to the tutorial. This will help others to understand the problem better and provide a possible solution.
Furthermore, I suggest restructuring the tutorial and adding the following example to create interfaces in the analogous files:
#pragma once
#include "stdafx.h"
#include "zoom_sdk.h"
#include "zoom_sdk_def.h"
#include <rawdata/rawdata_audio_helper_interface.h>
#include <rawdata/rawdata_renderer_interface.h>
using namespace ZOOM_SDK_NAMESPACE;
class CSDKRawAudio : public IZoomSDKAudioRawDataDelegate
{
public:
static CSDKRawAudio* GetInstance();
CSDKRawAudio();
virtual ~CSDKRawAudio();
virtual void onMixedAudioRawDataReceived(AudioRawData* data_) override;
virtual void onOneWayAudioRawDataReceived(AudioRawData* data_, uint32_t node_id) override;
//SDKError Subscribe(IZoomSDKAudioRawDataDelegate* pDelegate);
//SDKError UnSubscribe();
//SDKError SetExternalAudioSource(IZoomSDKVirtualAudioMicEvent* pSource);
//
private:
IZoomSDKAudioRawDataHelper* m_pAudioRawDataHelper;
static CSDKRawAudio* m_pRawAudio;
static IZoomSDKAudioRawDataDelegate* m_pRawAudioDelegate;
};
This interface can be implemented in the CustomizedRecordMgr file.
I hope this suggestion helps. Please let me know if you have any questions.
Device (please complete the following information):
- Device: Hp Probook 440GB
- OS: . Windows 10 Pro
@jsarmiento, totally understand that it was difficult to capture and process the raw data from Zoom - audio and video are especially tricky to work with.
It might be worth checking out Recall.ai that has a hosted solution of this so it’s just a simple API call instead of you needing to spin up Windows containers at scale.
1 Like
@jsarmiento ,
Did you get this resolved yet? Let me know if you have not, I’m currently working on some code samples.
Hi @chunsiong.tan.
Currently we have not succeeded, We have managed to activate the custom record notification, but in the callback event don’t give the data (video and audio)
@jsarmiento ,
Here’s some steps to get raw audio working on Windows Meeting SDK
I’m assuming at the moment you are using Custom UI
Create an instance of IZoomSDKAudioRawDataDelegate
MyZoomDelegate.h
#pragma once
#include "stdafx.h"
#include "rawdata/rawdata_audio_helper_interface.h"
#include <iostream>
using namespace std;
using namespace ZOOM_SDK_NAMESPACE;
class MyZoomDelegate :
public ZOOM_SDK_NAMESPACE::IZoomSDKAudioRawDataDelegate
{
public:
virtual void onMixedAudioRawDataReceived(AudioRawData* data_);
virtual void onOneWayAudioRawDataReceived(AudioRawData* data_, uint32_t node_id);
};
MyZoomDelegate.cpp
#include "stdafx.h"
#include "rawdata/rawdata_audio_helper_interface.h"
#include "MyZoomDelegate.h"
#include <iostream>
using namespace std;
using namespace ZOOM_SDK_NAMESPACE;
void MyZoomDelegate::onOneWayAudioRawDataReceived(AudioRawData* audioRawData, uint32_t node_id)
{
std::cout << "Received onOneWayAudioRawDataReceived" << std::endl;
//add your code here
}
void MyZoomDelegate::onMixedAudioRawDataReceived(AudioRawData* audioRawData)
{
std::cout << "Received onMixedAudioRawDataReceived" << std::endl;
//add your code here
}
Now in your CustomizedUIRecordMgr.cpp
You would want to run something like this within the start recording.
Do not run m_pRecordController->StartRecording() and m_pRecordController->StartRawRecording() after one another. You should only run either of them, and in this case, the latter.
bool CustomizedUIRecordMgr::StartRecording(time_t& startTimestamp)
{
GetRecordController();
if (!m_pRecordController){
return false;
}
ZOOM_SDK_NAMESPACE::ISettingService* pSettingService = SDKInterfaceWrap::GetInst().GetSettingService();
if (!pSettingService){
return false;
}
ZOOM_SDK_NAMESPACE::IRecordingSettingContext* pRcdSetting = pSettingService->GetRecordingSettings();
if (!pRcdSetting){
return false;
}
//ZOOM_SDK_NAMESPACE::SDKError rtn = m_pRecordController->StartRecording(startTimestamp);
SDKError err1 = m_pRecordController->StartRawRecording();
if (err1 != SDKERR_SUCCESS) {
cout << "Error occurred";
}
//ZOOM_SDK_NAMESPACE::SDKError rtn = m_pRecordController->StartRecording(startTimestamp);
myZoomDelegate = new MyZoomDelegate();
ZOOM_SDK_NAMESPACE::IZoomSDKAudioRawDataHelper* audioHelper = GetAudioRawdataHelper();
SDKError err = audioHelper->subscribe(myZoomDelegate);
if (err != SDKERR_SUCCESS) {
cout << "Error occurred";
}
/*if (rtn == ZOOM_SDK_NAMESPACE::SDKERR_SUCCESS) {
return true;
} else {
return false;
}*/
}