Skip to main content
Version: 6.0

Release notes

This page provides the release notes of PlanetKit 6.0 for Windows.

PlanetKit 6.0.1

Release date: 2025-06-04

Resolve crashes occurring when using the custom audio feature

  • Resolved the crash issue that occurred when using the custom audio feature in version 6.0.

Apply delay loading to the virtual background DLL

  • Modified the module used for the virtual background feature to be delay-loaded. This change ensures that PlanetKit can be used without issues, even if the module is not present.

PlanetKit 6.0

Release date: 2025-05-16

Apply changes for audio device management through AudioManager

  • AudioManager previously provided an API for instance creation, which required manual creation. Starting from version 6.0, providing the device information allows AudioManager to internally create and manage the device instance.
  • With AudioManager now managing the device instance, only one device is used globally.
  • When you change the microphone using ChangeMic(), the microphone device in use by PlanetKit will be updated accordingly.

API

Changed
  • AudioManager class 1-to-1 callGroup call

    PreviousPlanetKit 6.0.0
    bool GetAudioInputDeviceList(AudioDeviceInfoArray *pResultArray)bool GetMicList(AudioDeviceInfoArray& audioDeviceInfoArray)
    bool GetAudioOutputDeviceList(AudioDeviceInfoArray* pResultArray)bool GetSpeakerList(AudioDeviceInfoArray& audioDeviceInfoArray)
    bool GetDefaultAudioInputDeviceInfo(AudioDeviceInfoPtr* pAudioDeviceInfo)AudioDeviceInfoOptional GetDefaultMicInfo()
    bool GetDefaultAudioOutputDeviceInfo(AudioDeviceInfoPtr *pAudioDeviceInfo)AudioDeviceInfoOptional GetDefaultSpeakerInfo()
Added
  • AudioManager class 1-to-1 callGroup call
    • MicOptional ChangeMic(AudioDeviceInfoPtr pInfo = nullptr)
    • SpeakerOptional ChangeSpeaker(AudioDeviceInfoPtr pInfo = nullptr)
    • bool RegisterMicExceptionEvent(MicExceptionEventPtr pMicExceptionEvent)
    • bool DeregisterMicExceptionEvent()
Removed
  • AudioManager class 1-to-1 callGroup call
    • AudioDevicePtr CreateAudioDevice(AudioDeviceInfoPtr pInfo)
    • AudioDevicePtr CreateDefaultInputDevice()
    • AudioDevicePtr CreateDefaultOutputDevice()
  • PlanetKitCall class 1-to-1 call
    • bool SetAudioInputDevice(AudioDevicePtr pDevice)
    • bool SetAudioOutputDevice(AudioDevicePtr pDevice)
  • MakeCallParam class 1-to-1 call
    • AudioDeviceOptional GetAudioInputDevice()
    • AudioDeviceOptional GetAudioOutputDevice()
    • void SetAudioInputDevice(AudioDevicePtr pDevice)
    • void SetAudioOutputDevice(AudioDevicePtr pDevice)
  • VerifyCallParam class 1-to-1 call
    • AudioDeviceOptional GetAudioInputDevice()
    • AudioDeviceOptional GetAudioOutputDevice()
    • void SetAudioInputDevice(AudioDevicePtr pDevice)
    • void SetAudioOutputDevice(AudioDevicePtr pDevice)
  • PlanetKitConference class Group call
    • bool SetAudioInputDevice(AudioDevicePtr pDevice)
    • bool SetAudioOutputDevice(AudioDevicePtr pDevice)
  • ConferenceParam class Group call
    • AudioDeviceOptional GetAudioInputDevice()
    • AudioDeviceOptional GetAudioOutputDevice()
    • void SetAudioInputDevice(AudioDevicePtr pDevice)
    • void SetAudioOutputDevice(AudioDevicePtr pDevice)

