Audio receiver
The audio receiver feature provides a way to get audio data without affecting the actual audio stream. This feature allows your application to receive copies of audio data and use the data for various purposes.
| Supported call type | Minimum SDK version |
|---|---|
| 1-to-1 call, group call (conference) | PlanetKit 7.0 |
Audio data obtained through the audio receiver feature is an unprocessed audio stream before VQE control is applied.
Use cases
The main use cases for audio receivers are as follows.
- Audio analysis and transcription
- Voice activity detection
- Audio quality monitoring
- Call analytics and metrics collection
- Real-time audio visualization and level meters
- Recording call audio to files
Implementation steps
To implement the audio receiver feature, follow these steps.
1-to-1 call
Implement an audio receiver
Create a class that inherits from ICallAudioReceiver to receive audio data from 1-to-1 calls.
#include "PlanetKit.h"
#include "IPlanetKitCallAudioReceiver.h"
class AudioDataReceiver : public PlanetKit::ICallAudioReceiver {
public:
void OnAudio(const PlanetKit::SAudioData& sAudioData) override {
// Access audio data from SAudioData structure:
// - sAudioData.unAudioDataSamplingRate: Sampling rate
// - sAudioData.unAudioDataSampleCount: Number of samples
// - sAudioData.eAudioDataSampleFormat: Sample format
// - sAudioData.ucBuffer: Pointer to audio data
// - sAudioData.unBufferSize: Size of audio data in bytes
// Use the audio data for your use case
// Note: Copy data if you need it beyond this callback
}
};
Set the audio receiver
Register the receiver with the PlanetKitCall instance to start receiving audio data.
// Create receiver instances
PlanetKit::ICallAudioReceiverPtr pMyAudioReceiver = PlanetKit::MakeSharedPtr<AudioDataReceiver>();
PlanetKit::ICallAudioReceiverPtr pPeerAudioReceiver = PlanetKit::MakeSharedPtr<AudioDataReceiver>();
// Register receivers
m_pCall->RegisterMyAudioReceiver(pMyAudioReceiver); // Local user's audio
m_pCall->RegisterPeerAudioReceiver(pPeerAudioReceiver); // Remote peer's audio
Clear the audio receiver
Unregister the receiver to stop receiving audio data.
m_pCall->DeregisterMyAudioReceiver(pMyAudioReceiver);
m_pCall->DeregisterPeerAudioReceiver(pPeerAudioReceiver);
Group call
Implement an audio receiver
Create a class that inherits from IConferenceAudioReceiver to receive audio data from group calls.
#include "PlanetKit.h"
#include "IPlanetKitConferenceAudioReceiver.h"
class ConferenceAudioDataReceiver : public PlanetKit::IConferenceAudioReceiver {
public:
void OnAudio(const PlanetKit::SAudioData& sAudioData) override {
// Access audio data from SAudioData structure:
// - sAudioData.unAudioDataSamplingRate: Sampling rate
// - sAudioData.unAudioDataSampleCount: Number of samples
// - sAudioData.eAudioDataSampleFormat: Sample format
// - sAudioData.ucBuffer: Pointer to audio data
// - sAudioData.unBufferSize: Size of audio data in bytes
// Use the audio data for your use case
// Note: Copy data if you need it beyond this callback
}
};
Set the audio receiver
Register the receiver with the PlanetKitConference instance to start receiving audio data.
// Create receiver instances
PlanetKit::IConferenceAudioReceiverPtr pMyAudioReceiver = PlanetKit::MakeSharedPtr<ConferenceAudioDataReceiver>();
PlanetKit::IConferenceAudioReceiverPtr pPeerAudioReceiver = PlanetKit::MakeSharedPtr<ConferenceAudioDataReceiver>();
// Register receivers
m_pConference->RegisterMyAudioReceiver(pMyAudioReceiver); // Local user's audio
m_pConference->RegisterPeersAudioReceiver(pPeerAudioReceiver); // Mixed audio from all peers
Clear the audio receiver
Unregister the receiver to stop receiving audio data.
m_pConference->DeregisterMyAudioReceiver(pMyAudioReceiver);
m_pConference->DeregisterPeersAudioReceiver(pPeerAudioReceiver);
Related APIs
The APIs related to the audio receiver feature are as follows.
1-to-1 call
-
ICallAudioReceiver -
PlanetKitCall::RegisterMyAudioReceiver() -
PlanetKitCall::RegisterPeerAudioReceiver() -
PlanetKitCall::DeregisterMyAudioReceiver() -
PlanetKitCall::DeregisterPeerAudioReceiver()