Meetingsdk-linux-raw-recording-sample

dear @chunsiong.zoom

We have tried
github code “meetingsdk-linux-raw-recording-sample”

cmake -B build
make
create config.txt and added following things

meeting_number: “1234567890”
token: “xxxxxxxx.yyyyyyyyyyyyyyyyyy.zzzzzzzzzzzzzzzzz”
meeting_password: “123456”
recording_token: “”
GetVideoRawData: “true”
GetAudioRawData: “true”
SendVideoRawData: “false”
SendAudioRawData: “false”

out is as below

root@worker01:/var/www/html/meetingsdk-linux-raw-recording-sample/demo/bin# ./meetingSDKDemo
getpath
self path: /var/www/html/meetingsdk-linux-raw-recording-sample/demo/bin
Readfile success.
Reading…meeting_number: “84870325146”
Reading…token: “eyJzdiI6IjAwMDAwMiIsImFsZyI6IkhTNTEyIiwidiI6IjIuMCIsImtpZCI6IjI1YzVkMzNhLTc2YTYtNDRkYy05OTU5LTViNDc0MzY3NGY3YiJ9.eyJhdWQiOiJodHRwczovL29hdXRoLnpvb20udXMiLCJ1aWQiOiJ1NmwtUUNkUVNoSzFqS19GQzJuejh3IiwidmVyIjoxMCwiYXVpZCI6ImQzM2VlZGVhZjAwYTZiZTQxMWFkNTI2NjMzMjhkNDkxZmNkMDQ2OGY1MTU4MzNiY2RiY2Q0NWVkNjgxY2U3NzMiLCJuYmYiOjE3NDE4NzQ5OTksImNvZGUiOiJIQWt5SG1ZOVlpYmlhMFREWXRyUV9lM19QSzh2V0RvbVEiLCJpc3MiOiJ6bTpjaWQ6ZEY3ZllhVlRoZWNqNmpFUFFxOUl3IiwiZ25vIjowLCJleHAiOjE3NDE4Nzg1OTksInR5cGUiOjAsImlhdCI6MTc0MTg3NDk5OSwiYWlkIjoiT3owZG5CZnhUNmlsZkVUSmptQ3dLUSJ9.pKzqqBj-Qzs1MySYYy-n8xhmC2f4blpJoOuzIzDtDEh2F5wRXypng-QPbXHcwOZZ3nbRr0ledQdOlRgNQEVzWg”
Reading…meeting_password: “0cYELH”
Reading…recording_token: “”
Reading…GetVideoRawData: “true”
Reading…GetAudioRawData: “true”
Meeting Number: 84870325146
Token: eyJzdiI6IjAwMDAwMiIsImFsZyI6IkhTNTEyIiwidiI6IjIuMCIsImtpZCI6IjI1YzVkMzNhLTc2YTYtNDRkYy05OTU5LTViNDc0MzY3NGY3YiJ9.eyJhdWQiOiJodHRwczovL29hdXRoLnpvb20udXMiLCJ1aWQiOiJ1NmwtUUNkUVNoSzFqS19GQzJuejh3IiwidmVyIjoxMCwiYXVpZCI6ImQzM2VlZGVhZjAwYTZiZTQxMWFkNTI2NjMzMjhkNDkxZmNkMDQ2OGY1MTU4MzNiY2RiY2Q0NWVkNjgxY2U3NzMiLCJuYmYiOjE3NDE4NzQ5OTksImNvZGUiOiJIQWt5SG1ZOVlpYmlhMFREWXRyUV9lM19QSzh2V0RvbVEiLCJpc3MiOiJ6bTpjaWQ6ZEY3ZllhVlRoZWNqNmpFUFFxOUl3IiwiZ25vIjowLCJleHAiOjE3NDE4Nzg1OTksInR5cGUiOjAsImlhdCI6MTc0MTg3NDk5OSwiYWlkIjoiT3owZG5CZnhUNmlsZkVUSmptQ3dLUSJ9.pKzqqBj-Qzs1MySYYy-n8xhmC2f4blpJoOuzIzDtDEh2F5wRXypng-QPbXHcwOZZ3nbRr0ledQdOlRgNQEVzWg
meeting_password: 0cYELH
recording_token:
GetVideoRawData before parsing is : true
GetVideoRawData: 1
GetAudioRawData before parsing is : true
GetAudioRawData: 1
directory of config file: /var/www/html/meetingsdk-linux-raw-recording-sample/demo/bin/config.txt
Init meetingSdk:success
AuthService created.
AuthServiceEventListener added.
AuthSDK:token extracted from config file eyJzdiI6IjAwMDAwMiIsImFsZyI6IkhTNTEyIiwidiI6IjIuMCIsImtpZCI6IjI1YzVkMzNhLTc2YTYtNDRkYy05OTU5LTViNDc0MzY3NGY3YiJ9.eyJhdWQiOiJodHRwczovL29hdXRoLnpvb20udXMiLCJ1aWQiOiJ1NmwtUUNkUVNoSzFqS19GQzJuejh3IiwidmVyIjoxMCwiYXVpZCI6ImQzM2VlZGVhZjAwYTZiZTQxMWFkNTI2NjMzMjhkNDkxZmNkMDQ2OGY1MTU4MzNiY2RiY2Q0NWVkNjgxY2U3NzMiLCJuYmYiOjE3NDE4NzQ5OTksImNvZGUiOiJIQWt5SG1ZOVlpYmlhMFREWXRyUV9lM19QSzh2V0RvbVEiLCJpc3MiOiJ6bTpjaWQ6ZEY3ZllhVlRoZWNqNmpFUFFxOUl3IiwiZ25vIjowLCJleHAiOjE3NDE4Nzg1OTksInR5cGUiOjAsImlhdCI6MTc0MTg3NDk5OSwiYWlkIjoiT3owZG5CZnhUNmlsZkVUSmptQ3dLUSJ9.pKzqqBj-Qzs1MySYYy-n8xhmC2f4blpJoOuzIzDtDEh2F5wRXypng-QPbXHcwOZZ3nbRr0ledQdOlRgNQEVzWg