Migration

  • Since the method of using a microphone and a speaker is the same, only the method for using the microphone is specified.

  • The use of the audio device in version 5.5 or earlier is as follows:

    class MyAudioDevice {
    AudioDevicePtr CreateAudioDevice() {
    auto pPlanetKitManager = PlanetKit::PlanetKitManager::GetInstance();
    auto pAudioManager = pPlanetKitManager->GetAudioManager();

    AudioDeviceInfoArray audioArray;
    GetAudioInputDeviceList(&audioArray);

    auto pAudioDevice = CreateAudioDevice(audioArray[0]);

    return pAudioDevice;
    }

    void SetAudioDevice(UserIdPtr pMyID, UserIdPtr pPeerID, const WString& strToken){
    auto pAudioDevice = CreateAudioDevice();

    auto pMakeCallParam = MakeCallParam::CreateWithAccessToken(pMyID, pPeerID, strToken);
    pMakeCallParam->SetAudioInputDevice(pAudioDevice);

    auto pPlanetKitManager = PlanetKit::PlanetKitManager::GetInstance();

    PlanetKitCallPtr pCallPtr;
    pPlanetKitManager->MakeCall(pMakeCallParam, pCallPtr);

    }
    }
  • From version 6.0, audio devices are used as follows.

    class MyAudioDevice {
    // There is no longer a need to create devices.
    // AudioDevicePtr CreateAudioDevice();

    void SetAudioDevice(){
    auto pPlanetKitManager = PlanetKit::PlanetKitManager::GetInstance();
    auto pAudioManager = pPlanetKitManager->GetAudioManager();

    AudioDeviceInfoArray audioArray;
    pAudioManager->GetMicList(audioArray);
    pAudioManager->ChangeMic(audioArray[0]);
    }
    }

Change the method for obtaining information about microphone and speaker devices

  • Instances of the currently used Mic and Speaker devices can be obtained through the AudioManager.
  • The AudioDevice class has been changed to the Mic and Speaker classes.
  • Mic and Speaker allow for obtaining and changing the current volume value, and notification events can be registered for device information changes.

API

Added
  • AudioManager class 1-to-1 callGroup call
    • SpeakerOptional GetCurrentSpeaker()
    • MicOptional GetCurrentMic()
  • Mic class 1-to-1 callGroup call
    • bool SetVolumeLevel(float fVolume)
    • float GetVolumeLevel()
    • bool RegisterMicEvent(MicEventPtr pEvent)
    • bool DeregisterMicEvent(MicEventPtr pEvent)
    • float GetPeakValue()
    • bool IsRunning()
    • bool RegisterVolumeLevelChangedEvent(AudioVolumeLevelChangedEventPtr pEvent)
    • bool DeregisterVolumeLevelChangedEvent(AudioVolumeLevelChangedEventPtr pEvent)
    • AudioDeviceInfoPtr GetDeviceInfo()
    • bool IsCustomMic()
  • Speaker class 1-to-1 callGroup call
    • bool SetVolumeLevel(float fVolume)
    • float GetVolumeLevel()
    • bool bool RegisterSpeakerEvent(SpeakerEventPtr pEvent)
    • bool DeregisterSpeakerEvent(SpeakerEventPtr pEvent)
    • float GetPeakValue()
    • bool IsRunning()
    • bool RegisterVolumeLevelChangedEvent(AudioVolumeLevelChangedEventPtr pEvent)
    • bool DeregisterVolumeLevelChangedEvent(AudioVolumeLevelChangedEventPtr pEvent)
    • AudioDeviceInfoPtr GetDeviceInfo()
    • bool IsCustomSpeaker()
    • bool PlayFile(const WString& strFilePath, unsigned int unLoop)
    • bool StopPlay()
  • IAudioVolumeLevelChangedEvent class 1-to-1 callGroup call
    • void OnNotify(const AudioDeviceInfoPtr pAudioInfo, const SAudioEndpointVolumeInfo& sInfo)
  • IMicEvent class 1-to-1 callGroup call
    • bool DidCapture(const SAudioData& sAudioData)
  • EMicStartError enum 1-to-1 callGroup call
    • PLNK_MIC_START_ERROR_INTERNAL_REASON
    • PLNK_MIC_START_ERROR_NOT_ENOUGH_MEMORY
    • PLNK_MIC_START_ERROR_DEVICE_INVALID
    • PLNK_MIC_START_ERROR_AUDIO_SERVICE_NOT_RUNNING
    • PLNK_MIC_START_ERROR_DEVICE_IN_USE_EXCLUSIVE_BY_OTHER_APPLICATION
    • PLNK_MIC_START_ERROR_CPU_USAGE_EXCEEDED
    • PLNK_MIC_START_ERROR_PREVIEW_EVENT_NOT_VALID
  • IMicExceptionEvent class 1-to-1 callGroup call
    • void OnMicStartError(EMicStartError eMicrophoneStartError)
  • IMicPreviewEvent class 1-to-1 callGroup call
    • void OnMicPreviewVolume(float fVolume)
  • ISpeakerEvent class 1-to-1 callGroup call
    • bool WillPlay(SAudioData& sAudioData)
