Skip to main content

Migrating from PlanetKit 4.4 to 5.5

This guide provides detailed steps and considerations for migrating from PlanetKit 4.4 to PlanetKit 5.5.

Migration

Breaking change Add new classes for memory management

  • Added memory management classes to manage the lifecycle of pointer-type variables provided by PlanetKit.
  • Added AutoPtr, Optional, and Array.
    • Changed to use AutoPtr for pointer-type variables.
    • APIs that explicitly provided nullptr have been modified to use Optional.
    • Array variables are now provided as Array instead of being provided as parameter size and pointer.

API changes

Changed
  • ICallEvent class 1-to-1 call

    PreviousPlanetKit 5.5
    void OnCallConnect(PlanetKitCall *pPlanetKitCall, SCallConnectedParam *pConnectedParam)void OnConnected(PlanetKitCallPtr pPlanetKitCall, CallConnectedParamPtr pConnectedParam)
    void OnCallWaitAnswer(PlanetKitCall *pPlanetKitCall)void OnWaitAnswer(PlanetKitCallPtr pPlanetKitCall)
    void OnCallVerified(PlanetKitCall *pPlanetKitCall, SCallVerifiedParam *pVerifiedParam)void OnVerified(PlanetKitCallPtr pPlanetKitCall, CallVerifiedParamPtr pVerifiedParam)
    void OnCallPreperationFinished(PlanetKitCall *pPlanetKitCall)void OnPreparationFinished(PlanetKitCallPtr pPlanetKitCall)
    void OnCallDisconnect(PlanetKitCall *pPlanetKitCall, const SCallDisconnectedParam *pParam)void OnDisconnected(PlanetKitCallPtr pPlanetKitCall, CallDisconnectedParamPtr pDisconnectedParam)
    void OnPeerVideoPaused(PlanetKitCall *pPlanetKitCall, EVideoPauseReason eVideoPauseReason)void OnPeerVideoPaused(PlanetKitCallPtr pPlanetKitCall, EVideoPauseReason eVideoPauseReason)
    void OnPeerVideoResumed(PlanetKitCall *pPlanetKitCall)void OnPeerVideoResumed(PlanetKitCallPtr pPlanetKitCall)
    void OnShortDataReceived(PlanetKitCall *pPlanetKitCall, const SShortDataParam *pShortDataParam)void OnReceivedShortData(PlanetKitCallPtr pPlanetKitCall, ShortDataParamPtr pShortDataParam)
    void OnVideoEnabledByPeer(PlanetKitCall *pPlanetKitCall, bool bVideoCapturerStartSuccess)void OnVideoEnabledByPeer(PlanetKitCallPtr pPlanetKitCall, bool bIsSendingMyVideo)
    void OnVideoDisabledByPeer(PlanetKitCall *pPlanetKitCall, const EMediaDisabledReason eReason)void OnVideoDisabledByPeer(PlanetKitCallPtr pPlanetKitCall, const EMediaDisabledReason eReason)
    void OnPeerHold(PlanetKitCall *pPlanetKitCall, const char *szHoldReason)void OnReceivedPeerHold(PlanetKitCallPtr pPlanetKitCall, const WString& strHoldReason)
    void OnPeerUnhold(PlanetKitCall *pPlanetKitCall)void OnReceivedPeerUnhold(PlanetKitCallPtr pPlanetKitCall)
    void OnNetworkUnavailable(PlanetKitCall *pPlanetKitCall, bool bIsPeer, int nDisconnectAfterSec)void OnNetworkUnavailable(PlanetKitCallPtr pPlanetKitCall, bool bIsPeer, int nDisconnectAfterSec)
    void OnNetworkReavailable(PlanetKitCall *pPlanetKitCall, bool bIsPeer)void OnNetworkReavailable(PlanetKitCallPtr pPlanetKitCall, bool bIsPeer)
    void OnPeerMicMuted(PlanetKitCall *pPlanetKitCall)void OnPeerMicMuted(PlanetKitCallPtr pPlanetKitCall)
    void OnPeerMicUnmuted(PlanetKitCall *pPlanetKitCall)void OnPeerMicUnmuted(PlanetKitCallPtr pPlanetKitCall)
    void OnMuteRequest(PlanetKitCall *pPlanetKitCall, bool bEnableMute)void OnReceivedMuteMyAudioRequest(PlanetKitCallPtr pPlanetKitCall, bool bEnableMute)
    void OnPeerStartScreenShare(PlanetKitCall *pPlanetKitCall)void OnPeerStartedScreenShare(PlanetKitCallPtr pPlanetKitCall)
    void OnPeerStopScreenShare(PlanetKitCall *pPlanetKitCall, bool bHasReason, int nUserReason)void OnPeerStoppedScreenShare(PlanetKitCallPtr pPlanetKitCall, bool bHasReason, int nUserReason)
    void OnDataSessionIncoming(DataSessionStreamIdT nStreamId, EDataSessionType eType)void OnDataSessionIncoming(DataSessionStreamIdT nStreamId, EDataSessionType eType)
  • IConferenceEvent class Group call

    PreviousPlanetKit 5.5
    void OnConferenceConnect(PlanetKitConference *pPlanetKitConference, SConferenceConnectedParam *pParam)void OnConnected(PlanetKitConferencePtr pPlanetKitConference, ConferenceConnectedParamPtr pParam)
    void OnConferenceDisconnect(PlanetKitConference *pPlanetKitConference, const SConferenceDisconnectedParam *pParam)void OnDisconnected(PlanetKitConferencePtr pPlanetKitConference, ConferenceDisconnectedParamPtr pParam)
    void OnPeerListUpdate(PlanetKitConference *pPlanetKitConference, ConferencePeerUpdateParam* pParam)void OnPeerListUpdate(PlanetKitConferencePtr pPlanetKitConference, ConferencePeerUpdateParamPtr pParam)
    void OnPeerVideoUpdate(PlanetKitConference *pPlanetKitConference, ConferenceVideoUpdatedParam *pParam)void OnPeersVideoUpdated(PlanetKitConferencePtr pPlanetKitConference, ConferenceVideoUpdatedParam* pParam)
    void OnPublicSubgroupPeerUpdate(PlanetKitConference *pPlanetKitConference, const ConferenceSubGroupUpdateParam *pParam)void OnPublicSubgroupUpdated(PlanetKitConferencePtr pPlanetKitConference, const ConferenceSubgroupUpdatePeerArray& arrSubgroupUpdatePeer)
    void OnShortDataReceived(PlanetKitConference *pPlanetKitConference, const SShortDataParam *pParam)void OnReceivedShortData(PlanetKitConferencePtr pPlanetKitConference, ShortDataParamPtr pParam)
    void OnPeersHold(PlanetKitConference *pPlanetKitConference, CommonReceivedHolds * pParam)void OnReceivedPeersHold(PlanetKitConferencePtr pPlanetKitConference, const PeerHoldArray& arrPeerHold)
    void OnPeersUnhold(PlanetKitConference *pPlanetKitConference)void OnReceivedPeersUnhold(PlanetKitConferencePtr pPlanetKitConference, const PeerArray& arrPeer)
    void OnPeersMicMuted(PlanetKitConference *pPlanetKitConference, PeerInfos * pPeerInfos)void OnPeersMicMuted(PlanetKitConferencePtr pPlanetKitConference, const PeerArray& peerArray)
    void OnPeersMicUnmuted(PlanetKitConference *pPlanetKitConference, PeerInfos * pPeerInfos)void OnPeersMicUnmuted(PlanetKitConferencePtr pPlanetKitConference, const PeerArray& peerArray)
    void OnMuteRequest(PlanetKitConference *pPlanetKitConference, PeerInfo* pParam, bool bEnableMute)void OnReceivedMuteMyAudioRequest(PlanetKitConferencePtr pPlanetKitConference, PeerPtr pPeer, bool bEnableMute)
    void OnReceiveAppControlMessage(PlanetKitConference *pPlanetKitConference, const void *pMessage, int nMessageSize)void OnReceivedAppControlMessage(PlanetKitConferencePtr pPlanetKitConference, const void* pMessage, int nMessageSize)
    void OnBadNetworkDetected(PlanetKitConference *pPlanetKitConference, int nWillDisconnectAfterSec)void OnNetworkUnavailable(PlanetKitConferencePtr pPlanetKitConference, int nWillDisconnectAfterSec)
    void OnBadNetworkResolved(PlanetKitConference *pPlanetKitConference)void OnNetworkReavailable(PlanetKitConferencePtr pPlanetKitConference)
    void OnDataSessionIncoming(const char* szSubgroupName, DataSessionStreamIdT nStreamId, EDataSessionType eType)void OnDataSessionIncoming(const WStringOptional& strSubgroupName, DataSessionStreamIdT nStreamId, EDataSessionType eType)
    void OnPeerScreenSharingUpdateInfo(ConferencePeerScreenSharingUpdateInfo* pPeerScreenSharingUpdateInfo)void OnPeerScreenShareUpdated(ConferencePeerScreenShareUpdatedParam* pPeerScreenShareUpdateInfo)
    void OnConferenceException(PlanetKitConference *pPlanetKitConference, ConferenceExceptionMessage* pExceptionMessage)void OnException(PlanetKitConferencePtr pPlanetKitConference, const ConferenceExceptionArray& arrExceptionMessage)
  • ConferencePeerUpdateParam class Group call

    PreviousPlanetKit 5.5
    SubGroup* GetSubGroup()SubgroupPtr GetSubgroup()
    ConferencePeer* AddedAt(size_t index)const PeerArray& GetAddedPeer()
    ConferencePeer* RemovedAt(size_t index)const PeerArray& GetRemovedPeer()
  • ConferenceVideoUpdatedParam class Group call

    PreviousPlanetKit 5.5
    PeerVideoStatus* At(size_t nIdx)const PeerVideoStatusArray& GetPeerVideoStatus()
    SubGroup* GetSubGroup()SubgroupPtr GetSubgroup()
  • ConferenceSubgroupUpdatePeer class Group call

    PreviousPlanetKit 5.5
    ConferencePeerInfo* GetPeerInfo() constPeerPtr GetPeer() const
    const CommonStringArray* GetSubscribedSubgroup() constconst WStringArray& GetSubscribedSubgroupNames() const
    const CommonStringArray* GetUnsubscribedSubgroup() constconst WStringArray& GetUnsubscribedSubgroup() const
  • ConferenceException class Group call

    PreviousPlanetKit 5.5
    ConferencePeer* GetPeer()PeerPtr GetPeer()
    SubGroup* GetSubGroup()SubgroupPtr GetSubgroup()
    const char* GetMessage()const WString& GetMessage()
  • SCallConnectedParam struct → CallConnectedParam class 1-to-1 call

    PreviousPlanetKit 5.5
    SCallInitData sCalleeInitDataCallStartMessagePtr GetPeerStartMessage()
    bool bVideoSendHWCodecEnabledbool IsVideoSendHardwareCodecEnabled()
  • SCallVerifiedParam struct → CallVerifiedParam class 1-to-1 call

    PreviousPlanetKit 5.5
    SCallInitData sCalleeInitDataCallStartMessagePtr GetPeerStartMessage()
  • SCallDisconnectedParam struct → CallDisconnectedParam class 1-to-1 call

    PreviousPlanetKit 5.5
    bool bByRemotebool IsDisconnectedByRemote()
    EDisconnectReason eReasonEDisconnectReason GetReason()
    const char* szUserRelCodeconst WString& GetUserReleaseCode()
  • SConferenceConnectedParam struct → ConferenceConnectedParam class Group call

    PreviousPlanetKit 5.5
    bool bVideoSendHWCodecEnabledbool IsVideoSendHardwareCodecEnabled()
  • SConferenceDisconnectedParam struct → ConferenceDisconnectedParam class Group call

    PreviousPlanetKit 5.5
    bool bByRemotebool IsDisconnectedByRemote()
    EDisconnectReason eEndReasonEDisconnectReason GetReason()
    const char* szUserRelCodeconst WString& GetUserReleaseCode()
  • ConferenceExceptionMessage class → ConferenceExceptionArray class Group call

  • ConferencePeerScreenSharingUpdateInfo class → ConferencePeerScreenShareUpdatedParam class Group call

    PreviousPlanetKit 5.5
    ConferencePeer* GetPeer()PeerPtr GetPeer()
    SubGroup* GetSubGroup()SubgroupPtr GetSubgroup()
    EScreenSharingState ScreenSharingState()EScreenShareState ScreenShareState()
Added
  • AutoPtr class 1-to-1 callGroup call
    • bool operator==(const AutoPtr<T>& rhs)
    • bool operator! =(const AutoPtr<T>& rhs)
    • AutoPtr<T>& operator=(const AutoPtr<T>& src)
    • AutoPtr<T>& operator=(T* src)
    • T* operator*()
    • T* operator->()
  • Optional class 1-to-1 callGroup call
    • bool HasValue() const
    • const T* operator->() const
    • T* operator->()
    • const T& operator*() const
    • T& operator*()
    • Optional<T>& operator=(const Optional<T>& src)
    • Optional<T>& operator=(const T& src)
    • T& Value()
    • const T& Value() const
  • Array class 1-to-1 callGroup call
    • const T* Buffer() const
    • T* Buffer()
    • void Resize(size_t size)
    • void SetAt(size_t idx, const T& rhs)
    • size_t Size() const
    • T& At(size_t idx) const
    • T& operator[](size_t idx) const
  • CallConnectedParam class 1-to-1 call
    • CallStartMessagePtr GetPeerStartMessage()
    • bool ShouldFinishPreparation()
    • bool IsInPreparation()
    • bool IsVideoSendHardwareCodecEnabled()
    • bool IsSupportDataSession()
  • CallVerifiedParam class 1-to-1 call
    • CallStartMessagePtr GetPeerStartMessage()
    • bool IsPeerUsePreparation()
  • CallDisconnectedParam class 1-to-1 call
    • bool IsDisconnectedByRemote()
    • EDisconnectReason GetReason()
    • const WString& GetUserReleaseCode()
  • ConferenceDisconnectedParam class Group call
    • bool IsDisconnectedByRemote()
    • EDisconnectReason GetReason()
    • const WString& GetUserReleaseCode()
  • ConferencePeerScreenShareUpdatedParam class Group call
    • PeerPtr GetPeer()
    • SubgroupPtr GetSubgroup()
    • EScreenShareState ScreenShareState()
Removed
  • SCallConnectedParam struct 1-to-1 call
    • EMediaType eMediaType
  • ConferencePeerUpdateParam class Group call
    • size_t AddedCount()
    • size_t RemovedCount()
  • ConferenceVideoUpdatedParam class Group call
    • size_t GetCount()
  • ConferenceSubGroupUpdateParam class Group call

Code examples

  • The added class can be used as follows.

    class YourApplication {
    public:
    MakeCallParamPtr CreateMakeCallParam() {
    // Do not need to release.
    PlanetKit::PlanetKitManagerPtr planetKitManager = PlanetKit::PlanetKitManager::GetInstance();

    PlanetKit::PlanetKitManagerPtr
    PlanetKit::UserIdPtr myId = PlanetKit::UserId::Create(
    L"yourId",
    L"yourServiceId",
    );

    PlanetKit::UserIdPtr peerId = PlanetKit::UserId::Create(
    L"peerId",
    L"peerServiceId"
    );

    // Do not need to release.
    PlanetKit::MakeCallParamPtr makeCallParam = PlanetKit::MakeCallParam::CreateWithAccessToken(
    myId,
    peerId,
    L"yourAccessToken"
    );

    return makeCallParam;
    }

    void MakeCall() {
    // Do not need to release.
    PlanetKit::PlanetKitManagerPtr planetkitManager = PlanetKit::PlanetKitManager::GetInstance();

    PlanetKit::MakeCallParamPtr makeCallParam = CreateMakeCallParam();

    auto startResult = planetkitManager->MakeCall(makeCallParam, &pCall);

    if (startResult.bSuccess == true) {
    // Do not need to release.
    m_pCall = pCall;
    }
    }

    private:
    PlanetKit::PlanetKitCallPtr m_pCall;
    };
  • APIs that provided pointer variables and structures as parameters are replaced with the PlanetKit::AutoPtr class. APIs provided as pointers to structures are provided as PlanetKit::AutoPtr.

    class YourCallEventListener : public PlanetKit::ICallEvent {
    public:

    // This API is deleted on version 5.5.
    // - void OnCallConnect(PlanetKit::PlanetKitCall *pPlanetKitCall, PlanetKit::SCallConnectedParam *pConnectedParam);
    // `PlanetKit::PlanetKitCall` and `PlanetKit::SCallConnectedParam` are changed with `PlanetKit::AutoPtr`.
    void OnConnected(PlanetKit::PlanetKitCallPtr pPlanetKitCall, PlanetKit::CallConnectedParamPtr pConnectedParam) override {
    // You can obtain the information of call connection using the API provided by pConnectedParam.

    ...
    }
    }
  • Instance variables that users created and used as API parameters are now created and returned by PlanetKit.

    class YourApplication {
    public:
    void PlanetKit::UserIdPtr createMyId() {
    // This API is deleted on version 5.5.
    // - PlanetKit::InitUserId myId("yourId", "yourServiceId");
    // In order to manage memory management and life cycle, the PlanetKit library was changed to create and return the necessary instances directly.
    PlanetKit::UserIdPtr myId = PlanetKit::UserId::Create(
    L"yourId",
    L"yourServiceId",
    );
    }

    return myId;
    }
  • Instances created using the API were previously provided as pointer variables, but have been replaced with the PlanetKit::AutoPtr class. This allows for automatic lifecycle management without the need to call APIs like AddRef() and Release() to manage references.

  • When using a string as a parameter, it is provided as a WString (UTF-8) without using const char and length variables.

    class YourApplication {
    public:
    void createMakeCallParam() {
    PlanetKit::UserIdPtr myId = PlanetKit::UserId::Create(
    L"yourId",
    L"yourServiceId",
    );

    PlanetKit::UserIdPtr peerId = PlanetKit::UserId::Create(
    L"peerId",
    L"peerServiceId",
    );

    // This API is deleted on version 5.5.
    // - static CallInitParam* CreateMakeCallParamWithAccessToken(const PlanetKit::InitUserId & myID, const PlanetKit::InitUserId & peerID, const char* szKey, int nKeyLen);
    // You do not need to directly manage the life cycle of CallInitParam* by using `PlanetKit::MakeCallParamPtr`.
    PlanetKit::MakeCallParamPtr makeCallParam = PlanetKit::MakeCallParam::CreateWithAccessToken(
    myId,
    peerId,
    L"yourAccessToken"
    );

    return makeCallParam;
    }
    }

Breaking change Change API parameter type from char (UTF-8) string to WString (UTF-16) string

  • To handle Unicode strings, the APIs have been modified to use WString (UTF-16) as the parameter type.
  • For APIs that have limitations on the length of input strings, PlanetKit converts the input string to UTF-8, checks its length, and returns a success or failure result.

API changes