nothing happening next…Please suggest

Hey @amol2,

I would recommend enabling any available debug logging to see if there are error codes or warnings that might pinpoint the issue. If not, I would add additional logging around the part of the code where this seems to be getting stuck.

It also helps to double-check that your token is valid (and hasn’t expired) and that the meeting number matches what’s actually scheduled. Lastly, if you’re still having issues, I would double check that these steps have been followed to ensure the demo app works as expected.

Dear @amanda-recallai.

I have created APP like this. (Mine is free account)

  1. Build APP
  2. Selected General APP
  3. Basic Information (selected/added)
    – Admin Managed
    – Outh information – https://oauth.pstmn.io/v1/callback
  4. Access-- Nothing changed
  5. Surface – Meeting SDK selected
  6. Embed
    – Meeting SDK enable and downloaded 6.1.10 version of Linux
  7. Scope
    – added some meeting scope but not exactly not idea which scope need to select for our problem

Note: APP is in Draft mode.

Generated Token by following steps using Postman

  1. selected Authorization OAuth 2.0
  2. Auth URL - Error - Zoom
  3. Access Token URL - https://zoom.us/oauth/token
  4. Client ID and Secrete from my APP
  5. Get Access token (token generated)

Is this process correct or not? if anything need to change please suggest.

@Amol2

It looks like you might be generating and passing the wrong type of token to this bot when it tries to join the call. You’re generating the local recording token which is an optional token that gives the bot additional recording permissions when it’s joining the call.

Instead, you should generate a Meeting SDK JWT and provide that when the bot is joining the call. You can view Zoom’s docs around how to properly create this JWT for more information. When this is provided, your bot should be able to join your Zoom call and properly request recording permissions.

Dear @amanda-recallai

Thanks for reply. I tried JWT token as per document and it is working, audio recording in audio.pcm file.

now i have 2 questions

  1. Can we join multiple meetings? Like thread
  2. Can we get Interpretation channel streaming?

Could you please help me on this.

Great to hear this is working for you now @Amol2! For your other 2 questions:

  1. Can we join multiple meetings? Like thread