Removed
  • AudioDevice class 1-to-1 callGroup call
  • IAudioDeviceVolumeChangedEvent class 1-to-1 callGroup call
  • IAudioDeviceInputDelegate class 1-to-1 callGroup call
  • IAudioDeviceOutputDelegate class 1-to-1 callGroup call

Add a preview feature to check the microphone

  • "Preview" refers to an event that periodically checks the current microphone device's volume.
  • Added a feature to register a preview event.

API

Added
  • AudioManager class 1-to-1 callGroup call
    • bool bool StartMicPreview(MicPreviewEventPtr pMicPreviewEvent, unsigned int unInterval)
    • bool StopMicPreview()

Provide custom audio

  • Added a custom audio feature that users can create themselves.

API

Added
  • CustomMic class 1-to-1 callGroup call
    • bool PutAudioData(SAudioData& audioData)
  • CustomSpeaker class 1-to-1 callGroup call
    • bool PullAudioData(SAudioData& audioData)

Add a feature to check cloud call recording activation during call reception

  • Added a parameter to PlanetKitCCParam to check cloud call recording activation while receiving a call.

API

Added
  • CCParam class 1-to-1 call
    • bool IsRecordOnCloudEnabled()

Provide a virtual background feature

  • Added a virtual background feature.

API

Added
  • EVirtualBackgroundType enum 1-to-1 callGroup call
    • PLNK_VIRTUAL_BACKGROUND_TYPE_NONE
    • PLNK_VIRTUAL_BACKGROUND_TYPE_BLUR
    • PLNK_VIRTUAL_BACKGROUND_TYPE_IMAGE
  • Image class 1-to-1 callGroup call
    • ImageOptional Create(IWICBitmap* pBitmap)
    • ImageOptional Create(WString& strPath)
    • VImageOptional Create(BYTE* pBuffer, unsigned int unWidth, unsigned int unHeight, ESupportedVirtualBackgroundFormat supportedFormat)
    • unsigned int Width()
    • unsigned int Height()
  • CameraController class 1-to-1 callGroup call
    • bool SetVirtualBackgroundWithBlur(float fBlurRadius)
    • bool SetVirtualBackgroundWithImage(ImagePtr pImage)
    • void ClearVirtualBackground()
    • EVirtualBackgroundType GetCurrentVirtualBackgroundType()

Provide SharedPtr for memory management

  • Added SharedPtr to facilitate memory management.

API