Changed
  • PlanetKitCall class 1-to-1 call

    PreviousPlanetKit 5.5
    bool SendShortData(const SShortData *pShortData, void *pResultUserData, IResultHandler *pResultHandler)bool SendShortData(const WString& strType, void* pData, unsigned int nSize, void* pUserData = nullptr, ResultCallback pCallback = nullptr)
    bool Hold(const char *szHoldReason, bool bPauseReceive, void *pResultUserData, IResultHandler *pResultHandler)bool Hold(const WStringOptional& strHoldReason = NullOptional, void* pUserData = nullptr, ResultCallback pCallback = nullptr)
  • PlanetKitConference class Group call

    PreviousPlanetKit 5.5
    bool RequestPeerVideo(const char *szPeerId, const char *szPeerServiceId, const char *szSubGroupName, EVideoResolution eVideoResolution, void* pResultUserData, IRequestVideoResultHandler* pResultHandler, void* pReqVidResResultUserData, IRequestVideoResultHandler* pReqVidResResultHander)bool RequestPeerVideo(UserIdPtr pPeerId, const WStringOptional& strSubgroupName, EVideoResolution eVideoResolution, void* pUserData, RequestPeerVideoResolutionCallback pCallback)
    bool StopPeerVideo(const char *szPeerId, const char *szPeerServiceId, const char *szSubGroupName, void* pUserData, IRequestVideoResultHandler* pResultHandler)bool StopPeerVideo(UserIdPtr pPeerId, const WStringOptional& strSubgroupName, void* pUserData = nullptr, RequestPeerVideoResultCallback pCallback = nullptr)
    bool SendShortData(const SShortData *pShortData, SShortDataTarget *pTargets, unsigned int unTargetCount, void *pResultUserData, IResultHandler *pResultHandler)bool SendShortData(const WString& strType, void* pData, unsigned int nSize, UserIdPtr pPeerId, void* pUserData = nullptr, ResultCallback pCallback = nullptr)
    bool Hold(const char *szHoldReason, void *pResultUserData, IResultHandler *pResultHandler)bool Hold(const WStringOptional& strHoldReason = NullOptional, void* pUserData = nullptr, ResultCallback pCallback = nullptr)
    bool RequestMutePeerAudioSend(const char *szPeerId, const char *szPeerServiceId, bool bMute, void *pResultUserData, IResultHandler *pResultHandler)bool RequestPeerMute(UserIdPtr pPeerId, bool bMute, void* pUserData = nullptr, ResultCallback pCallback = nullptr)
    bool StartMyScreenShare(const char* szSubgroupName, void *pResultUserData, IResultHandler *pResultHandler)bool StartMyScreenShare(ScreenShareInfoPtr pScreenShareInfo, const WStringOptional& strSubgroupName, void* pUserData = nullptr, ResultCallback pCallback = nullptr)
    bool ChangeMyScreenShareGroup(const char* szToSubgroupName, void *pResultUserData, IResultHandler *pResultHandler)bool ChangeMyScreenShareDestination(const WString& strToSubgroupName, void* pUserData = nullptr, ResultCallback pCallback = nullptr)
    bool RequestPeerScreenShare(const char* szPeerId, const char* szPeerServiceId, const char* szSubgroupName, void *pResultUserData, IRequestVideoResultHandler* pResultHandler)bool RequestPeerScreenShare(UserIdPtr pPeerId, const WStringOptional& strSubgroupName, void* pUserData, RequestPeerVideoResultCallback pCallback)
    bool StopPeerScreenShare(const char* szPeerId, const char* szPeerServiceId, const char* szSubgroupName, void *pResultUserData, IRequestVideoResultHandler* pResultHandler)bool StopPeerScreenShare(UserIdPtr pPeerId, const WStringOptional& strSubgroupName, void* pUserData, RequestPeerVideoResultCallback pCallback)
    const char* MyDisplayName()const WStringOptional& GetMyDisplayName()
  • ConferenceSubGroupUpdatePeer class Group call

    PreviousPlanetKit 5.5
    const CommonStringArray* GetSubscribedSubgroup() constconst WStringArray& GetSubscribedSubgroupNames() const
    const CommonStringArray* GetUnsubscribedSubgroup() constconst WStringArray& GetUnsubscribedSubgroup() const
  • ConferenceException class Group call

    PreviousPlanetKit 5.5
    const char* GetMessage()const WString& GetMessage()
  • IConferenceEvent class Group call

    PreviousPlanetKit 5.5
    void OnDataSessionIncoming(const char* szSubgroupName, DataSessionStreamIdT nStreamId, EDataSessionType eType)void OnDataSessionIncoming(const WStringOptional& strSubgroupName, DataSessionStreamIdT nStreamId, EDataSessionType eType)
  • AudioDevice class 1-to-1 callGroup call

    PreviousPlanetKit 5.5
    bool PlayFile(const char* szPath, unsigned int unLoop)bool PlayFile(const WString& strFilePath, unsigned int unLoop)
  • MakeCallParam class 1-to-1 call

    PreviousPlanetKit 5.5
    static CallInitParam* CreateMakeCallParamWithAccessToken(const InitUserId & myID, const InitUserId & peerID, const char* szKey, int nKeyLen)static MakeCallParamPtr CreateWithAccessToken(UserIdPtr pMyID, UserIdPtr pPeerID, const WString& strToken)
    static CallInitParam* CreateMakeCallParamWithAPIKey(const InitUserId & myID, const InitUserId & peerID, const char* szKey)static MakeCallParamPtr CreateWithAPIKey(UserIdPtr pMyID, UserIdPtr pPeerID, const WString& strKey)
    const char* RingTonePath()const WString& GetRingTonePath()
    const char* RingBackTonePath()const WString& GetRingBackTonePath()
    const char* HoldTonePath()const WString& GetHoldTonePath()
    const char* GetStid()const wchar_t* GetAppServerData()
    void SetStid(const char* szStid)void SetAppServerData(const wchar_t* szAppServerData)
    void SetRingTonePath(const char* szRingTonePath)void SetRingTonePath(const WString& strRingTonePath)
    void SetRingBackTonePath(const char* szRingBackTonePath)void SetRingBackTonePath(const WString& strRingBackTonePath)
    void SetHoldTonePath(const char* szHoldTonePath)void SetHoldTonePath(const WString& strHoldTonePath)
  • VerifyCallParam class 1-to-1 call

    PreviousPlanetKit 5.5
    static CallInitParam* CreateVerifyCallParam(const InitUserId & myID, const char* szCcParam)static VerifyCallParamPtr Create(UserIdPtr pMyID, CCParamPtr pCCParam)
    const char* RingTonePath()const WString& GetRingTonePath()
    const char* RingBackTonePath()const WString& GetRingBackTonePath()
    const char* HoldTonePath()const WString& GetHoldTonePath()
    void SetRingTonePath(const char* szRingTonePath)void SetRingTonePath(const WString& strRingTonePath)
    void SetRingBackTonePath(const char* szRingBackTonePath)void SetRingBackTonePath(const WString& strRingBackTonePath)
    void SetHoldTonePath(const char* szHoldTonePath)void SetHoldTonePath(const WString& strHoldTonePath)
  • CommonSetSharedContent class 1-to-1 callGroup call

    PreviousPlanetKit 5.5
    const char* PeerId()UserIdPtr GetPeerID()
    const char* ServiceId()UserIdPtr GetPeerID()
  • ConferenceParam class Group call

    PreviousPlanetKit 5.5
    static ConferenceJoinParam * CreateWithAccessToken(const InitUserId & myID, const char* szAccessToken, int nAccessTokenLength)static ConferenceParamPtr CreateWithAPIKey(UserIdPtr pMyID, const WString& strRoomID, const WString& strRoomServiceID, const WString& strAPIKey)
    static ConferenceJoinParam* CreateWithAPIKey(const InitUserId & myID, const char* szAPIKey)static ConferenceParamPtr CreateWithAccessToken(UserIdPtr pMyID, const WString& strRoomID, const WString& strRoomServiceID, const WString& strToken)
    const char* DisplayName()const WStringOptional& GetDisplayName()
    void SetDisplayName(const char* szMyDisplayName)void SetDisplayName(const WStringOptional& strMyDisplayName)
    const char* RoomId()const WString& GetRoomId()
    void SetRoomId(const char* szRoomId)void SetRoomId(const WString& strRoomId)
    const char* RoomServiceId()const WString& GetRoomServiceId()
    void SetRoomServiceId(const char *szRoomServiceId)void SetRoomId(const WString& strRoomId)
    const char* GetStid()const wchar_t* GetAppServerData()
    void SetStid(const char* szStid)void SetAppServerData(const wchar_t* szAppServerData)
  • PlanetKitManager class 1-to-1 callGroup call

    PreviousPlanetKit 5.5
    bool UpdateServerUrl(const char *szServerUrl)bool UpdateServerUrl(const WString& strServerUrl)
    bool GetServerUrl(char * szServerUrl, size_t nBufferSize)WString& GetServerUrl()
    const char* PlanetKitVersion()const WString& PlanetKitVersion()
  • StatisticsVideoRecv class 1-to-1 callGroup call

    PreviousPlanetKit 5.5
    const char* PeerId()UserIdPtr GetPeerID()
    const char* PeerServiceId()UserIdPtr GetPeerID()
    const char* SubgroupName()const WStringOptional& GetSubgroupName()
  • StatisticsScreenShareRecv class 1-to-1 callGroup call

    PreviousPlanetKit 5.5
    const char* PeerId()UserIdPtr GetPeerID()
    const char* PeerServiceId()UserIdPtr GetPeerID()
    const char* SubgroupName()const WStringOptional& GetSubgroupName()
  • SubGroup class - Group call

    PreviousPlanetKit 5.5
    const char *GetSubGroupName()const WStringOptional& GetSubgroupName()
  • SubGroupManager class Group call

    PreviousPlanetKit 5.5
    bool SubscribeSubgroup(const char *szSubgroupName, ESubgroupPeerUpdateType eUpdateType, bool bEnableVideoUpdate, bool bUseDataSession, void *pResultUserData, ISubscribeSubgroupResultHandler *pResultHandler)bool SubscribeSubgroup(const WString& strSubgroupName, ESubgroupPeerUpdateType eUpdateType, bool bEnableVideoUpdate, bool bUseDataSession, void* pUserData = nullptr, SubscribeResult pCallback = nullptr)
    bool UnsubscribeSubgroup(const char *szSubgroupName, void *pResultUserData, IUnsubscribeSubgroupResultHandler *pResultHandler)bool UnsubscribeSubgroup(const WString& strSubgroupName, void* pUserData = nullptr, UnsubscribeResult pCallback = nullptr)
    SubGroupOptional GetSubGroup(const char *szSubGroupName)SubgroupOptional GetSubgroup(const WString& strSubgroupName)
    SubGroupOptional GetSubGroup(const char *szSubGroupName)SubgroupPtr GetMainRoom()
    bool ChangeMyAudioSend(const char *szDstSubgroupName, void *pResultUserData, IResultHandler *pResultHandler)bool ChangeMyAudioDestination(const WString& strDestinationSubgroupName, void* pUserData = nullptr, ResultCallback pCallback = nullptr)
    bool ChangeMyAudioSend(const char *szDstSubgroupName, void *pResultUserData, IResultHandler *pResultHandler)bool ChangeMyAudioDestinationToMainRoom(void* pUserData = nullptr, ResultCallback pCallback = nullptr)
    bool TagMainRoomAudioSend(const char *szTagSubgroupName, void *pResultUserData, IResultHandler *pResultHandler)bool SetTagMyAudioOfMainRoom(const WString& strTagSubgroupName, void* pUserData = nullptr, ResultCallback pCallback = nullptr)
    bool SilenceAudio(const char *szSubgroupName, bool bSilence, void *pResultUserData, IResultHandler *pResultHandler)bool SilencePeersAudio(const WStringOptional& strSubgroupName, bool bSilence, void* pUserData = nullptr, ResultCallback pCallback = nullptr)
    bool EnableAutoVolumeControl(const char **szFocusSubgroups, size_t nFocusSubgroupCnt, void *pResultUserData, IResultHandler *pResultHandler)bool SetPeersAudioAutoVolumeControl(const WStringArray& arrSubgroupNames, void* pUserData = nullptr, ResultCallback pCallback = nullptr)
    bool SetPeerVolumeSetting(const char *szPeerId, const char *szPeerServiceId, bool bSetForAllSubgroups, const char *szSubgroupNameToApply, unsigned char ucVolume, void *pResultUserData, IResultHandler *pResultHandler)bool SetPeerAudioVolumeLevelSetting(UserIdPtr pPeerId, bool bSetForAllSubgroups, const WStringOptional& strSubgroupNameToApply, unsigned char ucVolume, void* pUserData = nullptr, ResultCallback pCallback = nullptr)
    const String& GetMyVideoSubGroupName()WStringOptional GetMyVideoSubgroupName()
    bool VideoSendChangeSubgroup(const char *szDstSubgroupName, void *pResultUserData, IResultHandler *pResultHandler)bool ChangeMyVideoDestination(const WString& strDestinationSubgroupName, void* pUserData = nullptr, ResultCallback pCallback = nullptr)
    bool VideoSendChangeSubgroup(const char *szDstSubgroupName, void *pResultUserData, IResultHandler *pResultHandler)bool ChangeMyVideoDestinationToMainRoom(void* pUserData = nullptr, ResultCallback pCallback = nullptr)
Added
  • WString class 1-to-1 callGroup call
    • operator const wchar_t*() const
    • const wchar_t* c_str() const
    • size_t Size() const
    • WString& Append(const wchar_t* rhs)
    • bool operator==(const wchar_t* rhs) const
    • bool operator==(const WString& rhs) const
    • bool operator! =(const WString& rhs) const
    • const wchar_t operator[] (int idx)
    • WString& operator=(const wchar_t* src)
    • WString& operator=(const WString& src)
    • WString& operator+=(const wchar_t* rhs)
    • WString& operator+=(const WString& rhs)
    • WString Substring(const unsigned int unStart, const unsigned unLength = 0) const
  • MakeCallParam class 1-to-1 call
    • const WString& GetEndTonePath()
    • void SetEndTonePath(const WString& strEndTonePath)
  • VerifyCallParam class 1-to-1 call
    • const WString& GetEndTonePath()
    • void SetEndTonePath(const WString& strEndTonePath)
  • ConferenceParam class 1-to-1 call
    • const WString& GetEndTonePath()
    • void SetEndTonePath(const WString& strEndTonePath)
Removed
  • MakeCallParam class 1-to-1 call
    • const char* GetAPIKey()
    • const char* GetAccessToken()
  • ConferenceParam class Group call
    • const char* GetAPIKey()
    • const char* GetAccessToken()

Code examples

  • If you used std::string for a string variable, change it to std::wstring and use Prefix L for string constants.

    void YourApplication::MakeCallParam(std::wstring strAccessToken) {
    // change std::string to std::wstring
    std::wstring strUserId = L"your id";
    std::wstring strServiceId = L"your serivce id";
    std::wstring strPeerId = L"peer id";
    std::wstring strPeerServiceId = L"peer service id";

    PlanetKit::UserIdPtr pMyId = PlanetKit::UserId::Create(strUserId.c_str(), strServiceId.c_str());
    PlanetKit::UserIdPtr pPeerId = PlanetKit::UserId::Create(strPeerId.c_str(), strPeerServiceId.c_str());

    PlanetKit::MakeCallParamPtr pMakeCallParam = PlanetKit::MakeCallParam::CreateWithAccessToken(
    pMyId,
    pPeerId,
    strAccessToken.c_str()
    );
    }
  • To change a char string (UTF-8) to a wchar_t string (UTF-16), you can use the MultibyteToWideChar API provided by Windows.

    std::wstring YourApplication::ConvertUTF8(LPCSTR pszUTF8Text) {
    if(pszUTF8Text == NULL || *pszUTF8Text == '\0') {
    return std::wstring();
    }

    int nLengthOfUTF8 = lstrlenA(pszUTF8Text);

    int nUTF16 = ::MultiByteToWideChar(
    CP_UTF8,
    0,
    pszUTF8Text,
    nLengthOfUTF8,
    nullptr,
    0);

    if (nUTF16 == 0) {
    return std::wstring();
    }

    std::wstring strConvertedUTF16Text(nUTF16, '\0');

    int nResult = ::MultiByteToWideChar(
    CP_UTF8,
    0,
    pszUTF8Text,
    nLengthOfUTF8,
    &strConvertedUTF16Text[0],
    nUTF16);

    if (nResult == 0) {
    return std::wstring();
    }

    return strConvertedUTF16Text;
    }
  • CString provided by Windows can be used as UTF-16 if the project's Character set option is set to Unicode Character Set, so there is no need to change the code.

Breaking change Remove IResultHandler, ISubscribeSubgroupResultHandler, and IUnsubscribeSubgroupResultHandler classes

  • Removed the classes that were used to deliver the results of asynchronous API calls as a callback and added static functions.
    • Removed IResultHandler, ISubscribeSubgroupResultHandler, IUnsubscribeSubgroupResultHandler and replaced them with ResultCallback, SubscribeResult, UnsubscribeResult.
  • You can now use a class static function, a C-style static function, or a lambda function as the "function callback".

API changes