I found a forum post saying you can have multiple meetings run at the same time but a single instance of the Meeting SDK can only join one meeting at a time per process. Zoom does not officially support joining multiple meetings simultaneously within the same SDK instance (e.g., using threads)

For a single user or bot to participate in multiple meetings at once, Zoom recommends running separate instances of the application, each with its own SDK initialization and valid JWT token, provided your account supports concurrent meetings

Note that with a free account, you’re limited to hosting or joining one meeting at a time. Paid plans like Business or Enterprise allow licensed users to host up to two concurrent meetings, but joining multiple as a participant still requires separate instances

  1. Can we get Interpretation channel streaming?

I’m not able to find explicit guide on this but you could take a look at the InMeetingInterpretationController

Dear @amanda-recallai ,

Thanks for reply.

Interpretation channel

The link provided by you is related to Android SDK. We need Linux Meeting SDK.

You might be facing an issue with authentication or missing event listeners. Try the following steps to debug and resolve the issue:

  1. Check Authentication Response:
    Ensure your JWT token is valid and not expired.
    Decode your token using jwt .io to verify expiration (exp field).
    If expired, generate a new one.
  2. Enable Debug Logging:
  • Modify your code to print more logs by adding debug statements before and after SDK initialization functions.
  1. Verify Config File Path & Formatting:
  • Ensure config.txt is correctly formatted (no extra spaces or special characters).
  • Absolute file paths can help prevent issues with relative paths.
  1. Check SDK Dependencies:
  • Run ldd ./meetingSDKDemo to see if any required libraries are missing.
  1. Add Event Listeners for Debugging:
    The SDK may not proceed due to missing listeners. Try adding:

sdk_instance->SetMeetingStatusListener((ZoomSDKMeetingStatus status) {
std::cout << "Meeting Status: " << status << std::endl;
});

Try Running with Elevated Privileges:

If you suspect permission issues, try running:

sudo ./meetingSDKDemo

If none of these work, check Zoom SDK logs for errors. Let me know what logs/errors you get!

Best Regards,
Colin Munro

Dear @Colin2 @amanda-recallai @chunsiong.zoom

We are not facing issue. We are able to join meeting using bot.

Now,
We have zoom meeting with multiple people (consider 50 or more). These include all language speakers, Interpreter, bot user, listeners.

We need to capture audio from language interpreter + other speakers.
but only from English channel and English Speakers.

We have 4 functions.

  1. onOneWayAudioRawDataReceived

  2. onMixedAudioRawDataReceived

  3. onShareAudioRawDataReceived

  4. onOneWayInterpreterAudioRawDataReceived
    – here we can add language filter to get English Channel.

really appreciate, if you guide on this.

Thanks.

@amanda-recallai @Colin2 @chunsiong.zoom

we found reference class in Window SDK – IMeetingInterpretationController
Ref URL : Meeting SDK for Windows API Reference: IMeetingInterpretationController Class Reference

with following functions.

IsInterpretationEnabled()
GetAllInterpretationLanguageList()
JoinInterpretationChannel(int languageID):
TurnOffOriginalAudioWhenInChannel()
GetInterpretationLanguageByID(int languageID)

Same things we are looking into Linux SDK. but not able to get.

Please let us know if you can help on this.

@Amol2 can you provide a sample of the jwt token you are using?
please tag me in your response as well

@chunsiong.zoom

Thanks for reply.

our token problem is resolved.

we are trying to get Interpreter voice however in Linux SDK we are not able to found any method or class to join the channel and capture the voice.

like
we found reference class in Window SDK – IMeetingInterpretationController
Ref URL : Meeting SDK for Windows API Reference: IMeetingInterpretationController Class Reference

with following functions.

IsInterpretationEnabled()
GetAllInterpretationLanguageList()
JoinInterpretationChannel(int languageID):
TurnOffOriginalAudioWhenInChannel()
GetInterpretationLanguageByID(int languageID)

Need to get only English voice from meeting (English Speakers and English Interpreter)

We are looking solution using Window or Linux SDK.

Really appreciate, if you could help or suggest.

@Amol2 that is not a supported scenario