Changed
  • PlanetKitCall class 1-to-1 call

    PreviousPlanetKit 6.0.0
    void AcceptCall(bool bPreparation, CallStartMessagePtr pCallStartMessage = CallStartMessagePtr(nullptr), EInitialMyVideoState eInitialMyVideoState = PLNK_INITIAL_MY_VIDEO_STATE_RESUME, bool bRecordOnCloud = false)void AcceptCall(bool bPreparation, CallStartMessageOptional pCallStartMessage = NullOptional, EInitialMyVideoState eInitialMyVideoState = PLNK_INITIAL_MY_VIDEO_STATE_RESUME, bool bRecordOnCloud = false)
    bool RegisterCallEvent(ICallEvent *pCallEvent)bool RegisterCallEvent(ICallEventPtr pCallEvent)
    bool MakeOutboundDataSession(int nStreamId, EDataSessionType eType, NULLABLE void* pResultUserData, IOutboundDataSessionHandler* pDataSessionHandler)bool MakeOutboundDataSession(int nStreamId, EDataSessionType eType, NULLABLE void* pResultUserData, IOutboundDataSessionHandlerPtr pDataSessionHandler)
    bool MakeInboundDataSession(int nStreamId, NULLABLE void* pResultUserData, IInboundDataSessionHandler* pDataSessionHandler)bool MakeInboundDataSession(int nStreamId, NULLABLE void* pResultUserData, IInboundDataSessionHandlerPtr pDataSessionHandler)
    bool RegisterMyAudioReceiver(ICallAudioReceiver *pReceiver)bool RegisterMyAudioReceiver(ICallAudioReceiverPtr pReceiver)
    bool RegisterPeerAudioReceiver(ICallAudioReceiver *pReceiver)bool RegisterPeerAudioReceiver(ICallAudioReceiverPtr pReceiver)
    bool DeregisterMyAudioReceiver(ICallAudioReceiver *pReceiver)bool DeregisterMyAudioReceiver(ICallAudioReceiverPtr pReceiver)
    bool DeregisterPeerAudioReceiver(ICallAudioReceiver *pReceiver)bool DeregisterPeerAudioReceiver(ICallAudioReceiverPtr pReceiver)
    bool AddMyVideoReceiver(IVideoReceiver* pReceiver)bool AddMyVideoReceiver(IVideoReceiverPtr pReceiver)
    bool RemoveMyVideoReceiver(IVideoReceiver* pReceiver)bool RemoveMyVideoReceiver(IVideoReceiverPtr pReceiver)
    bool AddPeerVideoReceiver(IVideoReceiver* pReceiver)bool AddPeerVideoReceiver(IVideoReceiverPtr pReceiver)
    bool RemovePeerVideoReceiver(IVideoReceiver* pReceiver)bool RemovePeerVideoReceiver(IVideoReceiverPtr pReceiver)
    bool AddMyScreenShareVideoReceiver(IVideoReceiver* pReceiver)bool AddMyScreenShareVideoReceiver(IVideoReceiverPtr pReceiver)
    bool RemoveMyScreenShareVideoReceiver(IVideoReceiver* pReceiver)bool RemoveMyScreenShareVideoReceiver(IVideoReceiverPtr pReceiver)
    bool AddPeerScreenShareVideoReceiver(IVideoReceiver* pReceiver)bool AddPeerScreenShareVideoReceiver(IVideoReceiverPtr pReceiver)
    bool RemovePeerScreenShareVideoReceiver(IVideoReceiver* pReceiver)bool RemovePeerScreenShareVideoReceiver(IVideoReceiverPtr pReceiver)
  • CameraController class 1-to-1 callGroup call

    PreviousPlanetKit 6.0.0
    void RegisterDeviceEvent(IVideoCaptureDeviceEvent* pDelegate)void RegisterDeviceEvent(IVideoCaptureDeviceEventPtr pDelegate)
    void DeregisterDeviceEvent(IVideoCaptureDeviceEvent* pDelegate)void DeregisterDeviceEvent(IVideoCaptureDeviceEventPtr pDelegate)
    bool StartPreview(IVideoReceiver* pReceiver)bool StartPreview(IVideoReceiverPtr pReceiver)
    bool StopPreview(IVideoReceiver* pReceiver)bool StopPreview(IVideoReceiverPtr pReceiver)
    bool RegisterVideoInterceptor(IVideoInterceptor* pInterceptor)bool RegisterVideoInterceptor(IVideoInterceptorPtr pInterceptor)
  • PlanetKitConference class Group call

    PreviousPlanetKit 6.0.0
    bool RegisterConferenceEvent(IConferenceEvent *pEvent)bool RegisterConferenceEvent(IConferenceEventPtr pEvent)
    bool RegisterMyAudioReceiver(IConferenceAudioReceiver *pReceiver)bool RegisterMyAudioReceiver(IConferenceAudioReceiverPtr pReceiver)
    bool RegisterPeersAudioReceiver(IConferenceAudioReceiver *pReceiver)bool RegisterPeersAudioReceiver(IConferenceAudioReceiverPtr pReceiver)
    bool DeregisterMyAudioReceiver(IConferenceAudioReceiver *pReceiver)bool DeregisterMyAudioReceiver(IConferenceAudioReceiverPtr pReceiver)
    bool DeregisterPeersAudioReceiver(IConferenceAudioReceiver *pReceiver)bool DeregisterPeersAudioReceiver(IConferenceAudioReceiverPtr pReceiver)
    bool AddMyVideoReceiver(IVideoReceiver* pReceiver)bool AddMyVideoReceiver(IVideoReceiverPtr pReceiver)
    bool RemoveMyVideoReceiver(IVideoReceiver* pReceiver)bool RemoveMyVideoReceiver(IVideoReceiverPtr pReceiver)
    bool AddPeerVideoReceiver(UserIdPtr pPeerID, IVideoReceiver* pReceiver)bool AddPeerVideoReceiver(UserIdPtr pPeerID, IVideoReceiverPtr pReceiver)
    bool RemovePeerVideoReceiver(IVideoReceiver* pReceiver)bool RemovePeerVideoReceiver(IVideoReceiverPtr pReceiver)
    bool AddMyScreenShareVideoReceiver(IVideoReceiver* pReceiver)bool AddMyScreenShareVideoReceiver(IVideoReceiverPtr pReceiver)
    bool RemoveMyScreenShareVideoReceiver(IVideoReceiver* pReceiver)bool RemoveMyScreenShareVideoReceiver(IVideoReceiverPtr pReceiver)
    bool AddPeerScreenShareVideoReceiver(UserIdPtr pPeerID, IVideoReceiver* pReceiver)bool AddPeerScreenShareVideoReceiver(UserIdPtr pPeerID, IVideoReceiverPtr pReceiver)
    bool RemovePeerScreenShareVideoReceiver(IVideoReceiver* pReceiver)bool RemovePeerScreenShareVideoReceiver(IVideoReceiverPtr pReceiver)
  • Subgroup class Group call

    PreviousPlanetKit 6.0.0
    bool MakeOutboundDataSession(int nStreamId, EDataSessionType eType, NULLABLE void* pResultUserData, IOutboundDataSessionHandler* pDataSessionHandler)bool MakeOutboundDataSession(int nStreamId, EDataSessionType eType, NULLABLE void* pResultUserData, IOutboundDataSessionHandlerPtr pDataSessionHandler)
    bool MakeInboundDataSession(int nStreamId, NULLABLE void* pResultUserData, IInboundDataSessionHandler* pDataSessionHandler)bool MakeInboundDataSession(int nStreamId, NULLABLE void* pResultUserData, IInboundDataSessionHandlerPtr pDataSessionHandler)
  • ConferenceParam class Group call

    PreviousPlanetKit 6.0.0
    IConferenceEvent* ConferenceEvent()IConferenceEventPtr ConferenceEvent()
    void SetConferenceEvent(IConferenceEvent* pEvent)void SetConferenceEvent(IConferenceEventPtr pEvent)
  • ContentShareInterface class 1-to-1 callGroup call

    PreviousPlanetKit 6.0.0
    bool SetContentShareEvent(IContentShareEvent *pEvent)bool SetContentShareEvent(IContentShareEventPtr pEvent)
  • OutboundDataSession class 1-to-1 callGroup call

    PreviousPlanetKit 6.0.0
    IOutboundDataSessionHandler* GetHandler()IOutboundDataSessionHandlerPtr GetHandler()
  • InboundDataSession class 1-to-1 callGroup call

    PreviousPlanetKit 6.0.0
    IInboundDataSessionHandler* GetReceiver()IInboundDataSessionHandlerPtr GetReceiver()
  • MakeCallParam class 1-to-1 call

    PreviousPlanetKit 6.0.0
    ICallEvent* CallEvent()ICallEventPtr CallEvent()
    void SetCallEvent(ICallEvent* pEvent)void SetCallEvent(ICallEventPtr pEvent)
  • MyMediaStatus class 1-to-1 callGroup call

    PreviousPlanetKit 6.0.0
    bool Register(IMyMediaStatusEvent* pListener)bool Register(IMyMediaStatusEventPtr pListener)
  • PeerControl class Group call

    PreviousPlanetKit 6.0.0
    bool Register(IPeerControlEvent* pEventListener)bool Register(IPeerControlEventPtr pEventListener)
    void RegisterReceiver(IVideoReceiver* pReceiver)void RegisterReceiver(IVideoReceiverPtr pReceiver)
    void DeregisterReceiver(IVideoReceiver* pReceiver)void DeregisterReceiver(IVideoReceiverPtr pReceiver)
    void RegisterScreenShareReceiver(IVideoReceiver* pReceiver)void RegisterScreenShareReceiver(IVideoReceiverPtr pReceiver)
    void DeregisterScreenShareReceiver(IVideoReceiver* pReceiver)void DeregisterScreenShareReceiver(IVideoReceiverPtr pReceiver)
  • ScreenShareController class 1-to-1 callGroup call

    PreviousPlanetKit 6.0.0
    bool RegisterCapturerEvent(IVideoCapturerEvent* pDelegate)bool RegisterCapturerEvent(IVideoCapturerEventPtr pDelegate)
    bool RegisterVideoInterceptor(IVideoInterceptor* pInterceptor)bool RegisterVideoInterceptor(IVideoInterceptorPtr pInterceptor)
  • StatisticsAudioSend class 1-to-1 callGroup call

    PreviousPlanetKit 6.0.0
    StatisticsNetwork* Network()StatisticsNetworkPtr Network()
  • StatisticsAudioRecv class 1-to-1 callGroup call

    PreviousPlanetKit 6.0.0
    StatisticsNetwork* Network()StatisticsNetworkPtr Network()
  • StatisticsVideoSend class 1-to-1 callGroup call

    PreviousPlanetKit 6.0.0
    StatisticsNetwork* Network()StatisticsNetworkPtr Network()
    StatisticsVideo* Video()StatisticsVideoPtr Video()
  • StatisticsVideoRecv class 1-to-1 callGroup call

    PreviousPlanetKit 6.0.0
    StatisticsNetwork* Network()StatisticsNetworkPtr Network()
    StatisticsVideo* Video()StatisticsVideoPtr Video()
  • StatisticsScreenShareSend class 1-to-1 callGroup call

    PreviousPlanetKit 6.0.0
    StatisticsNetwork* Network()StatisticsNetworkPtr Network()
    StatisticsVideo* Video()StatisticsVideoPtr Video()
  • StatisticsScreenShareRecv class 1-to-1 callGroup call

    PreviousPlanetKit 6.0.0
    StatisticsNetwork* Network()StatisticsNetworkPtr Network()
    StatisticsVideo* Video()StatisticsVideoPtr Video()
  • Statistics class 1-to-1 callGroup call

    PreviousPlanetKit 6.0.0
    StatisticsAudioSend* AudioSend()StatisticsAudioSendPtr AudioSend()
    StatisticsAudioRecv* AudioRecv()StatisticsAudioRecvPtr AudioRecv()
  • VerifyCallParam class 1-to-1 call

    PreviousPlanetKit 6.0.0
    ICallEvent* CallEvent()ICallEventPtr CallEvent()
    void SetCallEvent(ICallEvent* pEvent)void SetCallEvent(ICallEventPtr pEvent)
  • VideoRender class 1-to-1 callGroup call

    PreviousPlanetKit 6.0.0
    bool RegisterRenderEvent(IVideoRenderEvent *pDelegate)bool RegisterRenderEvent(IVideoRenderEventPtr pDelegate)