Changed
  • IResultHandler class → using ResultCallback = void(*)(void* pUserData, bool bSuccess) 1-to-1 callGroup call

  • ISubscribeSubgroupResultHandler class → using SubscribeResult = void(*)(SubgroupPtr pSubgroup, bool bSuccess, ESubgroupSubscribeFailReason eReason, void* pUserData) Group call

  • IUnsubscribeSubgroupResultHandler class → using UnsubscribeResult = void(*)(SubgroupPtr pSubgroup, bool bSuccess, ESubgroupUnsubscribeFailReason eReason, void* pUserData) Group call

  • PlanetKitCall class 1-to-1 call

    PreviousPlanetKit 5.5
    bool MuteMyAudio(bool bMute, void *pMuteResultUserData, IResultHandler *pMuteResultHandler)bool MuteMyAudio(bool bMute, void *pUserData = nullptr, ResultCallback pCallback = nullptr)
    bool PauseMyVideo(void *pResultUserData, IResultHandler *pResultHandler)bool PauseMyVideo(void* pUserData = nullptr, ResultCallback pCallback = nullptr)
    bool ResumeMyVideo(void *pResultUserData, IResultHandler *pResultHandler)bool ResumeMyVideo(void* pUserData = nullptr, ResultCallback pCallback = nullptr)
    bool EnableVideo(void *pResultUserData, IResultHandler *pResultHandler)bool EnableVideo(void* pUserData = nullptr, ResultCallback pCallback = nullptr)
    bool DisableVideo(EMediaDisabledReason eDisableReason, void *pResultUserData, IResultHandler *pResultHandler)bool DisableVideo(EMediaDisabledReason eDisableReason = PLNK_MEDIA_DISABLE_REASON_USER, void* pUserData = nullptr, ResultCallback pCallback = nullptr)
    bool Unhold(void *pResultUserData, IResultHandler *pResultHandler)bool Unhold(void* pUserData = nullptr, ResultCallback pCallback = nullptr)
    bool RequestPeerMute(bool bMute, void *pResultUserData, IResultHandler *pResultHandler)bool RequestPeerMute(bool bMute, void* pUserData = nullptr, ResultCallback pCallback = nullptr)
    bool SilencePeerAudio(bool bSilence, void *pResultUserData, IResultHandler *pResultHandler)bool SilencePeerAudio(bool bSilence, void* pUserData = nullptr, ResultCallback pCallback = nullptr)
    bool StartMyScreenShare(ScreenShareInfoPtr pScreenShareInfo, void *pResultUserData, IResultHandler *pResultHandler)bool StopMyScreenShare(void* pUserData = nullptr, ResultCallback pCallback = nullptr)
    bool StopMyScreenShare(void *pResultUserData, IResultHandler *pResultHandler)bool StopMyScreenShare(void* pUserData = nullptr, ResultCallback pCallback = nullptr)
    bool StopMyScreenShare(int nUserReason, void *pResultUserData, IResultHandler *pResultHandlerbool StopMyScreenShare(int nUserReason, void* pUserData = nullptr, ResultCallback pCallback = nullptr)
    bool StartUserAcousticEchoCancellerReference(void *pResultUserData, IResultHandler *pResultHandler)bool StartUserAcousticEchoCancellerReference(void *pUserData = nullptr, ResultCallback pCallback = nullptr)
    bool StopUserAcousticEchoCancellerReference(void *pResultUserData, IResultHandler *pResultHandler)bool StopUserAcousticEchoCancellerReference(void* pUserData = nullptr, ResultCallback pCallback = nullptr)
  • PlanetKitConference class Group call

    PreviousPlanetKit 5.5
    bool MuteMyAudio(bool bMute, void *pMuteResultUserData, IResultHandler *pMuteResultHandler)bool MuteMyAudio(bool bMute, void *pUserData = nullptr, ResultCallback pCallback = nullptr)
    bool PauseMyVideo(void *pPauseResultUserData, IResultHandler *pPauseResultHandler)bool PauseMyVideo(void* pUserData = nullptr, ResultCallback pCallback = nullptr)
    bool ResumeMyVideo(void *pResumeResultUserData, IResultHandler *pResumeResultHandler)bool ResumeMyVideo(void* pUserData = nullptr, ResultCallback pCallback = nullptr)
    bool EnableVideo(void *pResultUserData, IResultHandler *pResultHandler)bool EnableVideo(void *pUserData = nullptr, ResultCallback pCallback = nullptr)
    bool DisableVideo(void *pResultUserData, IResultHandler *pResultHandler)bool DisableVideo(void* pUserData = nullptr, ResultCallback pCallback = nullptr)
    bool Unhold(void* pResultUserData, IResultHandler* pResultHandler)bool Unhold(void* pUserData = nullptr, ResultCallback pCallback = nullptr)
    bool RequestPeerMute(UserIdPtr pPeerId, bool bMute, void* pUserData, IResultHandler* pResultHandler)bool RequestPeerMute(UserIdPtr pPeerId, bool bMute, void* pUserData = nullptr, ResultCallback pCallback = nullptr)
    bool RequestPeersMute(bool bMute, void* pUserData, IResultHandler* pResultHandler)bool RequestPeersMute(bool bMute, void* pUserData = nullptr, ResultCallback pCallback = nullptr)
    bool SilencePeersAudio(bool bSilence, void *pResultUserData, IResultHandler *pResultHandler)bool SilencePeersAudio(bool bSilence, void* pUserData = nullptr, ResultCallback pCallback = nullptr)
    bool StopMyScreenShare(void* pUserData, IResultHandler* pResultHandler)bool StopMyScreenShare(void* pUserData = nullptr, ResultCallback pCallback = nullptr)
    bool StopMyScreenShare(int nUserReason, void* pUserData, IResultHandler* pResultHandler)bool StopMyScreenShare(int nUserReason, void* pUserData = nullptr, ResultCallback pCallback = nullptr)
    bool ChangeMyScreenShareDestinationToMainRoom(void* pUserData, IResultHandler* pResultHandler)bool ChangeMyScreenShareDestinationToMainRoom(void* pUserData = nullptr, ResultCallback pCallback = nullptr)
    bool StartUserAcousticEchoCancellerReference(void* pUserData, IResultHandler* pResultHandler)bool StartUserAcousticEchoCancellerReference(void* pUserData = nullptr, ResultCallback pCallback = nullptr)
    bool StopUserAcousticEchoCancellerReference(void *pResultUserData, IResultHandler *pResultHandler)bool StopUserAcousticEchoCancellerReference(void* pUserData = nullptr, ResultCallback pCallback = nullptr)
  • SubgroupManager class Group call

    PreviousPlanetKit 5.5
    bool SubscribeSubgroup(const wchar_t* szSubgroupName, ESubgroupPeerUpdateType eUpdateType, bool bEnableVideoUpdate, bool bUseDataSession, void* pUserData, ISubscribeSubgroupResultHandler* pCallback)bool SubscribeSubgroup(const WString& strSubgroupName, ESubgroupPeerUpdateType eUpdateType, bool bEnableVideoUpdate, bool bUseDataSession, void* pUserData = nullptr, SubscribeResult pCallback = nullptr)
    bool UnsubscribeSubgroup(const wchar_t* szSubgroupName, void* pUserData, IUnsubscribeSubgroupResultHandler* pCallback)bool UnsubscribeSubgroup(const WString& strSubgroupName, void* pUserData = nullptr, UnsubscribeResult pCallback = nullptr)
    bool ChangeMyAudioDestination(const wchar_t* szSubgroupName, void* pUserData, IResultHandler* pCallback)bool ChangeMyAudioDestination(const WString& strDestinationSubgroupName, void* pUserData = nullptr, ResultCallback pCallback = nullptr)
    bool ChangeMyAudioDestinationToMainRoom(void* pUserData, IResultHandler* pCallback)bool ChangeMyAudioDestinationToMainRoom(void* pUserData = nullptr, ResultCallback pCallback = nullptr)
    bool SetTagMyAudioOfMainRoom(const wchar_t* szSubgroupName, void* pUserData, IResultHandler* pCallback)bool SetTagMyAudioOfMainRoom(const WString& strTagSubgroupName, void* pUserData = nullptr, ResultCallback pCallback = nullptr)
    bool ClearTagMyAudioOfMainRoom(void* pUserData, IResultHandler* pCallback)bool ClearTagMyAudioOfMainRoom(void* pUserData = nullptr, ResultCallback pCallback = nullptr)
    bool SilencePeersAudio(const wchar_t* szSubgroupName, bool bSilence, void* pUserData, IResultHandler* pCallback)bool SilencePeersAudio(const WStringOptional& strSubgroupName, bool bSilence, void* pUserData = nullptr, ResultCallback pCallback = nullptr)
    bool SetPeersAudioAutoVolumeControl(const WStringArray& arrSubgroupNames, void* pUserData, IResultHandler* pCallback)bool SetPeersAudioAutoVolumeControl(const WStringArray& arrSubgroupNames, void* pUserData = nullptr, ResultCallback pCallback = nullptr)
    bool ClearPeersAudioAutoVolumeControl(void *pResultUserData, IResultHandler *pResultHandler)bool ClearPeersAudioAutoVolumeControl(void* pUserData = nullptr, ResultCallback pCallback = nullptr)
    bool SetPeerAudioVolumeLevelSetting(UserIdPtr pPeerId, bool bSetForAllSubgroups, const wchar_t* szSubgroupName, unsigned char ucVolume, void* pUserData, IResultHandler* pCallback)bool SetPeerAudioVolumeLevelSetting(UserIdPtr pPeerId, bool bSetForAllSubgroups, const WStringOptional& strSubgroupNameToApply, unsigned char ucVolume, void* pUserData = nullptr, ResultCallback pCallback = nullptr)
    bool ChangeMyVideoDestination(const wchar_t* szSubgroupName, void* pUserData, IResultHandler* pCallback)bool ChangeMyVideoDestination(const WString& strDestinationSubgroupName, void* pUserData = nullptr, ResultCallback pCallback = nullptr)
    bool ChangeMyVideoDestinationToMainRoom(void* pUserData, IResultHandler* pCallback)bool ChangeMyVideoDestinationToMainRoom(void* pUserData = nullptr, ResultCallback pCallback = nullptr)

Code examples

  • The following is an example of how to check the result of asynchronous API in previous versions.

    enum YourCallResultType {
    CallMuteMyAudio = 0,
    CallPauseMyVideo,
    CallResumeMyVideo,
    ...
    };

    struct YourCallbackParam {
    YourCallResultType eType;
    YourCall* pYourCallInstance;
    }

    class YourCallResultHandler : public PlanetKit::IResultHandler {
    public :
    void OnResult(void* pUserData, bool bSuccess) {
    YourCallbackParam* pCallbackParam = (YourCallbackParam*)pUserData;
    switch(pCallbackParam->eType) {
    case YourCallResultType::CallMuteMyAudio :
    // Handle the mute result
    break;

    case YourCallResultType::CallPauseMyVideo :
    // Handle the pause result
    break;

    case YourCallResultType::CallResumeMyVideo :
    // Handle the resume result
    break;
    };

    delete pCallbackParam;
    }
    }

    class YourCall {
    void MuteMyAudio(bool bMute) {
    YourCallbackParam* pCallbackParam = new YourCallbackParam;
    pCallbackParam->eType = YourCallResultType::CallMuteMyAudio;

    m_pCall->MuteMyAudio(bMute, pCallbackParam, &m_callResultHandler);
    }

    void PauseMyVideo() {
    YourCallbackParam* pCallbackParam = new YourCallbackParam;
    pCallbackParam->eType = YourCallResultType::CallPauseMyVideo;

    m_pCall->PauseMyVideo(pCallbackParam, &m_callResultHandler);
    }

    void ResumeMyVideo() {
    YourCallbackParam* pCallbackParam = new YourCallbackParam;
    pCallbackParam->eType = YourCallResultType::CallResumeMyVideo;

    m_pCall->ResumeMyVideo(bMute, pCallbackParam, &m_callResultHandler);
    }

    private :
    YourCallResultHandler m_callResultHandler;
    PlanetKit::PlanetKitCallPtr m_pCall;
    }
  • In the new version, you can check the result of asynchronous API in the following three methods.

    • Method 1: Change the OnResult method to a static method.

      class YourCallResultHandler : public PlanetKit::IResultHandler {
      public :
      // Change the `OnResult` method to a static method
      static void OnResult(void* pUserData, bool bSuccess) {
      YourCallbackParam* pCallbackParam = (YourCallbackParam*)pUserData;
      switch(pCallbackParam->eType) {
      case YourCallResultType::CallMuteMyAudio :
      // Handle the mute result
      break;

      case YourCallResultType::CallPauseMyVideo :
      // Handle the pause result
      break;

      case YourCallResultType::CallResumeMyVideo :
      // Handle the resume result
      break;
      };

      delete pCallbackParam;
      }
      }

      class YourCall {
      void MuteMyAudio(bool bMute) {
      YourCallbackParam* pCallbackParam = new YourCallbackParam;
      pCallbackParam->eType = YourCallResultType::CallMuteMyAudio;

      // Use the static method as a callback parameter.
      m_pCall->MuteMyAudio(bMute, pCallbackParam, YourCallResultHandler::OnResult);
      }

      private :
      PlanetKit::PlanetKitCallPtr m_pCall;
      }
    • Method 2: Delete the YourCallResultHandler class and change the OnResult() method to a function.

      void OnResult(void* pUserData, bool bSuccess) {
      YourCallbackParam* pCallbackParam = (YourCallbackParam*)pUserData;
      switch(pCallbackParam->eType) {
      case YourCallResultType::CallMuteMyAudio :
      // Handle the mute result
      break;

      case YourCallResultType::CallPauseMyVideo :
      // Handle the pause result
      break;

      case YourCallResultType::CallResumeMyVideo :
      // Handle the resume result
      break;
      };

      delete pCallbackParam;
      }

      class YourCall {
      void MuteMyAudio(bool bMute) {
      YourCallbackParam* pCallbackParam = new YourCallbackParam;
      pCallbackParam->eType = YourCallResultType::CallMuteMyAudio;

      // Use the static method as a callback parameter.
      m_pCall->MuteMyAudio(bMute, pCallbackParam, OnResult);
      }

      private :
      PlanetKit::PlanetKitCallPtr m_pCall;
      }
    • Method 3: Use lambda expressions to check the results when calling asynchronous APIs.

      class YourCall {
      void MuteMyAudio(bool bMute) {
      YourCallbackParam* pCallbackParam = new YourCallbackParam;

      m_pCall->MuteMyAudio(bMute, pCallbackParam, [](void* pUserData, bool bSuccess) -> void {
      YourCallbackParam* pCallbackParam = (YourCallbackParam*)pUserData;
      // Handle the mute result
      delete pCallbackParam;
      });
      }

      void PauseMyVideo() {
      YourCallbackParam* pCallbackParam = new YourCallbackParam;

      m_pCall->PauseMyVideo(pCallbackParam, [](void* pUserData, bool bSuccess) -> void {
      YourCallbackParam* pCallbackParam = (YourCallbackParam*)pUserData;
      // Handle the pause result
      delete pCallbackParam;
      });
      }

      void ResumeMyVideo() {
      YourCallbackParam* pCallbackParam = new YourCallbackParam;

      m_pCall->ResumeMyVideo(pCallbackParam, [](void* pUserData, bool bSuccess) -> void {
      YourCallbackParam* pCallbackParam = (YourCallbackParam*)pUserData;
      // Handle the resume result
      delete pCallbackParam;
      });
      }
      }

Breaking change Add classes to check group call participant information and control participants

  • Previously, it was possible to check only a participant's ID and service ID through the PeerInfo class, but the Peer class has been added to allow checking various information about the participant.
  • You can create a PeerControl class using the Peer class.
  • You can use PeerControl to enable or disable a participant's video and screen share video.

API changes

Changed
  • PeerInfo class → Peer class Group call

    PreviousPlanetKit 5.5
    const char* PeerId()UserIdPtr GetUserID()
    const char* ServiceId()UserIdPtr GetUserID()
Added
  • Peer class Group call
    • EMediaType GetMediaType()
    • const WString& GetDisplayName()
    • EUserEquipmentType GetUserEquipmentType()
    • const WString& GetSipLocalIP()
    • const WString& GetDeviceInfo()
    • bool IsDataSessionSupported()
    • bool IsAudioMuted()
    • HoldStatus GetHoldStatus()
    • const WStringArray& GetSubscribedSubgroupNames()
    • WStringOptional GetVideoSubgroupName()
    • ScreenShareStateResult GetScreenShareState(const WStringOptional& strSubgroupName = NullOptional)
    • VolumeResult GetAudioVolumeLevelSetting(const WStringOptional& strSubgroupName = NullOptional)
    • VideoStatusResult GetVideoStatus(const WStringOptional& strSubgroupName = NullOptional)
    • WStringOptional GetCurrentVideoSubgroupName()
    • WStringOptional GetCurrentScreenShareSubgroupName()
    • PeerControlPtr CreatePeerControl()
    • SharedContentsOptional GetSharedContents()
    • PeerControlPtr CreatePeerControl()
  • PeerControl class Group call
    • PeerPtr GetPeer()
    • bool Register(IPeerControlEvent* pEventListener)
    • void Unregister()
    • bool StartVideo(const WStringOptional& strSubgroupName, EVideoResolution eVideoResolution)
    • bool StartVideo(const WStringOptional& strSubgroupName, EVideoResolution eVideoResolution, void* pUserData, StartVideoResultCallback pCallback)
    • bool StartVideo(const WStringOptional& strSubgroupName, EVideoResolution eVideoResolution, void* pUserData, StartVideoResolutionCallback pCallback)
    • bool StopVideo(void* pUserData = nullptr, StoptVideoResultCallback pCallback = nullptr)
    • bool StartScreenShare(const WStringOptional& strSubgroupName, void* pUserData = nullptr, ResultCallback pCallback = nullptr)
    • bool StopScreenShare(void* pUserData = nullptr, ResultCallback pCallback = nullptr)
    • void SetView(WindowHandle hWnd)
    • void ClearView()
    • void RegisterReceiver(IVideoReceiver* pReceiver)
    • void DeregisterReceiver(IVideoReceiver* pReceiver)
    • void SetScreenShareView(WindowHandle hWnd)
    • void ClearScreenShareView()
    • void RegisterScreenShareReceiver(IVideoReceiver* pReceiver)
    • void DeregisterScreenShareReceiver(IVideoReceiver* pReceiver)
  • IPeerControlEvent class Group call
    • void OnInitialized(PeerControlPtr pPeerControl, bool bResult)
    • void OnMuted(PeerControlPtr pPeerControl)
    • void OnUnmuted(PeerControlPtr pPeerControl)
    • void OnVideoUpdated(PeerControlPtr pPeerControl, SubgroupPtr pSubgroup, const VideoStatus& videoStatus)
    • void OnScreenShareUpdated(PeerControlPtr pPeerControl, SubgroupPtr pSubgroup, EScreenShareState eState)
    • void OnSubscribed(PeerControlPtr pPeerControl, SubgroupPtr pSubgroup)
    • void OnUnsubscribed(PeerControlPtr pPeerControl, SubgroupPtr pSubgroup)
    • void OnDisconnected(PeerControlPtr pPeerControl)
    • void OnHold(PeerControlPtr pPeerControl, const WString& strHoldReason)
    • void OnUnHold(PeerControlPtr pPeerControl)
    • void OnSetSharedContents(PeerControlPtr pPeerControl, unsigned int unElapsedAfterSet, const void* pvData, unsigned int unDataSize)
    • void OnUnsetSharedContents(PeerControlPtr pPeerControl)
    • void OnPeerAudioDescriptionUpdated(PeerControlPtr pPeerControl, const PeerAudioDescription& sPeerAudioDescription)

Code examples

  • When a participant joins a group call, the IConferenceEvent::OnPeerListUpdate() event occurs, and you can obtain the Peer class instance of the joined participant using ConferencePeerUpdateParam::GetAddedPeer().

    class YourConferenceEventListener : public PlanetKit::IConferenceEvent {
    public:
    YourConferenceEventListener(YourApplication* yourApp) {
    m_yourApp = yourApp;
    };

    void OnPeerListUpdate(PlanetKit::PlanetKitConferencePtr, PlanetKit::ConferencePeerUpdateParamPtr pParam) {
    m_yourApp->AddedPeerList(pParam);
    }
    private:
    YourApplication* m_yourApp = nullptr;
    };

    class YourApplication {
    public:
    void AddedPeerList(PlanetKit::ConferencePeerUpdateParamPtr pParam) {
    auto const& arrAdded = pParam->GetAddedPeer();

    for(size_t idx = 0; idx < arrAdded.Size(); ++idx) {
    // keep PeerPtr instance for handling Peer.
    PlanetKit::PeerPtr addedPeer = arrAdded.At(idx);

    m_mapPeer[addedPeer->GetUserID()->GetID().c_str()] = addedPeer;
    }
    }

    private:
    std::map<std::wstring, PlanetKit::PeerPtr> m_mapPeer;

    YourConferenceEventListener m_listener{ this };

    };
  • When implementing views for each participant, you can also pass an instance of the Peer class to the view.

    class YourPeerView {
    YourPeerView(PlanetKit::PeerPtr peer) {
    m_peer = peer;
    };

    private:
    PlanetKit::PeerPtr m_peer;
    };

    class YourApplication {
    public:
    void AddedPeerList(PlanetKit::ConferencePeerUpdateParamPtr pParam) {
    auto const& arrAdded = pParam->GetAddedPeer();

    for(size_t idx = 0; idx < arrAdded.Size(); ++idx) {
    // keep PeerPtr instance for handling Peer.
    PlanetKit::PeerPtr addedPeer = arrAdded.At(idx);

    YourPeerView peerView(addedPeer);
    m_mapPeerView[addedPeer->GetUserID()->GetID().c_str()] = addedPeer;
    }
    }

    private:
    std::map<std::wstring, YourPeerView> m_mapPeerView;
    };
  • A PeerControl class instance can be created when a view for each participant is created.

    class YourPeerView {
    YourPeerView(PlanetKit::PeerPtr peer) {
    m_peer = peer;
    m_peerControl = peer->CreatePeerControl();
    };

    private:
    PlanetKit::PeerPtr m_peer;
    PlanetKit::PeerControlPtr m_peerControl;
    };
  • Events occurring in a PeerControl class instance can be received by implementing a class that inherits from IPeerControlEvent and then registering it using the PeerControl::Register() API.

    class YourPeerControlEventListener : public PlanetKit::IPeerControlEvent {
    public:
    YourPeerControlEventListener(YourPeerView* peerView) {
    m_peerView = peerView;
    }

    void OnInitialized(PlanetKit::PeerControlPtr pPeerControl, bool bResult) override {
    // Peer control event listener is registered.
    }

    ...

    private:
    YourPeerView* m_peerView = nullptr;
    };

    class YourPeerView {
    YourPeerView(PlanetKit::PeerPtr peer) {
    m_peer = peer;
    m_peerControl = peer->CreatePeerControl();
    m_peerControl->Register(&m_peerControlEventListener);
    };

    private:
    PlanetKit::PeerPtr m_peer;
    PlanetKit::PeerControlPtr m_peerControl;

    YourPeerControlEventListener m_peerControlEventListener{ this };
    };
  • When a participant starts a video call, the IPeerControlEvent::OnVideoUpdated() event is called, and you can receive the participant's video using the PeerControl::StartVideo() API.

    class YourPeerControlEventListener : public PlanetKit::IPeerControlEvent {
    public:
    void OnVideoUpdated(PlanetKit::PeerControlPtr pPeerControl, PlanetKit::SubgroupPtr pSubgroup, const PlanetKit::VideoStatus& videoStatus) override {
    m_peerView->VideoUpdated(pSubgroup, videoStatus);
    }
    }

    class YourPeerView {
    public:
    void VideoUpdated(PlanetKit::SubgroupPtr pSubgroup, const PlanetKit::VideoStatus& videoStatus) {
    if(videoStatus.eVideoState == PlanetKit::EVideoState::PLNK_VIDEO_STATE_ENABLED) {
    m_peerControl->StartVideo(pSubgroup->GetSubgroupName(), PlanetKit::EVideoResolution::PLNK_VIDEO_RESOLUTION_RECOMMENDED);
    m_peerControl->SetView(m_renderWnd);
    }
    }

    private:
    // Prepare HWND for rendering peer's video.
    HWND m_renderWnd;
    }
  • When a participant leaves the group call, clean up the YourPeerView.

    class YourPeerView {
    public:
    virtual ~YourPeerView() {
    // Unregister instance of `IPeerControlEvent`.
    m_peerControl->Unregister();
    }
    };

    class YourApplication {
    public:
    void RemovedPeerList(PlanetKit::ConferencePeerUpdateParamPtr pParam) {
    auto const& arrRemoved = pParam->GetRemovedPeer();

    for(size_t idx = 0; idx < arrRemoved.Size(); ++idx) {
    PlanetKit::PeerPtr removedPeer = arrRemoved.At(idx);

    auto found = m_mapPeerView.find(removedPeer->GetUserID()->GetID().c_str());

    if(found != m_mapPeerView.end()) {
    m_mapPeerView.erase(found);
    }
    }
    }

    private:
    std::map<std::wstring, YourPeerView> m_mapPeerView;

    YourConferenceEventListener m_listener{ this };
    };

Breaking change Remove the room attribute in group calls

  • Prior to PlanetKit 5.2, if the room type of a group call did not match while joining a group call, the PLNK_DISCONNECT_REASON_WRONG_ROOM_ATTR error occurred.
  • Starting from PlanetKit 5.2, the room type has been removed and is no longer checked, so the PLNK_DISCONNECT_REASON_WRONG_ROOM_ATTR disconnect reason has been deprecated accordingly.

API changes

Removed
  • EConferenceRoomType enum Group call
  • ConferenceParam class Group call
    • EConferenceRoomType ConferenceRoomType()
    • void SetConferenceRoomType(EConferenceRoomType eRoomType)
  • EDisconnectReason enum 1-to-1 callGroup call
    • PLNK_DISCONNECT_REASON_WRONG_ROOM_ATTR

Breaking change Change options for log configuration

  • Removed the SManagerInitParam struct and added the Configuration class.
  • You can configure the logging method using the Configuration class.

API changes

Changed
  • SManagerInitParam struct → Configuration class 1-to-1 callGroup call

    PreviousPlanetKit 5.5
    char* szBasePathconst WString& GetBasePath()
    char* szDbPathconst WString& GetDatabasePath()
    int nLogLevelvoid SetLogLevel(ELogLevel eLogLevel) ELogLevel GetLogLevel()
    bEnableFileLogvoid EnableLogOutput(bool bEnable) bool IsLogOutputEnabled()
Added
  • Configuration class 1-to-1 callGroup call
    • ConfigurationPtr Create(const WString& strBasePath, const WString& strDatabasePath)
    • void SetLogSizeLimit(ELogSizeLimit eLogSizeLimit)
    • ELogSizeLimit GetLogSizeLimit()
Removed
  • SManagerInitParam struct
    • bool bEnableStdOutLog
    • bool bEnableJupLog

Code examples

  • When initializing PlanetKit, you can specify the log level and logging method.

    class YourApplication {
    public:
    void Initialize() {
    PlanetKit::ConfigurationPtr config = PlanetKit::Configuration::Create(L"yourPlanetKitBinaryPath", L"yourDataPath");

    config->EnableLogOutput(true);
    config->SetLogLevel(PlanetKit::ELogLevel::PLNK_LOG_SIMPLE);
    config->SetLogSizeLimit(PlanetKit::ELogSizeLimit::PLNK_LOG_SIZE_LIMIT_MEDIUM);

    PlanetKit::PlanetKitManager::Initialize(config);
    }
    };

Breaking change Remove API for checking audio subgroup information

  • Removed unused APIs.
  • Subgroup information for audio changes can be obtained through the IConferenceEvent::OnMyAudioDescriptionUpdated() event.

API changes

Removed
  • SubGroupManager class Group call
    • const char *GetMyAudioSubGroupName()
    • const char *GetMyAudioTaggedSubGroupName()

Breaking change Change API for exchanging messages when starting a call

  • Removed the SCallInitData structure and added the CallStartMessage class.
  • Changed the structure to a class format to limit the length of the call start message to 200 bytes and always end it with a null character, allowing automatic string checking during API calls.

API changes

Changed
  • SCallInitData struct → CallStartMessage class 1-to-1 call

    PreviousPlanetKit 5.5
    bool bPreperationbool IsInPreparation()
    char datastatic CallStartMessagePtr Create(const WString& strMessage) const WStringOptional& GetMessage()
  • SCallConnectedParam struct → CallConnectedParam class 1-to-1 call

    PreviousPlanetKit 5.5
    SCallInitData sCalleeInitDataCallStartMessagePtr GetPeerStartMessage()
  • SCallVerifiedParam struct → CallVerifiedParam class 1-to-1 call

    PreviousPlanetKit 5.5
    SCallInitData sCalleeInitDataCallStartMessagePtr GetPeerStartMessage()

Code examples

bool YourApplication::CreateCallStartMessage() {
PlanetKit::PlanetKitManagerPtr planetKitMnager = PlanetKit::PlanetKitManager::GetInstance();

// Prepare your start message
std::wstring yourMessage = L"your message";

// Create CallStartMessage
PlanetKit::CallStartMessagePtr callStartMessage = PlanetKit::CallStartMessage::Create(yourMessage);

if(*callStartMessage == nullptr) {
// `PlanetKit::CallStartMessage::Create()` API will return nullptr if szMessage is nullptr or if it exceeds 200 bytes after being converted to UTF-8.
return false;
}

...

return true;
}

Breaking change Change data session API functionality

  • Specified detailed failure information for data sessions.
  • Changed the name of the data session API to a more specific and meaningful name.
  • Changed the specification for range of data session stream ID from 100–1000 to 100–999.

API changes

Changed
  • PlanetKitCall class 1-to-1 call

    PreviousPlanetKit 5.5
    bool MakeRecvDataSession(int nStreamId, IDataSessionReceiver *pIDataSessionReceiver, NULLABLE void *pResultUserData, NULLABLE IDataSessionHander *pResultHandler, void *pExceptionUserData, IDataSessionExceptionHandler *pExceptionHandler)bool MakeInboundDataSession(int nStreamId, NULLABLE void* pResultUserData, IInboundDataSessionHandler* pDataSessionHandler)
    bool MakeSendDataSession(int nStreamId, EDataSessionType eType, NULLABLE void *pResultUserData, NULLABLE IDataSessionHander* pResultHandler, void *pExceptionUserData, IDataSessionExceptionHandler *pExceptionHandler)bool MakeOutboundDataSession(int nStreamId, EDataSessionType eType, NULLABLE void* pResultUserData, IOutboundDataSessionHandler* pDataSessionHandler)
  • SubGroup class Group call

    PreviousPlanetKit 5.5
    bool MakeRecvDataSession(int nStreamId, IDataSessionReceiver *pIDataSessionReceiver, NULLABLE void *pResultUserData, NULLABLE IDataSessionHander *pResultHandler, void *pExceptionUserData, IDataSessionExceptionHandler *pExceptionHandler)bool MakeInboundDataSession(int nStreamId, NULLABLE void *pResultUserData, IInboundDataSessionHandler* pDataSessionHandler)
    bool MakeSendDataSession(int nStreamId, EDataSessionType eType, NULLABLE void *pResultUserData, NULLABLE IDataSessionHander* pResultHandler, void *pExceptionUserData, IDataSessionExceptionHandler *pExceptionHandler)bool MakeOutboundDataSession(int nStreamId, EDataSessionType eType, NULLABLE void* pResultUserData, IOutboundDataSessionHandler* pDataSessionHandler)
  • IDataSessionHander class → IInboundDataSessionHandler, IOutboundDataSessionHandler class 1-to-1 callGroup call

Added
  • EDataSessionFailReason enum 1-to-1 callGroup call
    • PLNK_DATA_SESS_FAIL_REASON_NONE
    • PLNK_DATA_SESS_FAIL_REASON_INTERNAL
    • PLNK_DATA_SESS_FAIL_REASON_UNSUPPORTED
    • PLNK_DATA_SESS_FAIL_REASON_NOT_INCOMING
    • PLNK_DATA_SESS_FAIL_REASON_ALREADY_EXIST
    • PLNK_DATA_SESS_FAIL_REASON_INVALID_ID
    • PLNK_DATA_SESS_FAIL_REASON_INVALID_TYPE
  • PlanetKitCall class 1-to-1 call
    • bool GetInboundDataSession(int nStreamId, InboundDataSessionPtr* pResult)
    • bool GetOutboundDataSession(int nStreamId, OutboundDataSessionPtr* pResult)
  • Subgroup class Group call
    • bool GetInboundDataSession(int nStreamId, InboundDataSessionPtr* pResult)
    • bool GetOutboundDataSession(int nStreamId, OutboundDataSessionPtr* pResult)
  • ICallEvent class 1-to-1 call
    • void OnDataSessionIncoming(DataSessionStreamIdT nStreamId, EDataSessionType eType)
  • IConferenceEvent class Group call
    • void OnDataSessionIncoming(const WStringOptional& strSubgroupName, DataSessionStreamIdT nStreamId, EDataSessionType eType)
  • IInboundDataSessionHandler class 1-to-1 callGroup call
    • void OnReceive(DataSessionStreamIdT nStreamId, DataSessionFramePtr pFrame)
    • void OnSuccess(InboundDataSessionPtr pInboundDataInterface, void* pUserData)
    • void OnError(void* pUserData, EDataSessionFailReason eFailReason)
    • void OnClosed(void* pUserData, EDataSessionClosedReason eClosedReason)
  • IOutboundDataSessionHandler class 1-to-1 callGroup call
    • void OnTooLongQueuedData(OutboundDataSessionPtr pDataSession, bool bEnabled)
    • void OnUnsupportedStreamId(OutboundDataSessionPtr pDataSession)
    • void OnSuccess(OutboundDataSessionPtr pDataSession, void* pUserData)
    • void OnError(void* pUserData, EDataSessionFailReason eFailReason)
    • void OnClosed(void* pUserData, EDataSessionClosedReason eClosedReason)
  • InboundDataSession class 1-to-1 callGroup call
    • DataSessionStreamIdT GetStreamId()
    • IInboundDataSessionHandler* GetReceiver()
  • OutboundDataSession class 1-to-1 callGroup call
    • bool Send(const void* pData, unsigned int nDataSize, unsigned long long llTimestamp)
    • DataSessionStreamIdT GetStreamId()
    • unsigned long long GetCurrentOffset()
    • IOutboundDataSessionHandler* GetHandler()
    • bool ChangeDestination(UserIdPtr pPeerId, void* pUserData = nullptr, ResultCallback pCallback = nullptr)
Removed
  • IDataSessionExceptionHandler class

Code examples

  1. Prepare class instances to be used when receiving data sessions in advance.

    class InboundDataSessionHandler : public PlanetKit::IInboundDataSessionHandler {
    public:
    void OnReceive(PlanetKit::DataSessionStreamIdT nStreamId, PlanetKit::DataSessionFramePtr pFrame) override {
    ...
    };

    void OnSuccess(PlanetKit::InboundDataSessionPtr pInboundDataInterface, void* pUserData) override {
    ...
    };

    void OnError(void* pUserData, PlanetKit::EDataSessionFailReason eFailReason) override {
    ...
    };

    void OnClosed(void* pUserData, PlanetKit::EDataSessionClosedReason eClosedReason) override {
    ...
    };
    }
  2. When the peer creates an outbound data session and sends data using OutboundDataSession::Send(), the ICallEvent::OnDataSessionIncoming() or IConferenceEvent::OnDataSessionIncoming() event occurs.

    class YourCallEventListener : public PlanetKit::ICallEvent {
    public:
    void OnDataSessionIncoming(PlanetKit::DataSessionStreamIdT nStreamId, PlanetKit::EDataSessionType eType) override {
    m_yourApp->DataSessionIncoming(nStreamId, eType);
    }

    private:
    YourApplication* m_yourApp = nullptr;
    };

    class YourApplication {
    public:
    void DataSessionIncoming(PlanetKit::DataSessionStreamIdT nStreamId, PlanetKit::EDataSessionType eType) {
    ...
    }
    }
  3. You can search for existing inbound data sessions and create a new inbound data session if none exists.

    class YourApplication {
    public:
    void DataSessionIncoming(PlanetKit::DataSessionStreamIdT nStreamId, PlanetKit::EDataSessionType eType) {
    PlanetKit::InboundDataSessionPtr inboundDataSession;

    bool result = m_pCall->GetInboundDataSession(nStreamId, &inboundDataSession);

    if(result == true) {
    // InboundDatasession with nStreamId is already exist.
    }
    else {
    m_pCall->MakeInboundDataSession(nStreamId, nullptr, &m_inboundDataSessionHandler);
    }
    }

    private:
    PlanetKit::PlanetKitCallPtr m_pCall;
    InboundDataSessionHandler m_inboundDataSessionHandler;
    }

  4. If PlanetKitCall::MakeInboundDataSession() is successful, IInboundDataSessionHandler::OnSuccess() is called and you can receive data through IInboundDataSessionHandler::OnReceive(). If an error occurs during data reception, you can receive error information through IInboundDataSessionHandler::OnError().

    class InboundDataSessionHandler : public PlanetKit::IInboundDataSessionHandler {
    public:
    void OnReceive(PlanetKit::DataSessionStreamIdT nStreamId, PlanetKit::DataSessionFramePtr pFrame) override {
    // Now, you can receive data from this session.
    };

    void OnSuccess(PlanetKit::InboundDataSessionPtr pInboundDataInterface, void* pUserData) override {
    // Succeed to make data session.
    };

    void OnError(void* pUserData, PlanetKit::EDataSessionFailReason eFailReason) override {
    ...
    };

    void OnClosed(void* pUserData, PlanetKit::EDataSessionClosedReason eClosedReason) override {
    ...
    };
    }

Breaking change Change the name of service ticket ID (stid) to app server data

  • Changed the name from stid to AppServerData to make the name clearer.
  • Changed the size limit of app server data from 256 bytes to 4096 bytes.

API changes

Changed
  • ConnectParam class → MakeCallParam class 1-to-1 call

    PreviousPlanetKit 5.5
    void SetStid(const char *szStid)void SetAppServerData(const WString& strAppServerData)
    const char* GetStid()const WString& GetAppServerData()
  • ConnectParam class → ConferenceParam class Group call

    PreviousPlanetKit 5.5
    void SetStid(const char *szStid)void SetAppServerData(const WString& strAppServerData)
    const char* GetStid()const WString& GetAppServerData()

Breaking change Change "Send short data" function

  • Removed the functionality to send PlanetKitConference::SendShortData() to multiple recipients, and modified the API so that it can be called only for a single recipient.
    • You can send data to all participants using PlanetKitConference::SendShortDataToAllPeers().
  • Changed the data size that can be sent in PlanetKitCall::SendShortData() and PlanetKitConference::SendShortData().
    • The total data size that can be transmitted is up to 100 bytes for the nSize parameter and up to 800 bytes for the pData parameter.
    • If the length limit is exceeded, transmission will fail.

API changes

Changed
  • PlanetKitCall class 1-to-1 call

    PreviousPlanetKit 5.5
    bool SendShortData(const SShortData *pShortData, void *pResultUserData, IResultHandler *pResultHandler)bool SendShortData(const WString& strType, void* pData, unsigned int nSize, void* pUserData = nullptr, ResultCallback pCallback = nullptr)
  • PlanetKitConference class Group call

    PreviousPlanetKit 5.5
    bool SendShortData(const SShortData *pShortData, SShortDataTarget *pTargets, unsigned int unTargetCount, void *pResultUserData, IResultHandler *pResultHandler)bool SendShortData(const WString& strType, void* pData, unsigned int nSize, UserIdPtr pPeerId, void* pUserData = nullptr, ResultCallback pCallback = nullptr)
Added
  • bool SendShortDataToAllPeers(const WString& strType, void* pData, unsigned int nSize, void* pUserData = nullptr, ResultCallback pCallback = nullptr)

Breaking change Remove SetDisableAutoDisconnectOnBadNetwork() of ConferenceParam

  • Starting with PlanetKit 5.5, callbacks that notify network state changes are always called. Accordingly, SetDisableAutoDisconnectOnBadNetwork() has been removed.

API changes

Changed
  • IConferenceEvent class Group call

    PreviousPlanetKit 5.5
    void OnBadNetworkDetected(PlanetKitConferencePtr pPlanetKitConference, int nWillDisconnectAfterSec)void OnNetworkUnavailable(PlanetKitConferencePtr pPlanetKitConference, int nWillDisconnectAfterSec)
    void OnBadNetworkResolved(PlanetKitConferencePtr pPlanetKitConference)void OnNetworkReavailable(PlanetKitConferencePtr pPlanetKitConference)
Removed
  • ConferenceJoinParam class Group call
    • void SetDisableAutoDisconnectOnBadNetwork(bool bDisable)

Breaking change Enhance camera device management API

  • We have revamped the camera device management API to streamline the process of handling video capture.
  • The camera device management API has been enhanced so that the camera is turned on only when sending data to Planet Cloud.
  • You can now control the initial state of the camera in video calls.
    • 1-to-1 call: Property or parameter of type EInitialMyVideoState have been added to MakeCallParam, PlanetKitCall::AcceptCall(), and PlanetKitCall::EnableVideo(), allowing you to control the camera state when starting or switching to a video call.
    • Group call: Property or parameter of type EInitialMyVideoState have been added to ConferenceParam and PlanetKitConference::EnableVideo(), allowing you to control the camera state when starting or switching to a video call.

API changes

Changed
  • PlanetKitCall class 1-to-1 call

    PreviousPlanetKit 5.5
    void AcceptCall(EMediaType eMediaType, SCallInitData *pCallInitData)void AcceptCall(bool bPreparation, CallStartMessagePtr pCallStartMessage = CallStartMessagePtr(nullptr), EInitialMyVideoState eInitialMyVideoState = PLNK_INITIAL_MY_VIDEO_STATE_RESUME, bool bRecordOnCloud = false)
    bool EnableVideoSend(VideoCapturer *pVideoCaptuer, void *pResultUserData, IResultHandler *pResultHandler)bool EnableVideo(EInitialMyVideoState eInitialMyVideoState = PLNK_INITIAL_MY_VIDEO_STATE_RESUME, void* pUserData = nullptr, ResultCallback pCallback = nullptr)
    bool DisableVideoSend(void *pResultUserData, IResultHandler *pResultHandler)bool DisableVideo(EMediaDisabledReason eDisableReason = PLNK_MEDIA_DISABLE_REASON_USER, void* pUserData = nullptr, ResultCallback pCallback = nullptr)
  • PlanetKitConference class Group call

    PreviousPlanetKit 5.5
    bool EnableVideoSend(VideoCapturer *pVideoCaptuer, void *pResultUserData, IResultHandler *pResultHandler)bool EnableVideo(EInitialMyVideoState eInitialMyVideoState = PLNK_INITIAL_MY_VIDEO_STATE_RESUME, void* pUserData = nullptr, ResultCallback pCallback = nullptr)
    bool DisableVideoSend(void *pResultUserData, IResultHandler *pResultHandler)bool DisableVideo(EMediaDisabledReason eDisableReason = PLNK_MEDIA_DISABLE_REASON_USER, void* pUserData = nullptr, ResultCallback pCallback = nullptr)
Added
  • EVideoControlResult enum 1-to-1 callGroup call
    • EVideoControlResult_PreviewAlreadyExist
    • EVideoControlResult_CreateRenderFail
    • EVideoControlResult_CameraIsAlreadyInUseByAnotherApplication
    • EVideoControlResult_PreviewHandleIsInvalid
    • EVideoControlResult_PreviewReceiverIsInvalid
  • EInitialMyVideoState enum 1-to-1 callGroup call
    • PLNK_INITIAL_MY_VIDEO_STATE_RESUME
    • PLNK_INITIAL_MY_VIDEO_STATE_PAUSE
  • ECameraControlResult enum 1-to-1 callGroup call
    • PLNK_CAMERA_CONTROL_RESULT_NONE
    • PLNK_CAMERA_CONTROL_RESULT_FAILED_TO_CREATE_CAMERA_DEVICE
    • PLNK_CAMERA_CONTROL_RESULT_SELECTED_CAMERA_IS_REMOVED
    • PLNK_CAMERA_CONTROL_RESULT_NO_CAMERA_SELECTED
  • CameraController class 1-to-1 callGroup call
    • void GetCapturerInfo(CameraInfoArray& arrCameraInfo)
    • EVideoControlResult SelectCamera(CameraInfoPtr pCameraInfo)
    • CameraInfoOptional GetSelectedCamera()
    • void RegisterDeviceEvent(IVideoCaptureDeviceEvent* pDelegate)
    • void DeregisterDeviceEvent(IVideoCaptureDeviceEvent* pDelegate)
    • bool IsRunning()
    • bool StartPreview(WindowHandle hWind)
    • bool StartPreview(IVideoReceiver* pReceiver)
    • bool StopPreview(WindowHandle hWind)
    • bool StopPreview(IVideoReceiver* pReceiver)
    • ECapturerMediaType GetCapturerMediaType()
    • CameraInfoPtr GetVideoCapturerInfo()
    • EVideoCapturerType GetCapturerType()
    • bool RegisterVideoInterceptor(IVideoInterceptor* pInterceptor)
    • bool DeregisterVideoInterceptor()
    • VideoRenderPtr GetRender(WindowHandle hWnd)
    • bool WriteFrameData(SVideoFrame& sVideoFrame)
    • bool IsPostingFrameAvailable(UINT64 ull64tick)
  • ConferenceParam class Group call
    • EInitialMyVideoState GetInitialMyVideoState()
    • void SetInitialMyVideoState(EInitialMyVideoState eInitialMyVideoState)
  • MakeCallParam class 1-to-1 call
    • EInitialMyVideoState GetInitialMyVideoState()
    • void SetInitialMyVideoState(EInitialMyVideoState eInitialMyVideoState)
  • PlanetKitCall class 1-to-1 call
    • void RemoveAllMyVideoViewAndReceiver()
    • void RemoveAllPeerVideoViewAndReceiver()
  • PlanetKitConference class Group call
    • void RemoveAllMyVideoViewAndReceiver()
    • bool AddPeerVideoReceiver(UserIdPtr pPeerID, IVideoReceiver* pReceiver)
    • bool RemovePeerVideoReceiver(IVideoReceiver* pReceiver)
    • void RemoveAllPeerVideoViewAndReceiver()
Removed
  • VideoCaptureManager class 1-to-1 callGroup call
  • VideoCapture class 1-to-1 callGroup call

Code examples

  • The newly added CameraController::StartPreview(WindowHandle) and CameraController::StartPreview(IVideoReceiver*) allow you to preview video from the local user's camera.

    • The following is an example of using CameraController::StartPreview(WindowHandle).

      class YourApplication {
      void StartPreview() {
      // Get PlanetKit::CameraController instance from PlanetKit::PlanetKitManager.
      auto planetKitCameraController = PlanetKit::PlanetKitManager::GetInstance()->GetCameraController();

      // Start preview.
      planetKitCameraController->StartPreview(m_hWnd);
      }

      private:
      // Prepare your window handle (HWND) where you want to render video from the camera device.
      HWND m_hWnd;
      }
  • If you want to handle video processing directly, you can implement your own video receiver by inheriting from IVideoReceiver and use CameraController::StartPreview(IVideoReceiver*).

    class MyVideoReceiver : public PlanetKit::IVideoReceiver {
    public:
    void OnVideo(const PlanetKit::SVideoFrame* pVideoFrame, PlanetKit::UserIdPtr pUserID) {
    // Handling video processing.
    ...
    }
    };

    class YourApplication {
    void StartPreview() {
    // Get PlanetKit::CameraController instance from PlanetKit::PlanetKitManager.
    auto planetKitCameraController = PlanetKit::PlanetKitManager::GetInstance()->GetCameraController();

    // Start preview.
    planetKitCameraController->StartPreview(&m_myVideoReceiver);
    }

    private:
    // Prepare your video receiver where you want to render video from the camera device.
    MyVideoReceiver m_myVideoReceiver;
    }
  • To render the local user's video on the screen after connecting to a 1-to-1 call or a group call, you can use AddMyVideoView(WindowHandle) or AddMyVideoView(IVideoReceiver*).

  • The camera automatically turns on and off when EnableVideo() and DisableVideo() are called.

  • After switching to a video call using EnableVideo(), you can register a view for rendering using AddMyVideoView(), and the video will appear on the screen.

    class YourApplication {
    void AddMyVideoView() {
    m_pCall->AddMyVideoView(m_hMyView);
    }

    private:
    PlanetKit::PlanetKitCallPtr m_pCall;
    HWND m_hMyView;
    }
  • When migrating from version 4.4 in terms of functionality to turn on or off the camera, refer to the code example below.

    • Removed the VideoCaptureManager and VideoCapturer classes, and added the CameraController class for controlling camera devices.

      • You don't need to directly call methods such as VideoCapturer::Start() or VideoCapturer::Pause() after creating the device using VideoCaptureManager::CreateVideoCapturer().
    • Call CameraController::GetCapturerInfo() to obtain information about the cameras connected to the device, and call CameraController::SelectCamera() to specify the camera to use.

      class YourApplication {
      public:
      void SelectCamera() {
      PlanetKit::CameraControllerPtr cameraController = PlanetKit::PlanetKitManager::GetInstance()->GetCameraController();

      PlanetKit::CameraInfoArray arrayCameraInfo;

      cameraController->GetCapturerInfo(arrayCameraInfo);

      for(size_t idx = 0; idx < arrayCameraInfo.Size(); ++idx) {
      // Pick your camera
      std::wcout << arrayCameraInfo[idx]->GetDeviceName().c_str() << L" " << arrayCameraInfo[idx]->GetDeviceUid() << std::endl;

      if(arrayCameraInfo[idx]->GetDeviceUid() == L"camera_unique_id_that_you_want") {
      cameraController->SelectCamera(arrayCameraInfo[idx]);

      break;
      }
      }
      }
      }
    • If you want to check the preview before or after the call connection, you can use CameraController::StartPreview() to view the camera video.

    • If the camera selection API is not called, the first camera among the connected cameras will be selected.

      class YourApplication {
      public:
      void StartPreview() {
      // Get PlanetKit::CameraController instance from PlanetKit::PlanetKitManager.
      auto planetKitCameraController = PlanetKit::PlanetKitManager::GetInstance()->GetCameraController();

      // Start preview.
      planetKitCameraController->StartPreview(m_hWnd);
      }

      void StopPreview() {
      // Get PlanetKit::CameraController instance from PlanetKit::PlanetKitManager.
      auto planetKitCameraController = PlanetKit::PlanetKitManager::GetInstance()->GetCameraController();

      // Stop preview.
      planetKitCameraController->StopPreview(m_hWnd);
      }

      private:
      // Prepare your window handle (HWND) where you want to render video from the camera device.
      HWND m_hWnd;
      };
  • When migrating from version 4.4 in terms of rendering video on the screen, refer to the code example below.

    • In versions 4.4 or lower, the process of rendering the local user's video is as follows.

      • Select the camera.

        class YourApplication {
        public:

        void SelectCamera() {
        PlanetKit::VideoCaptureManager* captureManager = PlanetKit::PlanetKitManager::GetInstance()->GetVideoCaptureManager();

        static constexpr int maxCameraInfoCount = 25;

        PlanetKit::SCameraInfo arrayCameraInfo[maxCameraInfoCount];

        size_t nDeviceCount = 0;

        captureManager->GetCapturerInfos(arrayCameraInfo, maxCameraInfoCount, &nDeviceCount);

        for(size_t idx = 0; idx < nDeviceCount; ++idx) {
        if(strcmp(arrayCameraInfo[idx].szDeviceUid, "camera_unique_id_that_you_want") == 0) {
        if(m_videoCapture != nullptr) {
        m_videoCapture->Release();
        m_videoCapture = nullptr;
        }

        m_videoCapture = captureManager->CreateVideoCapturer(&arrayCameraInfo[idx]);

        break;
        }
        }
        }
        }
      • Create a rendering class to render video on the screen.

        class YourApplication {
        public:
        void CreateRender() {
        if(m_videoRender != nullptr) {
        m_videoRender->Release();
        }

        // Create video render.
        m_videoRender = PlanetKit::VideoRender::CreateRender(m_hMyView);
        m_videoRender->AddRef();
        }

        private:
        PlanetKit::VideoRender* m_videoRender = nullptr;
        }
      • Call PlanetKitCall::EnableVideoSend() to turn on the video.


        // Prepare result handler.
        class YourEnableVideoResult : PlanetKit::IResultHandler {
        public:
        YourEnableVideoResult(YourApplication* yourApp) {
        m_yourApp = yourApp;
        }

        void OnResult(void* pUserData, bool bSuccess) override {
        m_yourApp->VideoEnabled(bSuccess);
        }

        private:
        YourApplication* m_yourApp = nullptr;
        }

        class YourApplication {
        public:
        void VideoEnabled(bool bSuccess) {
        if(bSuccess == true) {
        m_videoCapture->AddPreviewRender(m_videoRender);
        m_videoCapture->Start();
        }
        }

        void ToVideoCall() {
        // Enable video call.
        m_pCall->EnableVideoSend(m_videoCapture, nullptr, &m_enableVideoResult);
        }
        private:
        PlanetKit::PlanetKitCallPtr m_pCall;
        PlanetKit::VideoCaptureManager* m_videoCapture = nullptr;
        PlanetKit::VideoRender* m_videoRender = nullptr;

        YourEnableVideoResult m_enableVideoResult{ this };

        HWND m_hMyView;
        }
    • Starting from version 5.5, the process of rendering the local user's video is as follows.

      class YourApplication {
      void ToVideoCallAsResume() {
      // Enable video call.
      m_pCall->EnableVideo(PlanetKit::EInitialMyVideoState::PLNK_INITIAL_MY_VIDEO_STATE_RESUME, this, [](void* pUserData, bool bSuccess) {
      // Camera device will be started automatically on success of `EnableVideo()` because the first parameter is `EInitialMyVideoState::PLNK_INITIAL_MY_VIDEO_STATE_RESUME`.
      if(bSuccess == true) {
      YourApplication* pApp = static_cast<YourApplication*>(pUserData);
      // Add my view for rendering of local user's video.
      pApp->m_pCall->AddMyVideoView(pApp->m_hMyView);

      // Add peer view for rendering of remote user's video.
      pApp->m_pCall->AddPeerVideoView(pApp->m_hPeerView);
      }
      });
      }

      void ToVideoCallAsPaused() {
      // Enable video call.
      m_pCall->EnableVideo(PlanetKit::EInitialMyVideoState::PLNK_INITIAL_MY_VIDEO_STATE_PAUSE, this, [](void* pUserData, bool bSuccess) {
      // Camera device will be stopped automatically on success of `EnableVideo()` because the first parameter is `EInitialMyVideoState::PLNK_INITIAL_MY_VIDEO_STATE_PAUSE`.
      if(bSuccess == true) {
      // Add peer view for rendering of remote user's video.
      pApp->m_pCall->AddPeerVideoView(pApp->m_hPeerView);

      // Add my view for rendering of local user's video.
      pApp->m_pCall->AddMyVideoView(pApp->m_hMyView);

      // Currently, the sending video state is paused, and you can call PlanetKitCall::ResumeMyVideo() to start video capture.
      ...
      }
      });
      }

      private:
      PlanetKit::PlanetKitCallPtr m_pCall;
      HWND m_hMyView;
      HWND m_hPeerView;
      }

Breaking change Change screen share functionality

  • Removed VideoCaptureManager *GetVideoCaptureManager() provided by PlanetKitManager and provides ScreenShareControllerPtr GetScreenShareController() to control screen share.
  • You can obtain screen share information through ScreenShareController::GetScreenShareInfos() and then start screen share by calling ScreenShareController::StartScreenShareCapture().

API changes

Added
  • PlanetKitCall class 1-to-1 call
    • bool AddMyScreenShareVideoView(WindowHandle hWind)
    • bool AddMyScreenShareVideoReceiver(IVideoReceiver* pReceiver)
    • bool RemoveMyScreenShareVideoView(WindowHandle hWind)
    • bool RemoveMyScreenShareVideoReceiver(IVideoReceiver* pReceiver)
    • void RemoveAllMyScreenShareVideoViewAndReceiver()
    • bool AddPeerScreenShareVideoView(WindowHandle hWind)
    • bool AddPeerScreenShareVideoReceiver(IVideoReceiver* pReceiver)
    • bool RemovePeerScreenShareVideoView(WindowHandle hWind)
    • bool RemovePeerScreenShareVideoReceiver(IVideoReceiver* pReceiver)
    • void RemoveAllPeerScreenShareVideoViewAndReceiver()
  • PlanetKitConference class Group call
    • bool AddMyScreenShareVideoView(WindowHandle hWind)
    • bool AddMyScreenShareVideoReceiver(IVideoReceiver* pReceiver)
    • bool RemoveMyScreenShareVideoView(WindowHandle hWind)
    • bool RemoveMyScreenShareVideoReceiver(IVideoReceiver* pReceiver)
    • void RemoveAllMyScreenShareVideoViewAndReceiver()
    • bool AddPeerScreenShareVideoView(UserIdPtr pUserPtr, WindowHandle hWind)
    • bool AddPeerScreenShareVideoReceiver(UserIdPtr pUserPtr, IVideoReceiver* pReceiver)
    • bool RemovePeerScreenShareVideoView(WindowHandle hWind)
    • bool RemovePeerScreenShareVideoReceiver(IVideoReceiver* pReceiver)
    • void RemoveAllPeerScreenShareVideoViewAndReceiver()
  • ScreenShareController class 1-to-1 callGroup call
    • bool GetScreenShareInfos(ScreenShareInfoArray& arrScreenShare)
    • VideoFramePtr GetScreenShareSnapshot(ScreenShareInfoPtr pScreenShareInfo)
    • EVideoControlResult StartScreenShareCapture(ScreenShareInfoPtr pScreenShareInfo)
    • bool StopScreenCapture()
    • bool RegisterCapturerEvent(IVideoCapturerEvent* pDelegate)
    • bool DeregisterCapturerEvent()
    • EVideoCapturerType GetCapturerType()
    • bool RegisterVideoInterceptor(IVideoInterceptor* pInterceptor)
    • bool DeregisterVideoInterceptor()
    • VideoRenderPtr GetRender(WindowHandle hWnd)
    • bool WriteFrameData(SVideoFrame& sVideoFrame)
    • bool IsPostingFrameAvailable(UINT64 ull64tick)
Removed
  • VideoCaptureManager class 1-to-1 callGroup call
  • VideoCapture class 1-to-1 callGroup call

Code examples

  • In versions 4.4 or lower, you could implement screen share using the following method.

    • Create a render class for rendering.

      class YourApplication {
      public:
      void CreateRenderForScreenShare() {
      if(m_videoRender != nullptr) {
      m_videoRender->Release();
      }

      // Create video render.
      m_videoRender = PlanetKit::VideoRender::CreateRender(m_hMyView);
      m_videoRender->AddRef();
      }
      private:
      HWND m_hWnd;
      }
    • Select the screen for screen share.

      class YourApplication {
      public:
      void SelectScreenShare() {
      PlanetKit::VideoCaptureManager* captureManager = PlanetKit::PlanetKitManager::GetInstance()->GetVideoCaptureManager();

      static constexpr int maxScreenShareInfoCount = 25;

      PlanetKit::SScreenInfo arrayScreenShareInfo[maxScreenShareInfoCount];

      size_t nScreenShareInfoCount = 0;

      captureManager->GetCapturerInfos(arrayScreenShareInfo, maxScreenShareInfoCount, &nScreenShareInfoCount);

      for(size_t idx = 0; idx < nScreenShareInfoCount; ++idx) {
      if(strcmp(arrayScreenShareInfo[idx].szName, "screen_share_name_that_you_want") == 0) {
      if(m_screenShareCapture != nullptr) {
      m_screenShareCapture->Release();
      m_screenShareCapture = nullptr;
      }

      m_screenShareCapture = captureManager->CreateVideoCapturer(&arrayScreenShareInfo[idx]);

      break;
      }
      }
      }

      private:
      PlanetKit::VideoCapturer* m_screenShareCapture = nullptr;
      }
    • Start the screen share.

      class YourScreenShareResult : public PlanetKit::IResultHandler {
      public:
      YourScreenShareResult(YourApplication* yourApp) {
      m_yourApp = yourApp;
      }

      void OnResult(void* pUserData, bool bSuccess) {
      m_yourApp->ScreenShareResult(bSuccess);
      }
      private:
      YourApplication* m_yourApp = nullptr;
      }

      class YourApplication {
      public:
      void ScreenShareResult(bool bSuccess) {
      // Set screen share capturer → `PlanetKitCall` instance.
      m_pCall->SetMyScreenShareCapturer(m_screenShareCapture);

      // Add renderer to capturer.
      m_screenShareCapture->->AddPreviewRender(m_videoRender);

      // Start screen share.
      m_screenShareCapture->Start();
      }

      void StartScreenShare() {
      m_pCall->StartMyScreenShare(nullptr, &m_screenShareResult);
      }

      private:
      PlanetKit::VideoCapturer* m_screenShareCapture = nullptr;
      PlanetKit::PlanetKitCall* m_pCall = nullptr;

      YourScreenShareResult m_screenShareResult{ this };
      }
  • For versions 5.5 and later, you can start screen share as follows.

    • The newly added PlanetKitCall::AddMyScreenShareVideoView() can render the local user's screen share video.

      class YourApplication {
      PlanetKit::ScreenShareInfoPtr SelectScreenShare() {
      auto pScreenShareController = PlanetKit::PlanetKitManager::GetInstance()->GetScreenShareController();

      PlanetKit::ScreenShareInfoArray screenShareInfos;
      pScreenShareController->GetScreenShareInfos(screenShareInfos);

      size_t selected = 0;

      for(size_t idx = 0; idx < screenShareInfos.Size(); ++idx) {
      if(screenShareInfos.At(idx)->GetName() == L"screen_share_name_that_you_want") {
      selected = idx;
      break;
      }
      }

      return screenShareInfos.At(selected);
      }

      void StartScreenShare() {
      auto selectedScreenShareInfo = SelectScreenShare();

      // Choose screen share infomation and start.
      m_pCall->StartMyScreenShare(selectedScreenShareInfo, this, [](void* pUserData, bool bSuccess) {
      if(bSuccess == true) {
      YourApplication* pApp = static_cast<YourApplication*>(pUserData);

      pApp->m_pCall->AddMyScreenShareVideoView(m_hScreenShareView);
      }
      });
      }

      private:
      PlanetKit::PlanetKitCallPtr m_pCall;
      HWNd m_hScreenShareView;
      };
    • You can render a remote user's screen share video with PlanetKitCall::AddPeerScreenShareVideoView().

      class YourApplication {
      void StartRenderingPeerScreenShare() {
      m_pCall->AddPeerScreenShareVideoView(m_hScreenShareRenderWnd);
      }

      private:
      PlanetKit::PlanetKitCallPtr m_pCall;
      HWNd m_hScreenShareRenderWnd;
      };

Breaking change Refine 1-to-1 call end API into three APIs with different parameters

  • EndCall() has been refined into three APIs with different parameters to be used depending on situations.

API changes

Added
  • PlanetKitCall class 1-to-1 call
    • void EndCall()
    • void EndCall(const WString& strUserReleaseCode)
    • void EndCallWithError(const WString& strUserReleaseCode)
Removed
  • PlanetKitCall class 1-to-1 call
    • bool EndCall(EDisconnectReason eCallEndReason)

Spec change Add a class to verify data received from the cloud server

  • Added the CCParam class that lets you interpret string data received from the cloud server to verify information.

API changes

Added
  • CCParam class 1-to-1 call
    • const WString& GetPeerID()
    • const WString& GetPeerServiceID()
    • EMediaType GetMediaType()
  • PlanetKitManager class 1-to-1 call
    • CCParamPtr CreateCCParam(const char* strCCParam)

Code examples

  • Use the string obtained from the cloud server as a parameter when calling the PlanetKitManager::CreateCCParam() API.

    class YourApplication {
    public:
    PlanetKit::CCParamPtr CreateCCParam(const char* ccParam) {
    PlanetKit::PlanetKitManagerPtr planetKitManager = PlanetKit::PlanetKitManager::GetInstance();

    PlanetKit::CCparamPtr ccParam = planetKitManager->CreateCCParam(ccParam);
    }
    };
  • Using the obtained CCParam class instance, you can check the sender's ID, service ID, and call media type.

    class YourApplication {
    public:
    PlanetKit::CCParamPtr CreateCCParam(const char* ccParam) {
    PlanetKit::PlanetKitManagerPtr planetKitManager = PlanetKit::PlanetKitManager::GetInstance();

    PlanetKit::CCparamPtr ccParam = planetKitManager->CreateCCParam(ccParam);

    std::wcout << ccParam->GetUserID() << L" " << ccParam->GetPeerServiceID() << L" " << ccParam->GetMediaType() == PlanetKit::EMediaType::PLNK_MEDIA_TYPE_AUDIOVIDEO ? L"Video" : L"Audio" << std::endl;
    }
    };
  • You can use CCParam to create an instance of the VerifyCallParam class using VerifyCallParam::Create().

    class YourApplication {
    public:
    PlanetKit::VerifyCallParamPtr CreateVerifyCallParam(const char* ccParam) {
    PlanetKit::PlanetKitManagerPtr planetKitManager = PlanetKit::PlanetKitManager::GetInstance();
    PlanetKit::CCparamPtr ccParam = planetKitManager->CreateCCParam(ccParam);

    PlanetKit::UserIdPtr myId(L"yourId", L"yourServiceId");

    PlanetKit::VerifyCallParamPtr verifyCallParam = VerifyCallParam::Create(myId, ccParam);

    return verifyCallParam;
    }
    }

Spec change Add limitation to the display name

  • The display name set by the SetDisplayName() method in ConferenceParam is now limited to 128 bytes including null termination, after being converted to UTF-8.
  • Any trailing part of the string that exceeds the maximum size is discarded.

Spec change Change mirror mode APIs for camera video and screen share video

  • Starting from version 5.5, the local user's video is automatically mirrored without API calls.
  • To horizontally flip the video of the local user, you can obtain the registered VideoRender using CameraController::GetRender() and then flip the video.
  • Added the EVideoMirrorType enum, which can be set in VideoRender.
    • This enum includes PLNK_MIRROR_TYPE_AUTO, PLNK_MIRROR_TYPE_MIRRORED, and PLNK_MIRROR_TYPE_UNMIRRORED values.
      • The PLNK_MIRROR_TYPE_AUTO state automatically selects the mirror mode as PLNK_MIRROR_TYPE_MIRRORED when rendering the local user's video and PLNK_MIRROR_TYPE_UNMIRRORED when rendering a remote user's video.

API changes

Added
  • EVideoMirrorType enum 1-to-1 callGroup call
    • PLNK_MIRROR_TYPE_AUTO = 0
    • PLNK_MIRROR_TYPE_MIRRORED = 1
    • PLNK_MIRROR_TYPE_UNMIRRORED = 2
  • VideoRender class 1-to-1 callGroup call
    • void SetMirrorType(EVideoMirrorType eMirrorType)
    • EVideoMirrorType GetMirrorType()

Code examples

  • You can obtain the VideoRender class registered during rendering and set the mirror mode.

    class YourApplication {
    public:
    void MirrorMyVideo() {
    PlanetKit::CameraControllerPtr cameraController = PlanetKit::PlanetKitManager::GetInstance()->GetCameraController();

    PlanetKit::VideoRenderPtr render = cameraController->GetRender(m_hWnd);

    render->SetMirrorType(PlanetKit::EVideoMirrorType::PLNK_MIRROR_TYPE_MIRRORED);
    }

    private:
    m_hWnd;
    }

Spec change Add camera video screen rotation API

  • You can specify the screen rotation angle in a CameraInfo class instance.
    • The rotation angle specified in CameraInfo is also applied to the video transmitted to the peer.
    • If you want to rotate the video only on the local user's screen, you can obtain the VideoRender and rotate it.

API changes

Added
  • CameraInfo class 1-to-1 callGroup call
    • EVideoRotation GetRotation() const
    • void SetRotation(EVideoRotation eRotation)
  • VideoRender class 1-to-1 callGroup call
    • void SetRotation(EVideoRotation eRotation)
    • EVideoRotation GetRotation()

Enhancement Add a feature to provide volume changes as events

  • Previously, you had to periodically call the relevant API in a polling manner to check the volume, but now an event callback API that provides volume changes as events has been added.
    • Now, the registered event occurs whenever the volume changes.
    • If the event occurrence interval is not set, the event will occur every 500 milliseconds.

API changes

Added
  • AudioDescriptionInfo struct 1-to-1 callGroup call
    • bool bEnableAudioDescription
    • unsigned int unAudioDescriptionInterval
  • MakeCallParam class 1-to-1 call
    • void SetAudioDescriptionInfo(bool bUse, unsigned int unAudioDescriptionInterval)
    • AudioDescriptionInfo GetAudioDescriptionInfo()
  • VerifyCallParam class 1-to-1 call
    • void SetAudioDescriptionInfo(bool bUse, unsigned int unAudioDescriptionInterval)
    • AudioDescriptionInfo GetAudioDescriptionInfo()
  • ConferenceParam class Group call
    • void SetAudioDescriptionInfo(bool bUse, unsigned int unAudioDescriptionInterval)
    • AudioDescriptionInfo GetAudioDescriptionInfo()
  • ICallEvent class 1-to-1 call
    • void OnPeerAudioDescriptionUpdated(PlanetKitCallPtr pPlanetKitCall, unsigned char ucAverageVolumeLevel)
    • void OnMyAudioDescriptionUpdated(PlanetKitCallPtr pPlanetKitCall, unsigned char ucAverageVolumeLevel)
  • IConferenceEvent class Group call
    • void OnPeersAudioDescriptionUpdated(PlanetKitConferencePtr pPlanetKitConference, unsigned char ucAverageVolumeLevel, const PeerAudioDescriptionArray& arrPeer)
    • void OnMyAudioDescriptionUpdated(PlanetKitConferencePtr pPlanetKitConference, const MyAudioDescription& sMyAudioDescription)

Enhancement Add a feature to subscribe to the local user's media state changes

  • Added a class that enables you to subscribe to media status changes of the local user in group calls.

API changes

Added
  • PlanetKitCall class 1-to-1 call
    • MyMediaStatusPtr GetMyMediaStatus()
  • PlanetKitConference class Group call
    • MyMediaStatusPtr GetMyMediaStatus()
  • IMyMediaStatusEvent class 1-to-1 callGroup call
    • void OnRegisterResult(MyMediaStatusPtr pMyStatus, bool bResult)
    • void OnUpdateVideoStatus(MyMediaStatusPtr pMyStatus, VideoStatus sStatus)
    • void OnUpdateVideoSubgroup(MyMediaStatusPtr pMyStatus, const WString& strSubgroupName)
    • void OnUpdateScreenShareState(MyMediaStatusPtr pMyStatus, EScreenShareState eState)
    • void OnUpdateScreenShareSubgroup(MyMediaStatusPtr pMyStatus, const WString& strSubgroupName)
    • void OnMuted(MyMediaStatusPtr pMyStatus)
    • void OnUnmuted(MyMediaStatusPtr pMyStatus)
    • void OnAudioSubgroup(MyMediaStatusPtr pMyStatus, const WString& strDestinationSubgroup, const WString& strTaggedSubgroup)
    • void OnMyAudioDescriptionUpdated(MyMediaStatusPtr pMyStatus, const MyAudioDescription& sMyAudioDescription)
  • MyMediaStatus class Group call
    • bool Register(IMyMediaStatusEvent* pListener)
    • bool Unregister()
    • WStringOptional GetVideoSubgroupName()
    • bool GetVideoStatus(OUT VideoStatus* pResultStatus)
    • WStringOptional GetScreenShareSubgroupName()
    • EScreenShareState GetScreenShareState()
    • bool IsAudioMuted()

Code examples

  • Create an event listener that inherits from the IMyMediaStatusEvent class.

    class YourApplicationMyMediaStatusListener : public PlanetKit::IMyMediaStatusEvent {
    public :
    void OnRegisterResult(PlanetKit::MyMediaStatusPtr pMyStatus, bool bResult) override;

    // ...
    };
  • Create member variables to manage MyMediaStatus and IMyMediaStatusEvent instances.

    class YourApplication {
    private :
    PlanetKit::MyMediaStatusPtr m_pMyMediaStatus;
    YourApplicationMyMediaStatusListener m_cMyListener;
    }
  • After connecting to the group call using PlanetManager::JoinConference(), obtain a MyMediaStatus instance and register the event listener.

    class YourApplication::GetMyMediaStatus() {
    PlanetKit::PlanetKitManagerPtr planetKitManager = PlanetKit::PlanetKitManager::GetInstance();
    PlanetKit::PlanetKitConferencePtr pConference = planetKitManager->GetConferenceInstance();

    PlanetKit::MyMediaStatusPtr pMyMediaStatus = pConference->GetMyMediaStatus();

    // keep my media status instance
    this->m_pMyMediaStatus = pMyMediaStatus;

    // Register event class
    this->m_pMyMediaStatus->Register(&m_cMyListener);
    }
  • When there is a change in the local user's media status during a group call, the callback functions implemented by inheriting from IMyMediaStatusEvent are invoked.

Enhancement Add video sharing mode for screen share

  • Added an API for setting the video sharing mode to the PlanetKitCall and PlanetKitConference classes.
  • When capturing screen share, if you set the video sharing mode, the transmission frame rate will change from 5 FPS to 10 FPS.

API changes

Added
  • PlanetKitCall class 1-to-1 call
    • bool SetMyScreenShareVideoShareMode(bool bVideoShareMode)
    • bool IsMyScreenShareVideoShareModeEnabled()
  • CallConnectedParam class 1-to-1 call
    • bool IsSupportVideoShareMode()
  • PlanetKitConference class Group call
    • bool SetMyScreenShareVideoShareMode(bool bVideoShareMode)
    • bool IsMyScreenShareVideoShareModeEnabled()
  • ConferenceConnectedParam class 1-to-1 call
    • bool IsSupportVideoShareMode()

Code examples

  • After connecting to a 1-to-1 call or group call, the ICallEvent::OnConnected() or IConferenceEvent::OnConnected() callback API is called.

  • You can check whether the video sharing mode is enabled through the IsSupportVideoShareMode() API in the parameters CallConnectedParam and ConferenceConnectedParam provided when the callback is invoked.

    void YourApplicationConferenceEventListener::OnConnected(PlanetKit::PlanetKitConferencePtr pPlanetKitConference, PlanetKit::ConferenceConnectedParamPtr pParam) {
    if(pConnectedParam->IsSupportVideoShareMode() == true) {
    // You can set video share mode flag on this call.
    }
    }
  • If the result of IsSupportVideoShareMode() is true, you can set the video sharing mode flag using the SetMyScreenShareVideoShareMode() API provided by PlanetKitCall or PlanetKitConference.

    void YourApplication::SetVideoShareMode(bool bEnable) {
    PlanetKit::PlanetKitManager* pManager = PlanetKit::PlanetKitManager::GetInstance();
    PlanetKit::PlanetKitConferencePtr pConference = pManager->GetConferenceInstance();

    pConference->SetMyScreenShareVideoShareMode(bEnable);
    }

Enhancement Improve the performance of AEC

  • Improved the performance of the acoustic echo canceller (AEC) function.
  • There are no API changes.

Enhancement Change the mirror mode operating method

  • Made modifications so that, when the mirror mode is applied, the video will be flipped horizontally only on the local user's screen and other participants will see it in an unmirrored state.

Enhancement Add a feature to view screen share information in statistics

  • Added an API for obtaining statistics of screen share.

API changes

Added
  • StatisticsScreenShareSend class 1-to-1 callGroup call
    • StatisticsNetwork* Network()
    • StatisticsVideo* Video()
  • StatisticsScreenShareRecv class 1-to-1 callGroup call
    • const WStringOptional& GetSubgroupName()
    • UserIdPtr GetPeerID()
    • StatisticsNetwork* Network()
    • StatisticsVideo* Video()

Enhancement Add call start failure codes

  • Added codes for call start failure.

API changes

Added
  • EStartFailReason enum 1-to-1 callGroup call
    • PLNK_START_FAIL_REASON_TOO_LONG_APP_SERVER_DATA
    • PLNK_START_FAIL_REASON_NOT_INITIALIZED

Enhancement Remove API for setting audio priority

  • Removed the unused PlanetKitConference::AudioSendSetHighPriority() API.

API changes

Removed
  • PlanetKitConference class Group call
    • bool AudioSendSetHighPriority(bool bHighPriority, void *pResultUserData, IResultHandler *pResultHandler)

Enhancement Add and remove call disconnection codes

  • Deleted unnecessary or duplicate call disconnection codes and added new call disconnection codes.
    • Added disconnect reasons related to system shutdown and logout.
      • System shutdown: PLNK_DISCONNECT_REASON_SYSTEM_DESTROY
      • Entering sleep mode: PLNK_DISCONNECT_REASON_SYSTEM_SLEEP
      • Logout: PLNK_DISCONNECT_REASON_SYSTEM_LOGOFF
      • The call ends with a corresponding disconnect reason.
    • Added a disconnect reason for the case when the Planet Cloud server fails to deliver app server data to the app server.
      • PLNK_DISCONNECT_REASON_APP_SERVER_DATA_ERROR
    • Added a disconnect reason for the case when the allowed call time is exceeded.
      • PLNK_DISCONNECT_REASON_MAX_CALL_TIME_EXCEEDED
    • Added a disconnect reason for the case when the allowed number of calls is exceeded within a short period
      • PLNK_DISCONNECT_REASON_SERVICE_TOO_MANY_REQUESTS
    • Added a disconnect reason for screen lock
      • PLNK_DISCONNECT_REASON_DESKTOP_SCREEN_LOCKED
      • This disconnect reason occurs only on desktop systems when the desktop screen is locked by the user or due to system inactivity. When the peer is using a desktop and the screen is locked, the call will end and you will receive this reason through an event.

API changes

Added
  • EDisconnectReason enum 1-to-1 callGroup call
    • PLNK_DISCONNECT_REASON_INTERNAL_ERROR
    • PLNK_DISCONNECT_REASON_USER_ERROR
    • PLNK_DISCONNECT_REASON_INTERNAL_KIT_ERROR
    • PLNK_DISCONNECT_REASON_AUDIO_TX_NO_SRC
    • PLNK_DISCONNECT_REASON_UNAVAILABLE_NETWORK
    • PLNK_DISCONNECT_REASON_SYSTEM_DESTROY
    • PLNK_DISCONNECT_REASON_SYSTEM_SLEEP
    • PLNK_DISCONNECT_REASON_SYSTEM_LOGOFF
    • PLNK_DISCONNECT_REASON_SERVICE_ACCESS_TOKEN_ERROR
    • PLNK_DISCONNECT_REASON_APP_SERVER_DATA_ERROR
    • PLNK_DISCONNECT_REASON_MAX_CALL_TIME_EXCEEDED
    • PLNK_DISCONNECT_REASON_SERVICE_TOO_MANY_REQUESTS
    • PLNK_DISCONNECT_REASON_DESKTOP_SCREEN_LOCKED
Removed
  • EDisconnectReason enum 1-to-1 callGroup call
    • PLNK_DISCONNECT_REASON_AUDIO_TX_NO_SRC_BY_LOCAL
    • PLNK_DISCONNECT_REASON_AUDIO_TX_NO_SRC_BY_REMOTE
    • PLNK_DISCONNECT_REASON_INTERNAL_ERROR_BY_LOCAL
    • PLNK_DISCONNECT_REASON_INTERNAL_ERROR_BY_REMOTE
    • PLNK_DISCONNECT_REASON_USER_ERROR_BY_LOCAL
    • PLNK_DISCONNECT_REASON_USER_ERROR_BY_REMOTE
    • PLNK_DISCONNECT_REASON_INTERNAL_KIT_ERROR_BY_LOCAL
    • PLNK_DISCONNECT_REASON_INTERNAL_KIT_ERROR_BY_REMOTE
    • PLNK_DISCONNECT_REASON_BAD_NETWORK_IN_CONFERENCE
    • PLNK_DISCONNECT_REASON_UNAVAILABLE_NETWORK_IN_CALL
    • PLNK_DISCONNECT_REASON_SERVICE_APIKEY_ERROR

Enhancement Add a feature to capture snapshot images of full screen or specific windows

  • Added an API for capturing snapshot images of the full screen or specific windows.

API changes

Added
  • ScreenShareController class 1-to-1 callGroup call
    • VideoFramePtr GetScreenShareSnapshot(ScreenShareInfoPtr pScreenShareInfo)

Enhancement Add a cloud recording function

  • Added a feature to record 1-to-1 calls on the cloud.
  • If you need to use the feature, please contact the PlanetKit team.

API changes

Added
  • ERecordOnCloudDeactivateReason enum 1-to-1 call
    • PLNK_RECORD_ON_CLOUD_DEACTIVATE_REASON_INTERNAL
    • PLNK_RECORD_ON_CLOUD_DEACTIVATE_REASON_ACTIVATION_FAILED
    • PLNK_RECORD_ON_CLOUD_DEACTIVATE_REASON_MAX_RECORDING_DURATION_REACHED
  • RecordOnCloud class 1-to-1 call
    • bool IsActivated()
    • DeactivateReasonOptional GetDeactivatedReason()
  • ICallEvent class 1-to-1 call
    • void OnRecordOnCloudUpdated(PlanetKitCallPtr pPlanetKitCall, RecordOnCloudPtr pRecordOnCloud)
  • PlanetKitCall class 1-to-1 call
    • void AcceptCall(bool bPreparation, CallStartMessagePtr pCallStartMessage = CallStartMessagePtr(nullptr), bool bRecordOnCloud = false)
  • MakeCallParam class 1-to-1 call
    • void SetRecordOnCloud(bool bRecord)
    • bool IsRecordOnCloud()

Enhancement Add an event triggered when no video source is input

If no video source is inputted for a certain period of time, an event will occur.

API changes

Added
  • ICallEvent class 1-to-1 call
    • void OnMyVideoNoSource(PlanetKitCallPtr pPlanetKitCall)
  • IConferenceEvent class Group call
    • void OnMyVideoNoSource(PlanetKitConferencePtr pPlanetKitConference)

Enhancement Add a screen share stop event

  • When the local user calls Hold() while screen sharing, the screen share function will automatically stop.

API changes

Added
  • ICallEvent class 1-to-1 call
    • void OnMyScreenShareStoppedByHold(PlanetKitCallPtr pPlanetKitCall)
  • IConferenceEvent class Group call
    • void OnMyScreenShareStoppedByHold(PlanetKitConferencePtr pPlanetKitConference)

Enhancement Add codes to identify the requester when a disconnection event occurs

  • Added codes to determine who requested the call disconnection when the call ends.

API changes

Added
  • EDisconnectSource enum 1-to-1 callGroup call
    • PLNK_DISCONNECT_SOURCE_UNDEFINED
    • PLNK_DISCONNECT_SOURCE_CALLEE
    • PLNK_DISCONNECT_SOURCE_CALLER
    • PLNK_DISCONNECT_SOURCE_PARTICIPANT
    • PLNK_DISCONNECT_SOURCE_CLOUD_SERVER
    • PLNK_DISCONNECT_SOURCE_APP_SERVER
  • CallDisconnectedParam class 1-to-1 call
    • EDisconnectSource GetDisconnectSource()
  • ConferenceDisconnectedParam class Group call
    • EDisconnectSource GetDisconnectSource()

Enhancement Add audio receiver APIs for 1-to-1 calls

  • Added an interface to receive the local user's audio data and another interface to receive the peer's audio data.

API changes

Added
  • PlanetKitCall class 1-to-1 call
  • bool RegisterMyAudioReceiver(ICallAudioReceiver *pReceiver)
  • bool RegisterPeerAudioReceiver(ICallAudioReceiver *pReceiver)
  • bool DeregisterMyAudioReceiver(ICallAudioReceiver *pReceiver)
  • bool DeregisterPeerAudioReceiver(ICallAudioReceiver *pReceiver)
  • ICallAudioReceiver class 1-to-1 call
    • void OnAudio(const SAudioData * pAudioData)

Code examples

  1. Implement a class that inherits from the ICallAudioReceiver class to receive data.

    class YourCallAudioReceiver : public PlanetKit::ICallAudioReceiver {
    void OnAudio(const PlanetKit::SAudioData * pAudioData) override {
    ...
    }
    };
  2. After the call is connected, use PlanetKitCall::RegisterMyAudioReceiver() to register the implemented audio receiver class.

    class YourApplication {
    void RegisterAudioReceiver() {
    m_pCall->RegisterMyAudioReceiver(&m_myAudioReceiver);
    }

    private:
    PlanetKit::PlanetKitCallPtr m_pCall;
    YourCallAudioReceiver m_myAudioReceiver;
    }
  3. Once registration is complete, the ICallAudioReceiver::OnAudio() event occurs every time user audio data is generated, and you can check the audio data using the SAudioData passed as a parameter.

    class YourCallAudioReceiver : public PlanetKit::ICallAudioReceiver {
    void OnAudio(const PlanetKit::SAudioData * pAudioData) override {
    ...
    }
    };

Enhancement Add a configuration for playing the end tone regardless of the call state

  • Added a configuration for playing the end tone regardless of the call state.

API changes

Added
  • MakeCallParam class 1-to-1 call
    • void PlayEndtoneRegardlessOfCallState(bool bPlayEndtone)
    • bool IsPlayEndtoneRegardlessOfCallState()
  • VerifyCallParam class 1-to-1 call
    • void PlayEndtoneRegardlessOfCallState(bool bPlayEndtone)
    • bool IsPlayEndtoneRegardlessOfCallState()
  • ConferenceParam class Group call
    • void PlayEndtoneRegardlessOfConferenceState(bool bPlayEndtone)
    • bool IsPlayEndtoneRegardlessOfConferenceState()

Enhancement Make improvements so that the Windows CA certificate is used when a default certificate is unavailable

  • If auth\\cacert.pem certificate exists, that file will be used.
  • If the file does not exist, the Windows CA certificate will be used.

API change list

Changed

  • ICallEvent class 1-to-1 call

    PreviousPlanetKit 5.5
    void OnCallConnect(PlanetKitCall *pPlanetKitCall, SCallConnectedParam *pConnectedParam)void OnConnected(PlanetKitCallPtr pPlanetKitCall, CallConnectedParamPtr pConnectedParam)
    void OnCallWaitAnswer(PlanetKitCall *pPlanetKitCall)void OnWaitAnswer(PlanetKitCallPtr pPlanetKitCall)
    void OnCallVerified(PlanetKitCall *pPlanetKitCall, SCallVerifiedParam *pVerifiedParam)void OnVerified(PlanetKitCallPtr pPlanetKitCall, CallVerifiedParamPtr pVerifiedParam)
    void OnCallPreperationFinished(PlanetKitCall *pPlanetKitCall)void OnPreparationFinished(PlanetKitCallPtr pPlanetKitCall)
    void OnCallDisconnect(PlanetKitCall *pPlanetKitCall, const SCallDisconnectedParam *pParam)void OnDisconnected(PlanetKitCallPtr pPlanetKitCall, CallDisconnectedParamPtr pDisconnectedParam)
    void OnPeerVideoPaused(PlanetKitCall *pPlanetKitCall, EVideoPauseReason eVideoPauseReason)void OnPeerVideoPaused(PlanetKitCallPtr pPlanetKitCall, EVideoPauseReason eVideoPauseReason)
    void OnPeerVideoResumed(PlanetKitCall *pPlanetKitCall)void OnPeerVideoResumed(PlanetKitCallPtr pPlanetKitCall)
    void OnShortDataReceived(PlanetKitCall *pPlanetKitCall, const SShortDataParam *pShortDataParam)void OnReceivedShortData(PlanetKitCallPtr pPlanetKitCall, ShortDataParamPtr pShortDataParam)
    void OnVideoEnabledByPeer(PlanetKitCall *pPlanetKitCall, bool bVideoCapturerStartSuccess)void OnVideoEnabledByPeer(PlanetKitCallPtr pPlanetKitCall, bool bIsSendingMyVideo)
    void OnVideoDisabledByPeer(PlanetKitCall *pPlanetKitCall, const EMediaDisabledReason eReason)void OnVideoDisabledByPeer(PlanetKitCallPtr pPlanetKitCall, const EMediaDisabledReason eReason)
    void OnPeerHold(PlanetKitCall *pPlanetKitCall, const char *szHoldReason)void OnReceivedPeerHold(PlanetKitCallPtr pPlanetKitCall, const WString& strHoldReason)
    void OnPeerUnhold(PlanetKitCall *pPlanetKitCall)void OnReceivedPeerUnhold(PlanetKitCallPtr pPlanetKitCall)
    void OnNetworkUnavailable(PlanetKitCall *pPlanetKitCall, bool bIsPeer, int nDisconnectAfterSec)void OnNetworkUnavailable(PlanetKitCallPtr pPlanetKitCall, bool bIsPeer, int nDisconnectAfterSec)
    void OnNetworkReavailable(PlanetKitCall *pPlanetKitCall, bool bIsPeer)void OnNetworkReavailable(PlanetKitCallPtr pPlanetKitCall, bool bIsPeer)
    void OnPeerMicMuted(PlanetKitCall *pPlanetKitCall)void OnPeerMicMuted(PlanetKitCallPtr pPlanetKitCall)
    void OnPeerMicUnmuted(PlanetKitCall *pPlanetKitCall)void OnPeerMicUnmuted(PlanetKitCallPtr pPlanetKitCall)
    void OnMuteRequest(PlanetKitCall *pPlanetKitCall, bool bEnableMute)void OnReceivedMuteMyAudioRequest(PlanetKitCallPtr pPlanetKitCall, bool bEnableMute)
    void OnPeerStartScreenShare(PlanetKitCall *pPlanetKitCall)void OnPeerStartedScreenShare(PlanetKitCallPtr pPlanetKitCall)
    void OnPeerStopScreenShare(PlanetKitCall *pPlanetKitCall, bool bHasReason, int nUserReason)void OnPeerStoppedScreenShare(PlanetKitCallPtr pPlanetKitCall, bool bHasReason, int nUserReason)
    void OnDataSessionIncoming(DataSessionStreamIdT nStreamId, EDataSessionType eType)void OnDataSessionIncoming(DataSessionStreamIdT nStreamId, EDataSessionType eType)
  • IConferenceEvent class Group call

    PreviousPlanetKit 5.5
    void OnConferenceConnect(PlanetKitConference *pPlanetKitConference, SConferenceConnectedParam *pParam)void OnConnected(PlanetKitConferencePtr pPlanetKitConference, ConferenceConnectedParamPtr pParam)
    void OnConferenceDisconnect(PlanetKitConference *pPlanetKitConference, const SConferenceDisconnectedParam *pParam)void OnDisconnected(PlanetKitConferencePtr pPlanetKitConference, ConferenceDisconnectedParamPtr pParam)
    void OnPeerListUpdate(PlanetKitConference *pPlanetKitConference, ConferencePeerUpdateParam* pParam)void OnPeerListUpdate(PlanetKitConferencePtr pPlanetKitConference, ConferencePeerUpdateParamPtr pParam)
    void OnPeerVideoUpdate(PlanetKitConference *pPlanetKitConference, ConferenceVideoUpdatedParam *pParam)void OnPeersVideoUpdated(PlanetKitConferencePtr pPlanetKitConference, ConferenceVideoUpdatedParam* pParam)
    void OnPublicSubgroupPeerUpdate(PlanetKitConference *pPlanetKitConference, const ConferenceSubGroupUpdateParam *pParam)void OnPublicSubgroupUpdated(PlanetKitConferencePtr pPlanetKitConference, const ConferenceSubgroupUpdatePeerArray& arrSubgroupUpdatePeer)
    void OnShortDataReceived(PlanetKitConference *pPlanetKitConference, const SShortDataParam *pParam)void OnReceivedShortData(PlanetKitConferencePtr pPlanetKitConference, ShortDataParamPtr pParam)
    void OnPeersHold(PlanetKitConference *pPlanetKitConference, CommonReceivedHolds * pParam)void OnReceivedPeersHold(PlanetKitConferencePtr pPlanetKitConference, const PeerHoldArray& arrPeerHold)
    void OnPeersUnhold(PlanetKitConference *pPlanetKitConference)void OnReceivedPeersUnhold(PlanetKitConferencePtr pPlanetKitConference, const PeerArray& arrPeer)
    void OnPeersMicMuted(PlanetKitConference *pPlanetKitConference, PeerInfos * pPeerInfos)void OnPeersMicMuted(PlanetKitConferencePtr pPlanetKitConference, const PeerArray& peerArray)
    void OnPeersMicUnmuted(PlanetKitConference *pPlanetKitConference, PeerInfos * pPeerInfos)void OnPeersMicUnmuted(PlanetKitConferencePtr pPlanetKitConference, const PeerArray& peerArray)
    void OnMuteRequest(PlanetKitConference *pPlanetKitConference, PeerInfo* pParam, bool bEnableMute)void OnReceivedMuteMyAudioRequest(PlanetKitConferencePtr pPlanetKitConference, PeerPtr pPeer, bool bEnableMute)
    void OnReceiveAppControlMessage(PlanetKitConference *pPlanetKitConference, const void *pMessage, int nMessageSize)void OnReceivedAppControlMessage(PlanetKitConferencePtr pPlanetKitConference, const void* pMessage, int nMessageSize)
    void OnBadNetworkDetected(PlanetKitConference *pPlanetKitConference, int nWillDisconnectAfterSec)void OnNetworkUnavailable(PlanetKitConferencePtr pPlanetKitConference, int nWillDisconnectAfterSec)
    void OnBadNetworkResolved(PlanetKitConference *pPlanetKitConference)void OnNetworkReavailable(PlanetKitConferencePtr pPlanetKitConference)
    void OnDataSessionIncoming(const char* szSubgroupName, DataSessionStreamIdT nStreamId, EDataSessionType eType)void OnDataSessionIncoming(const WStringOptional& strSubgroupName, DataSessionStreamIdT nStreamId, EDataSessionType eType)
    void OnPeerScreenSharingUpdateInfo(ConferencePeerScreenSharingUpdateInfo* pPeerScreenSharingUpdateInfo)void OnPeerScreenShareUpdated(ConferencePeerScreenShareUpdatedParam* pPeerScreenShareUpdateInfo)
    void OnConferenceException(PlanetKitConference *pPlanetKitConference, ConferenceExceptionMessage* pExceptionMessage)void OnException(PlanetKitConferencePtr pPlanetKitConference, const ConferenceExceptionArray& arrExceptionMessage)
    void OnBadNetworkDetected(PlanetKitConferencePtr pPlanetKitConference, int nWillDisconnectAfterSec)void OnNetworkUnavailable(PlanetKitConferencePtr pPlanetKitConference, int nWillDisconnectAfterSec)
    void OnBadNetworkResolved(PlanetKitConferencePtr pPlanetKitConference)void OnNetworkReavailable(PlanetKitConferencePtr pPlanetKitConference)
    void OnDataSessionIncoming(const char* szSubgroupName, DataSessionStreamIdT nStreamId, EDataSessionType eType)void OnDataSessionIncoming(const WStringOptional& strSubgroupName, DataSessionStreamIdT nStreamId, EDataSessionType eType)
  • ConferencePeerUpdateParam class Group call

    PreviousPlanetKit 5.5
    SubGroup* GetSubGroup()SubgroupPtr GetSubgroup()
    ConferencePeer* AddedAt(size_t index)const PeerArray& GetAddedPeer()
    ConferencePeer* RemovedAt(size_t index)const PeerArray& GetRemovedPeer()
  • ConferenceVideoUpdatedParam class Group call

    PreviousPlanetKit 5.5
    PeerVideoStatus* At(size_t nIdx)const PeerVideoStatusArray& GetPeerVideoStatus()
    SubGroup* GetSubGroup()SubgroupPtr GetSubgroup()
  • ConferenceSubgroupUpdatePeer class Group call

    PreviousPlanetKit 5.5
    ConferencePeerInfo* GetPeerInfo() constPeerPtr GetPeer() const
    const CommonStringArray* GetSubscribedSubgroup() constconst WStringArray& GetSubscribedSubgroupNames() const
    const CommonStringArray* GetUnsubscribedSubgroup() constconst WStringArray& GetUnsubscribedSubgroup() const
  • ConferenceException class Group call

    PreviousPlanetKit 5.5
    ConferencePeer* GetPeer()PeerPtr GetPeer()
    SubGroup* GetSubGroup()SubgroupPtr GetSubgroup()
    const char* GetMessage()const WString& GetMessage()
  • SCallConnectedParam struct → CallConnectedParam class 1-to-1 call

    PreviousPlanetKit 5.5
    SCallInitData sCalleeInitDataCallStartMessagePtr GetPeerStartMessage()
    bool bVideoSendHWCodecEnabledbool IsVideoSendHardwareCodecEnabled()
  • SCallVerifiedParam struct → CallVerifiedParam class 1-to-1 call

    PreviousPlanetKit 5.5
    SCallInitData sCalleeInitDataCallStartMessagePtr GetPeerStartMessage()
  • SCallDisconnectedParam struct → CallDisconnectedParam class 1-to-1 call

    PreviousPlanetKit 5.5
    bool bByRemotebool IsDisconnectedByRemote()
    EDisconnectReason eReasonEDisconnectReason GetReason()
    const char* szUserRelCodeconst WString& GetUserReleaseCode()
  • SConferenceConnectedParam struct → ConferenceConnectedParam class Group call

    PreviousPlanetKit 5.5
    bool bVideoSendHWCodecEnabledbool IsVideoSendHardwareCodecEnabled()
  • SConferenceDisconnectedParam struct → ConferenceDisconnectedParam class Group call

    PreviousPlanetKit 5.5
    bool bByRemotebool IsDisconnectedByRemote()
    EDisconnectReason eEndReasonEDisconnectReason GetReason()
    const char* szUserRelCodeconst WString& GetUserReleaseCode()
  • ConferenceExceptionMessage class → ConferenceExceptionArray class Group call

  • ConferencePeerScreenSharingUpdateInfo class → ConferencePeerScreenShareUpdatedParam class Group call

    PreviousPlanetKit 5.5
    ConferencePeer* GetPeer()PeerPtr GetPeer()
    SubGroup* GetSubGroup()SubgroupPtr GetSubgroup()
    EScreenSharingState ScreenSharingState()EScreenShareState ScreenShareState()
  • PlanetKitCall class 1-to-1 call

    PreviousPlanetKit 5.5
    bool SendShortData(const SShortData *pShortData, void *pResultUserData, IResultHandler *pResultHandler)bool SendShortData(const WString& strType, void* pData, unsigned int nSize, void* pUserData = nullptr, ResultCallback pCallback = nullptr)
    bool Hold(const char *szHoldReason, bool bPauseReceive, void *pResultUserData, IResultHandler *pResultHandler)bool Hold(const WStringOptional& strHoldReason = NullOptional, void* pUserData = nullptr, ResultCallback pCallback = nullptr)
    bool MuteMyAudio(bool bMute, void *pMuteResultUserData, IResultHandler *pMuteResultHandler)bool MuteMyAudio(bool bMute, void *pUserData = nullptr, ResultCallback pCallback = nullptr)
    bool PauseMyVideo(void *pResultUserData, IResultHandler *pResultHandler)bool PauseMyVideo(void* pUserData = nullptr, ResultCallback pCallback = nullptr)
    bool ResumeMyVideo(void *pResultUserData, IResultHandler *pResultHandler)bool ResumeMyVideo(void* pUserData = nullptr, ResultCallback pCallback = nullptr)
    bool EnableVideo(void *pResultUserData, IResultHandler *pResultHandler)bool EnableVideo(void* pUserData = nullptr, ResultCallback pCallback = nullptr)
    bool DisableVideo(EMediaDisabledReason eDisableReason, void *pResultUserData, IResultHandler *pResultHandler)bool DisableVideo(EMediaDisabledReason eDisableReason = PLNK_MEDIA_DISABLE_REASON_USER, void* pUserData = nullptr, ResultCallback pCallback = nullptr)
    bool Unhold(void *pResultUserData, IResultHandler *pResultHandler)bool Unhold(void* pUserData = nullptr, ResultCallback pCallback = nullptr)
    bool RequestPeerMute(bool bMute, void *pResultUserData, IResultHandler *pResultHandler)bool RequestPeerMute(bool bMute, void* pUserData = nullptr, ResultCallback pCallback = nullptr)
    bool SilencePeerAudio(bool bSilence, void *pResultUserData, IResultHandler *pResultHandler)bool SilencePeerAudio(bool bSilence, void* pUserData = nullptr, ResultCallback pCallback = nullptr)
    bool StartMyScreenShare(ScreenShareInfoPtr pScreenShareInfo, void *pResultUserData, IResultHandler *pResultHandler)bool StopMyScreenShare(void* pUserData = nullptr, ResultCallback pCallback = nullptr)
    bool StopMyScreenShare(void *pResultUserData, IResultHandler *pResultHandler)bool StopMyScreenShare(void* pUserData = nullptr, ResultCallback pCallback = nullptr)
    bool StopMyScreenShare(int nUserReason, void *pResultUserData, IResultHandler *pResultHandlerbool StopMyScreenShare(int nUserReason, void* pUserData = nullptr, ResultCallback pCallback = nullptr)
    bool StartUserAcousticEchoCancellerReference(void *pResultUserData, IResultHandler *pResultHandler)bool StartUserAcousticEchoCancellerReference(void *pUserData = nullptr, ResultCallback pCallback = nullptr)
    bool StopUserAcousticEchoCancellerReference(void *pResultUserData, IResultHandler *pResultHandler)bool StopUserAcousticEchoCancellerReference(void* pUserData = nullptr, ResultCallback pCallback = nullptr)
    bool MakeRecvDataSession(int nStreamId, IDataSessionReceiver *pIDataSessionReceiver, NULLABLE void *pResultUserData, NULLABLE IDataSessionHander *pResultHandler, void *pExceptionUserData, IDataSessionExceptionHandler *pExceptionHandler)bool MakeInboundDataSession(int nStreamId, NULLABLE void* pResultUserData, IInboundDataSessionHandler* pDataSessionHandler)
    bool MakeSendDataSession(int nStreamId, EDataSessionType eType, NULLABLE void *pResultUserData, NULLABLE IDataSessionHander* pResultHandler, void *pExceptionUserData, IDataSessionExceptionHandler *pExceptionHandler)bool MakeOutboundDataSession(int nStreamId, EDataSessionType eType, NULLABLE void* pResultUserData, IOutboundDataSessionHandler* pDataSessionHandler)
    void AcceptCall(EMediaType eMediaType, SCallInitData *pCallInitData)void AcceptCall(bool bPreparation, CallStartMessagePtr pCallStartMessage = CallStartMessagePtr(nullptr), EInitialMyVideoState eInitialMyVideoState = PLNK_INITIAL_MY_VIDEO_STATE_RESUME, bool bRecordOnCloud = false)
    bool EnableVideoSend(VideoCapturer *pVideoCaptuer, void *pResultUserData, IResultHandler *pResultHandler)bool EnableVideo(EInitialMyVideoState eInitialMyVideoState = PLNK_INITIAL_MY_VIDEO_STATE_RESUME, void* pUserData = nullptr, ResultCallback pCallback = nullptr)
    bool DisableVideoSend(void *pResultUserData, IResultHandler *pResultHandler)bool DisableVideo(EMediaDisabledReason eDisableReason = PLNK_MEDIA_DISABLE_REASON_USER, void* pUserData = nullptr, ResultCallback pCallback = nullptr)
  • PlanetKitConference class Group call

    PreviousPlanetKit 5.5
    bool RequestPeerVideo(const char *szPeerId, const char *szPeerServiceId, const char *szSubGroupName, EVideoResolution eVideoResolution, void* pResultUserData, IRequestVideoResultHandler* pResultHandler, void* pReqVidResResultUserData, IRequestVideoResultHandler* pReqVidResResultHander)bool RequestPeerVideo(UserIdPtr pPeerId, const WStringOptional& strSubgroupName, EVideoResolution eVideoResolution, void* pUserData, RequestPeerVideoResolutionCallback pCallback)
    bool StopPeerVideo(const char *szPeerId, const char *szPeerServiceId, const char *szSubGroupName, void* pUserData, IRequestVideoResultHandler* pResultHandler)bool StopPeerVideo(UserIdPtr pPeerId, const WStringOptional& strSubgroupName, void* pUserData = nullptr, RequestPeerVideoResultCallback pCallback = nullptr)
    bool SendShortData(const SShortData *pShortData, SShortDataTarget *pTargets, unsigned int unTargetCount, void *pResultUserData, IResultHandler *pResultHandler)bool SendShortData(const WString& strType, void* pData, unsigned int nSize, UserIdPtr pPeerId, void* pUserData = nullptr, ResultCallback pCallback = nullptr)
    bool Hold(const char *szHoldReason, void *pResultUserData, IResultHandler *pResultHandler)bool Hold(const WStringOptional& strHoldReason = NullOptional, void* pUserData = nullptr, ResultCallback pCallback = nullptr)
    bool RequestMutePeerAudioSend(const char *szPeerId, const char *szPeerServiceId, bool bMute, void *pResultUserData, IResultHandler *pResultHandler)bool RequestPeerMute(UserIdPtr pPeerId, bool bMute, void* pUserData = nullptr, ResultCallback pCallback = nullptr)
    bool StartMyScreenShare(const char* szSubgroupName, void *pResultUserData, IResultHandler *pResultHandler)bool StartMyScreenShare(ScreenShareInfoPtr pScreenShareInfo, const WStringOptional& strSubgroupName, void* pUserData = nullptr, ResultCallback pCallback = nullptr)
    bool ChangeMyScreenShareGroup(const char* szToSubgroupName, void *pResultUserData, IResultHandler *pResultHandler)bool ChangeMyScreenShareDestination(const WString& strToSubgroupName, void* pUserData = nullptr, ResultCallback pCallback = nullptr)
    bool RequestPeerScreenShare(const char* szPeerId, const char* szPeerServiceId, const char* szSubgroupName, void *pResultUserData, IRequestVideoResultHandler* pResultHandler)bool RequestPeerScreenShare(UserIdPtr pPeerId, const WStringOptional& strSubgroupName, void* pUserData, RequestPeerVideoResultCallback pCallback)
    bool StopPeerScreenShare(const char* szPeerId, const char* szPeerServiceId, const char* szSubgroupName, void *pResultUserData, IRequestVideoResultHandler* pResultHandler)bool StopPeerScreenShare(UserIdPtr pPeerId, const WStringOptional& strSubgroupName, void* pUserData, RequestPeerVideoResultCallback pCallback)
    const char* MyDisplayName()const WStringOptional& GetMyDisplayName()
    bool MuteMyAudio(bool bMute, void *pMuteResultUserData, IResultHandler *pMuteResultHandler)bool MuteMyAudio(bool bMute, void *pUserData = nullptr, ResultCallback pCallback = nullptr)
    bool PauseMyVideo(void *pPauseResultUserData, IResultHandler *pPauseResultHandler)bool PauseMyVideo(void* pUserData = nullptr, ResultCallback pCallback = nullptr)
    bool ResumeMyVideo(void *pResumeResultUserData, IResultHandler *pResumeResultHandler)bool ResumeMyVideo(void* pUserData = nullptr, ResultCallback pCallback = nullptr)
    bool EnableVideo(void *pResultUserData, IResultHandler *pResultHandler)bool EnableVideo(void *pUserData = nullptr, ResultCallback pCallback = nullptr)
    bool DisableVideo(void *pResultUserData, IResultHandler *pResultHandler)bool DisableVideo(void* pUserData = nullptr, ResultCallback pCallback = nullptr)
    bool Unhold(void* pResultUserData, IResultHandler* pResultHandler)bool Unhold(void* pUserData = nullptr, ResultCallback pCallback = nullptr)
    bool RequestPeerMute(UserIdPtr pPeerId, bool bMute, void* pUserData, IResultHandler* pResultHandler)bool RequestPeerMute(UserIdPtr pPeerId, bool bMute, void* pUserData = nullptr, ResultCallback pCallback = nullptr)
    bool RequestPeersMute(bool bMute, void* pUserData, IResultHandler* pResultHandler)bool RequestPeersMute(bool bMute, void* pUserData = nullptr, ResultCallback pCallback = nullptr)
    bool SilencePeersAudio(bool bSilence, void *pResultUserData, IResultHandler *pResultHandler)bool SilencePeersAudio(bool bSilence, void* pUserData = nullptr, ResultCallback pCallback = nullptr)
    bool StopMyScreenShare(void* pUserData, IResultHandler* pResultHandler)bool StopMyScreenShare(void* pUserData = nullptr, ResultCallback pCallback = nullptr)
    bool StopMyScreenShare(int nUserReason, void* pUserData, IResultHandler* pResultHandler)bool StopMyScreenShare(int nUserReason, void* pUserData = nullptr, ResultCallback pCallback = nullptr)
    bool StartUserAcousticEchoCancellerReference(void* pUserData, IResultHandler* pResultHandler)bool StartUserAcousticEchoCancellerReference(void* pUserData = nullptr, ResultCallback pCallback = nullptr)
    bool StopUserAcousticEchoCancellerReference(void *pResultUserData, IResultHandler *pResultHandler)bool StopUserAcousticEchoCancellerReference(void* pUserData = nullptr, ResultCallback pCallback = nullptr)
    bool EnableVideoSend(VideoCapturer *pVideoCaptuer, void *pResultUserData, IResultHandler *pResultHandler)bool EnableVideo(EInitialMyVideoState eInitialMyVideoState = PLNK_INITIAL_MY_VIDEO_STATE_RESUME, void* pUserData = nullptr, ResultCallback pCallback = nullptr)
    bool DisableVideoSend(void *pResultUserData, IResultHandler *pResultHandler)bool DisableVideo(EMediaDisabledReason eDisableReason = PLNK_MEDIA_DISABLE_REASON_USER, void* pUserData = nullptr, ResultCallback pCallback = nullptr)
  • AudioDevice class 1-to-1 callGroup call

    PreviousPlanetKit 5.5
    bool PlayFile(const char* szPath, unsigned int unLoop)bool PlayFile(const WString& strFilePath, unsigned int unLoop)
  • MakeCallParam class 1-to-1 call

    PreviousPlanetKit 5.5
    static CallInitParam* CreateMakeCallParamWithAccessToken(const InitUserId & myID, const InitUserId & peerID, const char* szKey, int nKeyLen)static MakeCallParamPtr CreateWithAccessToken(UserIdPtr pMyID, UserIdPtr pPeerID, const WString& strToken)
    static CallInitParam* CreateMakeCallParamWithAPIKey(const InitUserId & myID, const InitUserId & peerID, const char* szKey)static MakeCallParamPtr CreateWithAPIKey(UserIdPtr pMyID, UserIdPtr pPeerID, const WString& strKey)
    const char* RingTonePath()const WString& GetRingTonePath()
    const char* RingBackTonePath()const WString& GetRingBackTonePath()
    const char* HoldTonePath()const WString& GetHoldTonePath()
    const char* GetStid()const wchar_t* GetAppServerData()
    void SetStid(const char* szStid)void SetAppServerData(const wchar_t* szAppServerData)
    void SetRingTonePath(const char* szRingTonePath)void SetRingTonePath(const WString& strRingTonePath)
    void SetRingBackTonePath(const char* szRingBackTonePath)void SetRingBackTonePath(const WString& strRingBackTonePath)
    void SetHoldTonePath(const char* szHoldTonePath)void SetHoldTonePath(const WString& strHoldTonePath)
  • VerifyCallParam class 1-to-1 call

    PreviousPlanetKit 5.5
    static CallInitParam* CreateVerifyCallParam(const InitUserId & myID, const char* szCcParam)static VerifyCallParamPtr Create(UserIdPtr pMyID, CCParamPtr pCCParam)
    const char* RingTonePath()const WString& GetRingTonePath()
    const char* RingBackTonePath()const WString& GetRingBackTonePath()
    const char* HoldTonePath()const WString& GetHoldTonePath()
    void SetRingTonePath(const char* szRingTonePath)void SetRingTonePath(const WString& strRingTonePath)
    void SetRingBackTonePath(const char* szRingBackTonePath)void SetRingBackTonePath(const WString& strRingBackTonePath)
    void SetHoldTonePath(const char* szHoldTonePath)void SetHoldTonePath(const WString& strHoldTonePath)
  • CommonSetSharedContent class 1-to-1 callGroup call

    PreviousPlanetKit 5.5
    const char* PeerId()UserIdPtr GetPeerID()
    const char* ServiceId()UserIdPtr GetPeerID()
  • ConferenceParam class Group call

    PreviousPlanetKit 5.5
    static ConferenceJoinParam * CreateWithAccessToken(const InitUserId & myID, const char* szAccessToken, int nAccessTokenLength)static ConferenceParamPtr CreateWithAPIKey(UserIdPtr pMyID, const WString& strRoomID, const WString& strRoomServiceID, const WString& strAPIKey)
    static ConferenceJoinParam* CreateWithAPIKey(const InitUserId & myID, const char* szAPIKey)static ConferenceParamPtr CreateWithAccessToken(UserIdPtr pMyID, const WString& strRoomID, const WString& strRoomServiceID, const WString& strToken)
    const char* DisplayName()const WStringOptional& GetDisplayName()
    void SetDisplayName(const char* szMyDisplayName)void SetDisplayName(const WStringOptional& strMyDisplayName)
    const char* RoomId()const WString& GetRoomId()
    void SetRoomId(const char* szRoomId)void SetRoomId(const WString& strRoomId)
    const char* RoomServiceId()const WString& GetRoomServiceId()
    void SetRoomServiceId(const char *szRoomServiceId)void SetRoomId(const WString& strRoomId)
    const char* GetStid()const wchar_t* GetAppServerData()
    void SetStid(const char* szStid)void SetAppServerData(const wchar_t* szAppServerData)
  • PlanetKitManager class 1-to-1 callGroup call

    PreviousPlanetKit 5.5
    bool UpdateServerUrl(const char *szServerUrl)bool UpdateServerUrl(const WString& strServerUrl)
    bool GetServerUrl(char * szServerUrl, size_t nBufferSize)WString& GetServerUrl()
    const char* PlanetKitVersion()const WString& PlanetKitVersion()
  • StatisticsVideoRecv class 1-to-1 callGroup call

    PreviousPlanetKit 5.5
    const char* PeerId()UserIdPtr GetPeerID()
    const char* PeerServiceId()UserIdPtr GetPeerID()
    const char* SubgroupName()const WStringOptional& GetSubgroupName()
  • StatisticsScreenShareRecv class 1-to-1 callGroup call

    PreviousPlanetKit 5.5
    const char* PeerId()UserIdPtr GetPeerID()
    const char* PeerServiceId()UserIdPtr GetPeerID()
    const char* SubgroupName()const WStringOptional& GetSubgroupName()
  • SubGroup class - Group call

    PreviousPlanetKit 5.5
    const char *GetSubGroupName()const WStringOptional& GetSubgroupName()
  • SubGroupManager class Group call

    PreviousPlanetKit 5.5
    bool SubscribeSubgroup(const char *szSubgroupName, ESubgroupPeerUpdateType eUpdateType, bool bEnableVideoUpdate, bool bUseDataSession, void *pResultUserData, ISubscribeSubgroupResultHandler *pResultHandler)bool SubscribeSubgroup(const WString& strSubgroupName, ESubgroupPeerUpdateType eUpdateType, bool bEnableVideoUpdate, bool bUseDataSession, void* pUserData = nullptr, SubscribeResult pCallback = nullptr)
    bool UnsubscribeSubgroup(const char *szSubgroupName, void *pResultUserData, IUnsubscribeSubgroupResultHandler *pResultHandler)bool UnsubscribeSubgroup(const WString& strSubgroupName, void* pUserData = nullptr, UnsubscribeResult pCallback = nullptr)
    SubGroupOptional GetSubGroup(const char *szSubGroupName)SubgroupOptional GetSubgroup(const WString& strSubgroupName)
    SubGroupOptional GetSubGroup(const char *szSubGroupName)SubgroupPtr GetMainRoom()
    bool ChangeMyAudioSend(const char *szDstSubgroupName, void *pResultUserData, IResultHandler *pResultHandler)bool ChangeMyAudioDestination(const WString& strDestinationSubgroupName, void* pUserData = nullptr, ResultCallback pCallback = nullptr)
    bool ChangeMyAudioSend(const char *szDstSubgroupName, void *pResultUserData, IResultHandler *pResultHandler)bool ChangeMyAudioDestinationToMainRoom(void* pUserData = nullptr, ResultCallback pCallback = nullptr)
    bool TagMainRoomAudioSend(const char *szTagSubgroupName, void *pResultUserData, IResultHandler *pResultHandler)bool SetTagMyAudioOfMainRoom(const WString& strTagSubgroupName, void* pUserData = nullptr, ResultCallback pCallback = nullptr)
    bool SilenceAudio(const char *szSubgroupName, bool bSilence, void *pResultUserData, IResultHandler *pResultHandler)bool SilencePeersAudio(const WStringOptional& strSubgroupName, bool bSilence, void* pUserData = nullptr, ResultCallback pCallback = nullptr)
    bool EnableAutoVolumeControl(const char **szFocusSubgroups, size_t nFocusSubgroupCnt, void *pResultUserData, IResultHandler *pResultHandler)bool SetPeersAudioAutoVolumeControl(const WStringArray& arrSubgroupNames, void* pUserData = nullptr, ResultCallback pCallback = nullptr)
    bool SetPeerVolumeSetting(const char *szPeerId, const char *szPeerServiceId, bool bSetForAllSubgroups, const char *szSubgroupNameToApply, unsigned char ucVolume, void *pResultUserData, IResultHandler *pResultHandler)bool SetPeerAudioVolumeLevelSetting(UserIdPtr pPeerId, bool bSetForAllSubgroups, const WStringOptional& strSubgroupNameToApply, unsigned char ucVolume, void* pUserData = nullptr, ResultCallback pCallback = nullptr)
    const String& GetMyVideoSubGroupName()WStringOptional GetMyVideoSubgroupName()
    bool VideoSendChangeSubgroup(const char *szDstSubgroupName, void *pResultUserData, IResultHandler *pResultHandler)bool ChangeMyVideoDestination(const WString& strDestinationSubgroupName, void* pUserData = nullptr, ResultCallback pCallback = nullptr)
    bool VideoSendChangeSubgroup(const char *szDstSubgroupName, void *pResultUserData, IResultHandler *pResultHandler)bool ChangeMyVideoDestinationToMainRoom(void* pUserData = nullptr, ResultCallback pCallback = nullptr)
    bool ChangeMyAudioDestinationToMainRoom(void* pUserData, IResultHandler* pCallback)bool ChangeMyAudioDestinationToMainRoom(void* pUserData = nullptr, ResultCallback pCallback = nullptr)
    bool ClearTagMyAudioOfMainRoom(void* pUserData, IResultHandler* pCallback)bool ClearTagMyAudioOfMainRoom(void* pUserData = nullptr, ResultCallback pCallback = nullptr)
    bool SetPeersAudioAutoVolumeControl(const WStringArray& arrSubgroupNames, void* pUserData, IResultHandler* pCallback)bool SetPeersAudioAutoVolumeControl(const WStringArray& arrSubgroupNames, void* pUserData = nullptr, ResultCallback pCallback = nullptr)
    bool ClearPeersAudioAutoVolumeControl(void *pResultUserData, IResultHandler *pResultHandler)bool ClearPeersAudioAutoVolumeControl(void* pUserData = nullptr, ResultCallback pCallback = nullptr)
  • IResultHandler class → using ResultCallback = void(*)(void* pUserData, bool bSuccess) 1-to-1 callGroup call

  • ISubscribeSubgroupResultHandler class → using SubscribeResult = void(*)(SubgroupPtr pSubgroup, bool bSuccess, ESubgroupSubscribeFailReason eReason, void* pUserData) Group call

  • IUnsubscribeSubgroupResultHandler class → using UnsubscribeResult = void(*)(SubgroupPtr pSubgroup, bool bSuccess, ESubgroupUnsubscribeFailReason eReason, void* pUserData) Group call

  • PeerControl class Group call

    PreviousPlanetKit 5.5
    bool StartScreenShare(const wchar_t* szSubgroupName, void* pUserData, IResultHandler* pResultHandler)bool StartScreenShare(const WStringOptional& strSubgroupName, void* pUserData = nullptr, ResultCallback pCallback = nullptr)
    bool StopScreenShare(void* pUserData, IResultHandler* pResultHandler)bool StopScreenShare(void* pUserData = nullptr, ResultCallback pCallback = nullptr)
  • PeerInfo class → Peer class Group call

    PreviousPlanetKit 5.5
    const char* PeerId()UserIdPtr GetUserID()
    const char* ServiceId()UserIdPtr GetUserID()
  • SManagerInitParam struct → Configuration class 1-to-1 callGroup call

    PreviousPlanetKit 5.5
    char* szBasePathconst WString& GetBasePath()
    char* szDbPathconst WString& GetDatabasePath()
    int nLogLevelvoid SetLogLevel(ELogLevel eLogLevel) ELogLevel GetLogLevel()
    bEnableFileLogvoid EnableLogOutput(bool bEnable) bool IsLogOutputEnabled()
  • SCallInitData struct → CallStartMessage class 1-to-1 call

    PreviousPlanetKit 5.5
    bool bPreperationbool IsInPreparation()
    char datastatic CallStartMessagePtr Create(const WString& strMessage) const WStringOptional& GetMessage()
  • SCallVerifiedParam struct → CallVerifiedParam class 1-to-1 call

    PreviousPlanetKit 5.5
    SCallInitData sCalleeInitDataCallStartMessagePtr GetPeerStartMessage()
  • ConnectParam class → MakeCallParam class 1-to-1 call

    PreviousPlanetKit 5.5
    void SetStid(const char *szStid)void SetAppServerData(const WString& strAppServerData)
    const char* GetStid()const WString& GetAppServerData()
  • ConnectParam class → ConferenceParam class Group call

    PreviousPlanetKit 5.5
    void SetStid(const char *szStid)void SetAppServerData(const WString& strAppServerData)
    const char* GetStid()const WString& GetAppServerData()
  • SubGroup class Group call

    PreviousPlanetKit 5.5
    bool MakeRecvDataSession(int nStreamId, IDataSessionReceiver *pIDataSessionReceiver, NULLABLE void *pResultUserData, NULLABLE IDataSessionHander *pResultHandler, void *pExceptionUserData, IDataSessionExceptionHandler *pExceptionHandler)bool MakeInboundDataSession(int nStreamId, NULLABLE void *pResultUserData, IInboundDataSessionHandler* pDataSessionHandler)
    bool MakeSendDataSession(int nStreamId, EDataSessionType eType, NULLABLE void *pResultUserData, NULLABLE IDataSessionHander* pResultHandler, void *pExceptionUserData, IDataSessionExceptionHandler *pExceptionHandler)bool MakeOutboundDataSession(int nStreamId, EDataSessionType eType, NULLABLE void* pResultUserData, IOutboundDataSessionHandler* pDataSessionHandler)
  • IDataSessionHander class → IInboundDataSessionHandler, IOutboundDataSessionHandler class 1-to-1 callGroup call

Added

  • AutoPtr class 1-to-1 callGroup call
    • bool operator==(const AutoPtr<T>& rhs)
    • bool operator!=(const AutoPtr<T>& rhs)
    • AutoPtr<T>& operator=(const AutoPtr<T>& src)
    • AutoPtr<T>& operator=(T* src)
    • T* operator*()
    • T* operator->()
  • Optional class 1-to-1 callGroup call
    • bool HasValue() const
    • const T* operator->() const
    • T* operator->()
    • const T& operator*() const
    • T& operator*()
    • Optional<T>& operator=(const Optional<T>& src)
    • Optional<T>& operator=(const T& src)
    • T& Value()
    • const T& Value() const
  • Array class 1-to-1 callGroup call
    • const T* Buffer() const
    • T* Buffer()
    • void Resize(size_t size)
    • void SetAt(size_t idx, const T& rhs)
    • size_t Size() const
    • T& At(size_t idx) const
    • T& operator[](size_t idx) const
  • WString class 1-to-1 callGroup call
    • operator const wchar_t*() const
    • const wchar_t* c_str() const
    • size_t Size() const
    • WString& Append(const wchar_t* rhs)
    • bool operator==(const wchar_t* rhs) const
    • bool operator==(const WString& rhs) const
    • bool operator!=(const WString& rhs) const
    • const wchar_t operator[] (int idx)
    • WString& operator=(const wchar_t* src)
    • WString& operator=(const WString& src)
    • WString& operator+=(const wchar_t* rhs)
    • WString& operator+=(const WString& rhs)
    • WString Substring(const unsigned int unStart, const unsigned unLength = 0) const
  • CallConnectedParam class 1-to-1 call
    • CallStartMessagePtr GetPeerStartMessage()
    • bool ShouldFinishPreparation()
    • bool IsInPreparation()
    • bool IsVideoSendHardwareCodecEnabled()
    • bool IsSupportDataSession()
    • bool IsSupportVideoShareMode()
  • CallVerifiedParam class 1-to-1 call
    • CallStartMessagePtr GetPeerStartMessage()
    • bool IsPeerUsePreparation()
  • CallDisconnectedParam class 1-to-1 call
    • bool IsDisconnectedByRemote()
    • EDisconnectReason GetReason()
    • const WString& GetUserReleaseCode()
    • EDisconnectSource GetDisconnectSource()
  • ConferenceDisconnectedParam class Group call
    • bool IsDisconnectedByRemote()
    • EDisconnectReason GetReason()
    • EDisconnectSource GetDisconnectSource()
    • const WString& GetUserReleaseCode()
  • ConferencePeerScreenShareUpdatedParam class Group call
    • PeerPtr GetPeer()
    • SubgroupPtr GetSubgroup()
    • EScreenShareState ScreenShareState()
  • VerifyCallParam class 1-to-1 call
    • const WString& GetEndTonePath()
    • void SetEndTonePath(const WString& strEndTonePath)
    • void PlayEndtoneRegardlessOfCallState(bool bPlayEndtone)
    • bool IsPlayEndtoneRegardlessOfCallState()
    • void SetAudioDescriptionInfo(bool bUse, unsigned int unAudioDescriptionInterval)
    • AudioDescriptionInfo GetAudioDescriptionInfo()
  • ConferenceParam class 1-to-1 call
    • const WString& GetEndTonePath()
    • void SetEndTonePath(const WString& strEndTonePath)
    • void SetAudioDescriptionInfo(bool bUse, unsigned int unAudioDescriptionInterval)
    • AudioDescriptionInfo GetAudioDescriptionInfo()
    • void PlayEndtoneRegardlessOfConferenceState(bool bPlayEndtone)
    • bool IsPlayEndtoneRegardlessOfConferenceState()
    • EInitialMyVideoState GetInitialMyVideoState()
    • void SetInitialMyVideoState(EInitialMyVideoState eInitialMyVideoState)
  • Peer class Group call
    • EMediaType GetMediaType()
    • const WString& GetDisplayName()
    • EUserEquipmentType GetUserEquipmentType()
    • const WString& GetSipLocalIP()
    • const WString& GetDeviceInfo()
    • bool IsDataSessionSupported()
    • bool IsAudioMuted()
    • HoldStatus GetHoldStatus()
    • const WStringArray& GetSubscribedSubgroupNames()
    • WStringOptional GetVideoSubgroupName()
    • ScreenShareStateResult GetScreenShareState(const WStringOptional& strSubgroupName = NullOptional)
    • VolumeResult GetAudioVolumeLevelSetting(const WStringOptional& strSubgroupName = NullOptional)
    • VideoStatusResult GetVideoStatus(const WStringOptional& strSubgroupName = NullOptional)
    • WStringOptional GetCurrentVideoSubgroupName()
    • WStringOptional GetCurrentScreenShareSubgroupName()
    • PeerControlPtr CreatePeerControl()
    • SharedContentsOptional GetSharedContents()
    • PeerControlPtr CreatePeerControl()
  • PeerControl class Group call
    • PeerPtr GetPeer()
    • bool Register(IPeerControlEvent* pEventListener)
    • void Unregister()
    • bool StartVideo(const WStringOptional& strSubgroupName, EVideoResolution eVideoResolution)
    • bool StartVideo(const WStringOptional& strSubgroupName, EVideoResolution eVideoResolution, void* pUserData, StartVideoResultCallback pCallback)
    • bool StartVideo(const WStringOptional& strSubgroupName, EVideoResolution eVideoResolution, void* pUserData, StartVideoResolutionCallback pCallback)
    • bool StopVideo(void* pUserData = nullptr, StoptVideoResultCallback pCallback = nullptr)
    • bool StartScreenShare(const WStringOptional& strSubgroupName, void* pUserData = nullptr, ResultCallback pCallback = nullptr)
    • bool StopScreenShare(void* pUserData = nullptr, ResultCallback pCallback = nullptr)
    • void SetView(WindowHandle hWnd)
    • void ClearView()
    • void RegisterReceiver(IVideoReceiver* pReceiver)
    • void DeregisterReceiver(IVideoReceiver* pReceiver)
    • void SetScreenShareView(WindowHandle hWnd)
    • void ClearScreenShareView()
    • void RegisterScreenShareReceiver(IVideoReceiver* pReceiver)
    • void DeregisterScreenShareReceiver(IVideoReceiver* pReceiver)
  • IPeerControlEvent class Group call
    • void OnInitialized(PeerControlPtr pPeerControl, bool bResult)
    • void OnMuted(PeerControlPtr pPeerControl)
    • void OnUnmuted(PeerControlPtr pPeerControl)
    • void OnVideoUpdated(PeerControlPtr pPeerControl, SubgroupPtr pSubgroup, const VideoStatus& videoStatus)
    • void OnScreenShareUpdated(PeerControlPtr pPeerControl, SubgroupPtr pSubgroup, EScreenShareState eState)
    • void OnSubscribed(PeerControlPtr pPeerControl, SubgroupPtr pSubgroup)
    • void OnUnsubscribed(PeerControlPtr pPeerControl, SubgroupPtr pSubgroup)
    • void OnDisconnected(PeerControlPtr pPeerControl)
    • void OnHold(PeerControlPtr pPeerControl, const WString& strHoldReason)
    • void OnUnHold(PeerControlPtr pPeerControl)
    • void OnSetSharedContents(PeerControlPtr pPeerControl, unsigned int unElapsedAfterSet, const void* pvData, unsigned int unDataSize)
    • void OnUnsetSharedContents(PeerControlPtr pPeerControl)
    • void OnPeerAudioDescriptionUpdated(PeerControlPtr pPeerControl, const PeerAudioDescription& sPeerAudioDescription)
  • Configuration class 1-to-1 callGroup call
    • ConfigurationPtr Create(const WString& strBasePath, const WString& strDatabasePath)
    • void SetLogSizeLimit(ELogSizeLimit eLogSizeLimit)
    • ELogSizeLimit GetLogSizeLimit()
  • CCParam class 1-to-1 call
    • const WString& GetPeerID()
    • const WString& GetPeerServiceID()
    • EMediaType GetMediaType()
  • PlanetKitManager class 1-to-1 call
    • CCParamPtr CreateCCParam(const char* strCCParam)
  • bool SendShortDataToAllPeers(const WString& strType, void* pData, unsigned int nSize, void* pUserData = nullptr, ResultCallback pCallback = nullptr)
  • PlanetKitCall class 1-to-1 call
    • void EndCall()
    • void EndCall(const WString& strUserReleaseCode)
    • void EndCallWithError(const WString& strUserReleaseCode)
    • bool EnableHookMyAudio(IPlanetKitAudioHook* pAudioHook, void* pUserData = nullptr, ResultCallback pCallback = nullptr)
    • bool DisableHookMyAudio(void* pUserData = nullptr, ResultCallback pCallback = nullptr)
    • bool PutHookedMyAudioBack(PlanetKitHookedAudioPtr pHookedAudio)
    • bool GetInboundDataSession(int nStreamId, InboundDataSessionPtr* pResult)
    • bool GetOutboundDataSession(int nStreamId, OutboundDataSessionPtr* pResult)
    • void RemoveAllMyVideoViewAndReceiver()
    • void RemoveAllPeerVideoViewAndReceiver()
    • bool AddMyScreenShareVideoView(WindowHandle hWind)
    • bool AddMyScreenShareVideoReceiver(IVideoReceiver* pReceiver)
    • bool RemoveMyScreenShareVideoView(WindowHandle hWind)
    • bool RemoveMyScreenShareVideoReceiver(IVideoReceiver* pReceiver)
    • void RemoveAllMyScreenShareVideoViewAndReceiver()
    • bool AddPeerScreenShareVideoView(WindowHandle hWind)
    • bool AddPeerScreenShareVideoReceiver(IVideoReceiver* pReceiver)
    • bool RemovePeerScreenShareVideoView(WindowHandle hWind)
    • bool RemovePeerScreenShareVideoReceiver(IVideoReceiver* pReceiver)
    • void RemoveAllPeerScreenShareVideoViewAndReceiver()
    • MyMediaStatusPtr GetMyMediaStatus()
    • bool SetMyScreenShareVideoShareMode(bool bVideoShareMode)
    • bool IsMyScreenShareVideoShareModeEnabled()
    • void AcceptCall(bool bPreparation, CallStartMessagePtr pCallStartMessage = CallStartMessagePtr(nullptr), bool bRecordOnCloud = false)
    • bool RegisterMyAudioReceiver(ICallAudioReceiver *pReceiver)
    • bool RegisterPeerAudioReceiver(ICallAudioReceiver *pReceiver)
    • bool DeregisterMyAudioReceiver(ICallAudioReceiver *pReceiver)
    • bool DeregisterPeerAudioReceiver(ICallAudioReceiver *pReceiver)
  • EDataSessionFailReason enum 1-to-1 callGroup call
    • PLNK_DATA_SESS_FAIL_REASON_NONE
    • PLNK_DATA_SESS_FAIL_REASON_INTERNAL
    • PLNK_DATA_SESS_FAIL_REASON_UNSUPPORTED
    • PLNK_DATA_SESS_FAIL_REASON_NOT_INCOMING
    • PLNK_DATA_SESS_FAIL_REASON_ALREADY_EXIST
    • PLNK_DATA_SESS_FAIL_REASON_INVALID_ID
    • PLNK_DATA_SESS_FAIL_REASON_INVALID_TYPE
  • Subgroup class Group call
    • bool GetInboundDataSession(int nStreamId, InboundDataSessionPtr* pResult)
    • bool GetOutboundDataSession(int nStreamId, OutboundDataSessionPtr* pResult)
  • IInboundDataSessionHandler class 1-to-1 callGroup call
    • void OnReceive(DataSessionStreamIdT nStreamId, DataSessionFramePtr pFrame)
    • void OnSuccess(InboundDataSessionPtr pInboundDataInterface, void* pUserData)
    • void OnError(void* pUserData, EDataSessionFailReason eFailReason)
    • void OnClosed(void* pUserData, EDataSessionClosedReason eClosedReason)
  • IOutboundDataSessionHandler class 1-to-1 callGroup call
    • void OnTooLongQueuedData(OutboundDataSessionPtr pDataSession, bool bEnabled)
    • void OnUnsupportedStreamId(OutboundDataSessionPtr pDataSession)
    • void OnSuccess(OutboundDataSessionPtr pDataSession, void* pUserData)
    • void OnError(void* pUserData, EDataSessionFailReason eFailReason)
    • void OnClosed(void* pUserData, EDataSessionClosedReason eClosedReason)
  • InboundDataSession class 1-to-1 callGroup call
    • DataSessionStreamIdT GetStreamId()
    • IInboundDataSessionHandler* GetReceiver()
  • OutboundDataSession class 1-to-1 callGroup call
    • bool Send(const void* pData, unsigned int nDataSize, unsigned long long llTimestamp)
    • DataSessionStreamIdT GetStreamId()
    • unsigned long long GetCurrentOffset()
    • IOutboundDataSessionHandler* GetHandler()
    • bool ChangeDestination(UserIdPtr pPeerId, void* pUserData = nullptr, ResultCallback pCallback = nullptr)
  • EVideoControlResult enum 1-to-1 callGroup call
    • EVideoControlResult_PreviewAlreadyExist
    • EVideoControlResult_CreateRenderFail
    • EVideoControlResult_CameraIsAlreadyInUseByAnotherApplication
    • EVideoControlResult_PreviewHandleIsInvalid
    • EVideoControlResult_PreviewReceiverIsInvalid
  • EInitialMyVideoState enum 1-to-1 callGroup call
    • PLNK_INITIAL_MY_VIDEO_STATE_RESUME
    • PLNK_INITIAL_MY_VIDEO_STATE_PAUSE
  • ECameraControlResult enum 1-to-1 callGroup call
    • PLNK_CAMERA_CONTROL_RESULT_NONE
    • PLNK_CAMERA_CONTROL_RESULT_FAILED_TO_CREATE_CAMERA_DEVICE
    • PLNK_CAMERA_CONTROL_RESULT_SELECTED_CAMERA_IS_REMOVED
    • PLNK_CAMERA_CONTROL_RESULT_NO_CAMERA_SELECTED
  • CameraController class 1-to-1 callGroup call
    • void GetCapturerInfo(CameraInfoArray& arrCameraInfo)
    • EVideoControlResult SelectCamera(CameraInfoPtr pCameraInfo)
    • CameraInfoOptional GetSelectedCamera()
    • void RegisterDeviceEvent(IVideoCaptureDeviceEvent* pDelegate)
    • void DeregisterDeviceEvent(IVideoCaptureDeviceEvent* pDelegate)
    • bool IsRunning()
    • bool StartPreview(WindowHandle hWind)
    • bool StartPreview(IVideoReceiver* pReceiver)
    • bool StopPreview(WindowHandle hWind)
    • bool StopPreview(IVideoReceiver* pReceiver)
    • ECapturerMediaType GetCapturerMediaType()
    • CameraInfoPtr GetVideoCapturerInfo()
    • EVideoCapturerType GetCapturerType()
    • bool RegisterVideoInterceptor(IVideoInterceptor* pInterceptor)
    • bool DeregisterVideoInterceptor()
    • VideoRenderPtr GetRender(WindowHandle hWnd)
    • bool WriteFrameData(SVideoFrame& sVideoFrame)
    • bool IsPostingFrameAvailable(UINT64 ull64tick)
  • PlanetKitConference class Group call
    • void RemoveAllMyVideoViewAndReceiver()
    • bool AddPeerVideoReceiver(UserIdPtr pPeerID, IVideoReceiver* pReceiver)
    • bool RemovePeerVideoReceiver(IVideoReceiver* pReceiver)
    • void RemoveAllPeerVideoViewAndReceiver()
    • bool AddMyScreenShareVideoView(WindowHandle hWind)
    • bool AddMyScreenShareVideoReceiver(IVideoReceiver* pReceiver)
    • bool RemoveMyScreenShareVideoView(WindowHandle hWind)
    • bool RemoveMyScreenShareVideoReceiver(IVideoReceiver* pReceiver)
    • void RemoveAllMyScreenShareVideoViewAndReceiver()
    • bool AddPeerScreenShareVideoView(UserIdPtr pUserPtr, WindowHandle hWind)
    • bool AddPeerScreenShareVideoReceiver(UserIdPtr pUserPtr, IVideoReceiver* pReceiver)
    • bool RemovePeerScreenShareVideoView(WindowHandle hWind)
    • bool RemovePeerScreenShareVideoReceiver(IVideoReceiver* pReceiver)
    • void RemoveAllPeerScreenShareVideoViewAndReceiver()
    • MyMediaStatusPtr GetMyMediaStatus()
    • bool SetMyScreenShareVideoShareMode(bool bVideoShareMode)
    • bool IsMyScreenShareVideoShareModeEnabled()
  • ScreenShareController class 1-to-1 callGroup call
    • bool GetScreenShareInfos(ScreenShareInfoArray& arrScreenShare)
    • VideoFramePtr GetScreenShareSnapshot(ScreenShareInfoPtr pScreenShareInfo)
    • EVideoControlResult StartScreenShareCapture(ScreenShareInfoPtr pScreenShareInfo)
    • bool StopScreenCapture()
    • bool RegisterCapturerEvent(IVideoCapturerEvent* pDelegate)
    • bool DeregisterCapturerEvent()
    • EVideoCapturerType GetCapturerType()
    • bool RegisterVideoInterceptor(IVideoInterceptor* pInterceptor)
    • bool DeregisterVideoInterceptor()
    • VideoRenderPtr GetRender(WindowHandle hWnd)
    • bool WriteFrameData(SVideoFrame& sVideoFrame)
    • bool IsPostingFrameAvailable(UINT64 ull64tick)
    • VideoFramePtr GetScreenShareSnapshot(ScreenShareInfoPtr pScreenShareInfo)
  • EVideoMirrorType enum 1-to-1 callGroup call
    • PLNK_MIRROR_TYPE_AUTO = 0
    • PLNK_MIRROR_TYPE_MIRRORED = 1
    • PLNK_MIRROR_TYPE_UNMIRRORED = 2
  • VideoRender class 1-to-1 callGroup call
    • void SetMirrorType(EVideoMirrorType eMirrorType)
    • EVideoMirrorType GetMirrorType()
    • void SetRotation(EVideoRotation eRotation)
    • EVideoRotation GetRotation()
  • CameraInfo class 1-to-1 callGroup call
    • EVideoRotation GetRotation() const
    • void SetRotation(EVideoRotation eRotation)
  • AudioDescriptionInfo struct 1-to-1 callGroup call
    • bool bEnableAudioDescription
    • unsigned int unAudioDescriptionInterval
  • IMyMediaStatusEvent class 1-to-1 callGroup call
    • void OnRegisterResult(MyMediaStatusPtr pMyStatus, bool bResult)
    • void OnUpdateVideoStatus(MyMediaStatusPtr pMyStatus, VideoStatus sStatus)
    • void OnUpdateVideoSubgroup(MyMediaStatusPtr pMyStatus, const WString& strSubgroupName)
    • void OnUpdateScreenShareState(MyMediaStatusPtr pMyStatus, EScreenShareState eState)
    • void OnUpdateScreenShareSubgroup(MyMediaStatusPtr pMyStatus, const WString& strSubgroupName)
    • void OnMuted(MyMediaStatusPtr pMyStatus)
    • void OnUnmuted(MyMediaStatusPtr pMyStatus)
    • void OnAudioSubgroup(MyMediaStatusPtr pMyStatus, const WString& strDestinationSubgroup, const WString& strTaggedSubgroup)
    • void OnMyAudioDescriptionUpdated(MyMediaStatusPtr pMyStatus, const MyAudioDescription& sMyAudioDescription)
  • MyMediaStatus class Group call
    • bool Register(IMyMediaStatusEvent* pListener)
    • bool Unregister()
    • WStringOptional GetVideoSubgroupName()
    • bool GetVideoStatus(OUT VideoStatus* pResultStatus)
    • WStringOptional GetScreenShareSubgroupName()
    • EScreenShareState GetScreenShareState()
    • bool IsAudioMuted()
  • ConferenceConnectedParam class 1-to-1 call
    • bool IsSupportVideoShareMode()
  • StatisticsScreenShareSend class 1-to-1 callGroup call
    • StatisticsNetwork* Network()
    • StatisticsVideo* Video()
  • StatisticsScreenShareRecv class 1-to-1 callGroup call
    • const WStringOptional& GetSubgroupName()
    • UserIdPtr GetPeerID()
    • StatisticsNetwork* Network()
    • StatisticsVideo* Video()
  • EStartFailReason enum 1-to-1 callGroup call
    • PLNK_START_FAIL_REASON_TOO_LONG_APP_SERVER_DATA
    • PLNK_START_FAIL_REASON_NOT_INITIALIZED
  • EDisconnectReason enum 1-to-1 callGroup call
    • PLNK_DISCONNECT_REASON_INTERNAL_ERROR
    • PLNK_DISCONNECT_REASON_USER_ERROR
    • PLNK_DISCONNECT_REASON_INTERNAL_KIT_ERROR
    • PLNK_DISCONNECT_REASON_AUDIO_TX_NO_SRC
    • PLNK_DISCONNECT_REASON_UNAVAILABLE_NETWORK
    • PLNK_DISCONNECT_REASON_SYSTEM_DESTROY
    • PLNK_DISCONNECT_REASON_SYSTEM_SLEEP
    • PLNK_DISCONNECT_REASON_SYSTEM_LOGOFF
    • PLNK_DISCONNECT_REASON_SERVICE_ACCESS_TOKEN_ERROR
    • PLNK_DISCONNECT_REASON_APP_SERVER_DATA_ERROR
    • PLNK_DISCONNECT_REASON_MAX_CALL_TIME_EXCEEDED
    • PLNK_DISCONNECT_REASON_SERVICE_TOO_MANY_REQUESTS
    • PLNK_DISCONNECT_REASON_DESKTOP_SCREEN_LOCKED
  • ERecordOnCloudDeactivateReason enum 1-to-1 call
    • PLNK_RECORD_ON_CLOUD_DEACTIVATE_REASON_INTERNAL
    • PLNK_RECORD_ON_CLOUD_DEACTIVATE_REASON_ACTIVATION_FAILED
    • PLNK_RECORD_ON_CLOUD_DEACTIVATE_REASON_MAX_RECORDING_DURATION_REACHED
  • RecordOnCloud class 1-to-1 call
    • bool IsActivated()
    • DeactivateReasonOptional GetDeactivatedReason()
  • MakeCallParam class 1-to-1 call
    • EInitialMyVideoState GetInitialMyVideoState()
    • void SetInitialMyVideoState(EInitialMyVideoState eInitialMyVideoState)
    • void SetAudioDescriptionInfo(bool bUse, unsigned int unAudioDescriptionInterval)
    • AudioDescriptionInfo GetAudioDescriptionInfo()
    • const WString& GetEndTonePath()
    • void SetEndTonePath(const WString& strEndTonePath)
    • void PlayEndtoneRegardlessOfCallState(bool bPlayEndtone)
    • bool IsPlayEndtoneRegardlessOfCallState()
    • void SetRecordOnCloud(bool bRecord)
    • bool IsRecordOnCloud()
  • ICallEvent class 1-to-1 call
    • void OnMyVideoNoSource(PlanetKitCallPtr pPlanetKitCall)
    • void OnMyScreenShareStoppedByHold(PlanetKitCallPtr pPlanetKitCall)
    • void OnDataSessionIncoming(DataSessionStreamIdT nStreamId, EDataSessionType eType)
    • void OnPeerAudioDescriptionUpdated(PlanetKitCallPtr pPlanetKitCall, unsigned char ucAverageVolumeLevel)
    • void OnMyAudioDescriptionUpdated(PlanetKitCallPtr pPlanetKitCall, unsigned char ucAverageVolumeLevel)
    • void OnRecordOnCloudUpdated(PlanetKitCallPtr pPlanetKitCall, RecordOnCloudPtr pRecordOnCloud)
  • IConferenceEvent class Group call
    • void OnMyVideoNoSource(PlanetKitConferencePtr pPlanetKitConference)
    • void OnMyScreenShareStoppedByHold(PlanetKitConferencePtr pPlanetKitConference)
    • void OnDataSessionIncoming(const WStringOptional& strSubgroupName, DataSessionStreamIdT nStreamId, EDataSessionType eType)
    • void OnPeersAudioDescriptionUpdated(PlanetKitConferencePtr pPlanetKitConference, unsigned char ucAverageVolumeLevel, const PeerAudioDescriptionArray& arrPeer)
    • void OnMyAudioDescriptionUpdated(PlanetKitConferencePtr pPlanetKitConference, const MyAudioDescription& sMyAudioDescription)
  • EDisconnectSource enum 1-to-1 callGroup call
    • PLNK_DISCONNECT_SOURCE_UNDEFINED
    • PLNK_DISCONNECT_SOURCE_CALLEE
    • PLNK_DISCONNECT_SOURCE_CALLER
    • PLNK_DISCONNECT_SOURCE_PARTICIPANT
    • PLNK_DISCONNECT_SOURCE_CLOUD_SERVER
    • PLNK_DISCONNECT_SOURCE_APP_SERVER
  • ICallAudioReceiver class 1-to-1 call
    • void OnAudio(const SAudioData * pAudioData)
  • AudioData struct 1-to-1 call
    • unsigned int unBufferSize
    • PlanetKitByte* pBuffer
  • EAudioSampleType enum 1-to-1 call
    • PLNK_AUDIO_SAMPLE_TYPE_SIGNED_FLOAT32 = 0
    • PLNK_AUDIO_SAMPLE_TYPE_SIGNED_SHORT16 = 1
  • PlanetKitHookedAudio class 1-to-1 call
    • const unsigned int GetSampleRate()
    • const unsigned int GetChannel()
    • const EAudioSampleType GetAudioSampleType()
    • const unsigned int GetSampleCount()
    • const unsigned long long GetSequenceNumber()
    • bool SetAudioData(const PlanetKitByte* pBuffer, unsigned int unBufferSize)
    • const AudioData GetAudioData()
  • IPlanetKitAudioHook class 1-to-1 call
    • void OnHooked(PlanetKitHookedAudioPtr pHookedAudio)

Removed

  • SCallConnectedParam struct 1-to-1 call
    • EMediaType eMediaType
  • ConferencePeerUpdateParam class Group call
    • size_t AddedCount()
    • size_t RemovedCount()
  • ConferenceVideoUpdatedParam class Group call
    • size_t GetCount()
  • ConferenceSubGroupUpdateParam class Group call
  • MakeCallParam class 1-to-1 call
    • const char* GetAPIKey()
    • const char* GetAccessToken()
  • ConferenceParam class Group call
    • const char* GetAPIKey()
    • const char* GetAccessToken()
    • EConferenceRoomType ConferenceRoomType()
    • void SetConferenceRoomType(EConferenceRoomType eRoomType)
  • EConferenceRoomType enum Group call
  • EDisconnectReason enum 1-to-1 callGroup call
    • PLNK_DISCONNECT_REASON_WRONG_ROOM_ATTR
    • PLNK_DISCONNECT_REASON_AUDIO_TX_NO_SRC_BY_LOCAL
    • PLNK_DISCONNECT_REASON_AUDIO_TX_NO_SRC_BY_REMOTE
    • PLNK_DISCONNECT_REASON_INTERNAL_ERROR_BY_LOCAL
    • PLNK_DISCONNECT_REASON_INTERNAL_ERROR_BY_REMOTE
    • PLNK_DISCONNECT_REASON_USER_ERROR_BY_LOCAL
    • PLNK_DISCONNECT_REASON_USER_ERROR_BY_REMOTE
    • PLNK_DISCONNECT_REASON_INTERNAL_KIT_ERROR_BY_LOCAL
    • PLNK_DISCONNECT_REASON_INTERNAL_KIT_ERROR_BY_REMOTE
    • PLNK_DISCONNECT_REASON_BAD_NETWORK_IN_CONFERENCE
    • PLNK_DISCONNECT_REASON_UNAVAILABLE_NETWORK_IN_CALL
    • PLNK_DISCONNECT_REASON_SERVICE_APIKEY_ERROR
  • SManagerInitParam struct
    • bool bEnableStdOutLog
    • bool bEnableJupLog
  • SubGroupManager class Group call
    • const char *GetMyAudioSubGroupName()
    • const char *GetMyAudioTaggedSubGroupName()
  • PlanetKitCall class 1-to-1 call
    • bool EndCall(EDisconnectReason eCallEndReason)
  • IDataSessionExceptionHandler class
  • ConferenceJoinParam class Group call
    • void SetDisableAutoDisconnectOnBadNetwork(bool bDisable)
  • VideoCaptureManager class 1-to-1 callGroup call
  • VideoCapture class 1-to-1 callGroup call
  • PlanetKitConference class Group call
    • bool AudioSendSetHighPriority(bool bHighPriority, void *pResultUserData, IResultHandler *pResultHandler)