Added
  • SharedPtr class 1-to-1 callGroup call

Example code

// Initialize the variable to nullptr.
PlanetKit::SharedPtr<YourCallEvent> callEvent = nullptr;

// Create an instance using MakeAutoPtr.
callEvent = PlanetKit::MakeAutoPtr<YourCallEvent>();

// Use SharedPtr::hasValue() to determine the existence of an instance.
if(callEvent.hasValue() == true) {
...
}

// If the instance is no longer needed, assign nullptr to reduce the reference count.
callEvent = nullptr;

Migration

  • Event class instances were created and registered using new in version 5.5 or earlier.

  • Starting from version 6.0, PlanetKit::SharedPtr is provided, so you need to use PlanetKit::MakeAutoPtr().

  • The way the event class is created and managed in version 5.5 or earlier is as follows:

      class YourCallEvent : public PlanetKit::ICallEvent {
    public :
    YourCallEvent (int someParameter1, int someParameter2) {
    ...
    }
    ...
    };

    class YourCall {
    public:
    void InitializeCallEvent() {
    m_yourCallEvent = new YourCallEvent(1, 2);
    }
    void FinalizeCallEvent() {
    // Since the pointer has been deallocated from memory, any code referencing the same pointer may cause an exception.
    delete m_yourCallEvent;
    }

    private: YourCallEvent* m_yourCallEvent = nullptr;
    };
  • From version 6.0, the event class is created and managed as follows:

    class YourCallEvent : public PlanetKit::ICallEvent {
    public :
    YourCallEvent (int someParameter1, int someParameter2) {
    ...
    }
    ...
    };

    class YourCall {
    public:
    void InitializeCallEvent() {
    m_yourCallEvent = PlanetKit::MakeAutoPtr<YourCallEvent>(1, 2);
    }

    void FinalizeCallEvent() {
    // If the pointer is no longer in use, you can assign nullptr to reduce the reference count of the SharedPtr.
    m_yourCallEvent = nullptr;
    }

    private:
    PlanetKit::SharedPtr<YourCallEvent> m_yourCallEvent = nullptr;
    };

Add microphone settings to MakeCall(), VerifyCall(), and JoinConference()

  • Added a MicOptional parameter to MakeCall(), VerifyCall(), and JoinConference().
  • If this parameter is set to PlanetKit::NullOptional, the call will be connected without a microphone device.
  • If a microphone device is passed to this parameter, the call will be connected using that microphone.

API

Change
  • PlanetKitManager class 1-to-1 callGroup call

    PreviousPlanetKit 6.0.0
    SStartResult MakeCall(MakeCallParamPtr pParam, PlanetKitCallPtr* pPlanetKitCall)SStartResult MakeCall(MakeCallParamPtr pParam, MicOptional micOptional, PlanetKitCallPtr* pPlanetKitCall)
    SStartResult VerifyCall(VerifyCallParamPtr pParam, PlanetKitCallPtr* pPlanetKitCall)SStartResult VerifyCall(VerifyCallParamPtr pParam, MicOptional micOptional, PlanetKitCallPtr* pPlanetKitCall)
    SStartResult JoinConference(ConferenceParamPtr pConferenceParam, PlanetKitConferencePtr& pPlanetKitConference)SStartResult JoinConference(ConferenceParamPtr pConferenceParam, MicOptional micOptional, PlanetKitConferencePtr& pPlanetKitConference)

Example code

  • Example for using a specific microphone device

      auto planetkitManager = PlanetKit::PlanetKitManager::GetInstance();
    auto audioManager = planetkitManager->GetAudioManager();

    auto mic = audioManager->ChangeMic(MicInfo);

    planetkitManager->JoinConference(pJoinParam, mic, pConference);
  • Example for not using a microphone device

      auto planetkitManager = PlanetKit::PlanetKitManager::GetInstance();
    planetkitManager->JoinConference(pJoinParam, PlanetKit::NullOptional, pConference);

Improve API for setting the audio volume of the peer

  • Changed to a volume setting API for each peer instead of subgroup-based volume settings.

API

Changed
  • PeerControl class Group call

    PreviousPlanetKit 6.0.0
    bool SetPeerAudioVolumeLevelSetting(UserIdPtr pPeerId, bool bSetForAllSubgroups, const WStringOptional& strSubgroupNameToApply, unsigned char ucVolume, void* pUserData = nullptr, ResultCallback pCallback = nullptr)bool SetVolumeLevelSetting(unsigned char ucVolume, void* pUserData = nullptr, ResultCallback pCallback = nullptr)
  • Peer class Group call

    PreviousPlanetKit 6.0.0
    VolumeResult GetAudioVolumeLevelSetting(const WStringOptional& strSubgroupName = NullOptional)VolumeResult GetAudioVolumeLevelSetting()
Removed
  • SubgroupManager class Group call
    • void bool SetPeerAudioVolumeLevelSetting(UserIdPtr pPeerId, bool bSetForAllSubgroups, const WStringOptional& strSubgroupNameToApply, unsigned char ucVolume, void* pUserData = nullptr, ResultCallback pCallback = nullptr)

Change video capability configuration API

  • Thumbnail resolution can no longer be used in video capability configuration API.
  • Video hardware codec settings are now configured through PlanetKitManager instead of setting them for each 1-to-1 call parameter or group call parameter individually.

API

Changed
  • SVideoCapability struct 1-to-1 callGroup call

    PreviousPlanetKit 6.0.0
    EVideoResolution eMaxResolutionEVideoResolutionCapability eMaxVideoResolutionCapability
  • MakeCallParam class 1-to-1 call

    PreviousPlanetKit 6.0.0
    const SVideoCapability& RecvVideoCapability()const VideoCapabilityOptional RecvVideoCapability()
    const SVideoCapability& SendVideoCapability()const VideoCapabilityOptional SendVideoCapability()
  • VerifyCallParam class 1-to-1 call

    PreviousPlanetKit 6.0.0
    const SVideoCapability& RecvVideoCapability()const VideoCapabilityOptional RecvVideoCapability()
    const SVideoCapability& SendVideoCapability()const VideoCapabilityOptional SendVideoCapability()
  • ConferenceParam class Group call

    PreviousPlanetKit 6.0.0
    const SVideoCapability& RecvVideoCapability()const VideoCapabilityOptional RecvVideoCapability()
    const SVideoCapability& SendVideoCapability()const VideoCapabilityOptional SendVideoCapability()
Added
  • EVideoResolutionCapability enum 1-to-1 callGroup call
    • PLNK_VIDEO_RESOLUTION_CAPABILITY_QVGA = 1
    • PLNK_VIDEO_RESOLUTION_CAPABILITY_VGA = 2
    • PLNK_VIDEO_RESOLUTION_CAPABILITY_HD = 3
    • PLNK_VIDEO_RESOLUTION_CAPABILITY_FHD = 4
  • SPreferredHardwareCodec struct 1-to-1 callGroup call
    • bool bCallVideoSend
    • bool bCallVideoReceive
    • bool bConferenceVideoSend
    • bool bConferenceVideoReceive
  • PlanetKitManager class 1-to-1 callGroup call
    • VideoCapabilityOptional GetCallDeviceDefaultVideoSendCapability()
    • VideoCapabilityOptional GetCallDeviceDefaultVideoReceiveCapability()
    • VideoCapabilityOptional GetConferenceDeviceDefaultVideoSendCapability()
    • VideoCapabilityOptional GetConferenceDeviceDefaultVideoReceiveCapability()
    • void SetPreferredHardwareCodec(SPreferredHardwareCodec sPreferredHardwareCodec)
    • SPreferredHardwareCodec GetPreferredHardwareCodec()
Removed
  • SVideoCapability struct 1-to-1 callGroup call
    • bool bPreferHWCodec
  • ConferenceParam class Group call
    • bool UseRxHWVidCodec()
    • void SetUseRxHWVidCodec(bool bUseRxHWVidCodec)
  • PlanetKitManager class 1-to-1 callGroup call
    • bool GetDefaultVideoCapSend(SVideoCapability *pSend)
    • bool GetDefaultVideoCapReceive(SVideoCapability *pReceive)

Remove the API to set the response type when the video call is enabled

  • When a video call is activated by the peer in a 1-to-1 audio call, the local user's video is always set to paused state.

API

Changed
  • ICallEvent class 1-to-1 call

    PreviousPlanetKit 6.0.0
    void OnVideoEnabledByPeer(PlanetKitCallPtr pPlanetKitCall, bool bIsSendingMyVideo)void OnVideoEnabledByPeerAndMyVideoPaused(PlanetKitCallPtr pPlanetKitCall)
Removed
  • EResponseOnVideoEnable enum 1-to-1 call
  • MakeCallParam class 1-to-1 call
    • void SetResponseOnVideoEnable(EResponseOnVideoEnable eEnable)
    • EResponseOnVideoEnable ResponseOnVideoEnable()
  • VerifyCallParam class 1-to-1 call
    • void SetResponseOnVideoEnable(EResponseOnVideoEnable eEnable)
    • EResponseOnVideoEnable ResponseOnVideoEnable()

Migration

  • In version 5.5 or earlier, you could use SetResponseOnVideoEnable() to determine the behavior when the peer requested a video call.

    • If set to EResponseOnVideoEnable::PAUSE, the state of the local user's video changed to paused upon switching to a video call, and no video was sent.
    • If set to EResponseOnVideoEnable::SEND, the local user's video was sent upon switching to a video call.
  • Starting from version 6.0, the related APIs have been removed. The state of the local user's video changes to paused upon switching to a video call, and no video is sent.

  • In version 5.5 or earlier, you could set the pause/send option as follows.

      void SetResponseOnVideoEnableSend(PlanetKit::MakeCallParamPtr pCallParam) {
    pCallParam->SetResponseOnVideoEnable(EResponseOnVideoEnable::SEND);
    }

    void SetResponseOnVideoEnablePause(PlanetKit::MakeCallParamPtr pCallParam) {
    pCallParam->SetResponseOnVideoEnable(EResponseOnVideoEnable::PAUSE);
    }

    void MakeCall(PlanetKit::MakeCallParamPtr pCallParam) {
    SetResponseOnVideoEnableSend(pCallParam);

    auto planetkitManager = PlanetKit::PlanetKitManager::GetInstance();
    PlanetKit::PlanetKitCallPtr pCall;
    planetkitManager->MakeCall(pCall, pCallParam);
    }

    ...
    // It is possible to know whether video is being sent to the peer at the time of switching to a video call through an event.
    void OnVideoEnabledByPeer(PlanetKit::PlanetKitCallPtr pPlanetKitCall, bool bIsSendingMyVideo) {
    // If bIsSendingMyVideo is false, it is in a pause state.
    }
  • Starting from version 6.0, switching to a video call always begins in the paused state.

      void MakeCall(PlanetKit::MakeCallParamPtr pCallParam, PlanetKit::MicPtr pMic) {
    auto planetkitManager = PlanetKit::PlanetKitManager::GetInstance();
    PlanetKit::PlanetKitCallPtr pCall;
    planetkitManager->MakeCall(pCall, pMic, pCallParam);
    }

    ...
    // The event allows determining the moment of switching to a video call.
    void OnVideoEnabledByPeerAndMyVideoPaused(PlanetKit::PlanetKitCallPtr pPlanetKitCall) {
    }

Rename API name in CameraController

  • Changed API name.

API

Changed
  • CameraController class 1-to-1 callGroup call

    PreviousPlanetKit 6.0.0
    EVideoControlResult SelectCamera(CameraInfoPtr pCameraInfo)EVideoControlResult ChangeCamera(CameraInfoPtr pCameraInfo)