본문으로 건너뛰기

PlanetKit 4.4에서 5.5로 마이그레이션하기

PlanetKit 4.4에서 PlanetKit 5.5로 마이그레이션하기 위한 절차와 고려 사항을 상세히 설명합니다.

마이그레이션

Breaking change 메모리 관리를 위한 신규 클래스 추가

  • PlanetKit에서 제공하는 포인터형 변수의 생성 주기를 관리하기 위해 메모리 관리 클래스들을 추가했습니다.
  • AutoPtr, Optional, Array를 추가했습니다.
    • 포인터형 변수는 AutoPtr을 사용하도록 변경했습니다.
    • 명시적으로 nullptr을 제공하던 API는 Optional을 사용하도록 변경했습니다.
    • 배열 변수는 파라미터의 크기와 포인터로 제공되지 않고 Array로 제공하도록 변경했습니다.

API 변경

변경
  • ICallEvent class 1-to-1 call

    이전 버전PlanetKit 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

    이전 버전PlanetKit 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

    이전 버전PlanetKit 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

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

    이전 버전PlanetKit 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

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

    이전 버전PlanetKit 5.5
    SCallInitData sCalleeInitDataCallStartMessagePtr GetPeerStartMessage()
    bool bVideoSendHWCodecEnabledbool IsVideoSendHardwareCodecEnabled()
  • SCallVerifiedParam struct → CallVerifiedParam class 1-to-1 call

    이전 버전PlanetKit 5.5
    SCallInitData sCalleeInitDataCallStartMessagePtr GetPeerStartMessage()
  • SCallDisconnectedParam struct → CallDisconnectedParam class 1-to-1 call

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

    이전 버전PlanetKit 5.5
    bool bVideoSendHWCodecEnabledbool IsVideoSendHardwareCodecEnabled()
  • SConferenceDisconnectedParam struct → ConferenceDisconnectedParam class Group call

    이전 버전PlanetKit 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

    이전 버전PlanetKit 5.5
    ConferencePeer* GetPeer()PeerPtr GetPeer()
    SubGroup* GetSubGroup()SubgroupPtr GetSubgroup()
    EScreenSharingState ScreenSharingState()EScreenShareState ScreenShareState()
추가
  • 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()
삭제
  • 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

예제 코드

  • 추가된 클래스는 다음과 같이 사용할 수 있습니다.

    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;
    };
  • 포인터 변수 및 구조체를 파라미터로 제공하던 API들은 PlanetKit::AutoPtr 클래스로 대체됩니다. 구조체의 포인터로 제공되는 API들은 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.

    ...
    }
    }
  • 사용자가 직접 생성해 API의 파라미터로 사용하던 인스턴스 변수들도 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;
    }
  • API를 이용해 생성한 인스턴스를 포인터 변수로 제공했으나 PlanetKit::AutoPtr 클래스로 대체해 AddRef()Release() 등 레퍼런스를 관리하기 위한 API를 호출하지 않아도 생성 주기가 자동으로 관리됩니다.

  • 파라미터로 문자열을 사용할 때 const char와 길이 변수를 사용하지 않고 WString(utf-8)로 제공합니다.

    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 API 파라미터 유형으로 사용하는 char(UTF-8) 문자열을 WString(UTF-16) 문자열로 변경

  • 유니코드 문자열을 처리하기 위해 WString(UTF-16)을 파라미터 유형으로 사용하도록 변경했습니다.
  • 입력 문자열 길이 제한이 필요한 API의 경우 PlanetKit이 UTF-8로 변환해 길이를 체크하고 성공/실패 결과를 반환합니다.

API 변경

변경
  • PlanetKitCall class 1-to-1 call

    이전 버전PlanetKit 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

    이전 버전PlanetKit 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

    이전 버전PlanetKit 5.5
    const CommonStringArray* GetSubscribedSubgroup() constconst WStringArray& GetSubscribedSubgroupNames() const
    const CommonStringArray* GetUnsubscribedSubgroup() constconst WStringArray& GetUnsubscribedSubgroup() const
  • ConferenceException class Group call

    이전 버전PlanetKit 5.5
    const char* GetMessage()const WString& GetMessage()
  • IConferenceEvent class Group call

    이전 버전PlanetKit 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

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

    이전 버전PlanetKit 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

    이전 버전PlanetKit 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

    이전 버전PlanetKit 5.5
    const char* PeerId()UserIdPtr GetPeerID()
    const char* ServiceId()UserIdPtr GetPeerID()
  • ConferenceParam class Group call

    이전 버전PlanetKit 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

    이전 버전PlanetKit 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

    이전 버전PlanetKit 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

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

    이전 버전PlanetKit 5.5
    const char *GetSubGroupName()const WStringOptional& GetSubgroupName()
  • SubGroupManager class Group call

    이전 버전PlanetKit 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)
추가
  • 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)
삭제
  • MakeCallParam class 1-to-1 call
    • const char* GetAPIKey()
    • const char* GetAccessToken()
  • ConferenceParam class Group call
    • const char* GetAPIKey()
    • const char* GetAccessToken()

예제 코드

  • 문자열 변수 std::string을 사용할 경우 std::wstring로 변경하고, 문자열 상수는 Prefix L을 사용할 수 있습니다.

    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()
    );
    }
  • char(UTF-8) 문자열을 wchar_t(UTF-16) 문자열로 변경하기 위해서 Windows에서 제공하는 MultibyteToWideChar API를 활용할 수 있습니다.

    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;
    }
  • Windows에서 제공하는 CString은 프로젝트의 Character set 옵션을 Unicode Character Set으로 설정할 경우 UTF-16으로 사용할 수 있으므로 코드를 변경할 필요는 없습니다.

Breaking change IResultHandler, ISubscribeSubgroupResultHandlerIUnsubscribeSubgroupResultHandler 클래스 제거

  • 비동기 API 호출 결과를 콜백으로 전달하는 데 사용하던 클래스들을 제거하고 정적 함수를 추가했습니다.
    • IResultHandler, ISubscribeSubgroupResultHandler, IUnsubscribeSubgroupResultHandler를 제거하고 ResultCallback, SubscribeResult, UnsubscribeResult로 대체합니다.
  • 이제 클래스 정적 함수, C 스타일 정적 함수 또는 람다 함수를 '함수 콜백'으로 사용할 수 있습니다.

API 변경

변경
  • 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

    이전 버전PlanetKit 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

    이전 버전PlanetKit 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

    이전 버전PlanetKit 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)

예제 코드

  • 다음은 이전 버전에서 비동기 API의 결과를 확인하던 방식입니다.

    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;
    }
  • 새 버전에서는 다음과 같은 세 가지 방법으로 비동기 API의 결과를 확인할 수 있습니다.

    • 방법 1: OnResult 메서드를 정적 메서드로 변경하세요.

      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;
      }
    • 방법 2: YourCallResultHandler 클래스를 삭제하고 OnResult() 메서드를 함수로 변경하세요.

      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;
      }
    • 방법 3: 비동기 API를 호출할 때 람다 표현식을 이용해 결과를 확인하세요.

      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 그룹 통화 참여자 정보를 확인하는 클래스와 참여자를 컨트롤하는 클래스 추가

  • 이전에는 PeerInfo 클래스를 통해 참여자의 ID와 서비스 ID만 확인할 수 있었지만, 참여자의 여러 정보를 확인할 수 있도록 Peer 클래스를 추가했습니다.
  • Peer 클래스를 이용해 PeerControl 클래스를 생성할 수 있습니다.
    • PeerControl을 이용하면 참여자의 비디오를 켜거나 끄고, 화면 공유 영상을 켜거나 끌 수 있습니다.

API 변경

변경
  • PeerInfo class → Peer class Group call

    이전 버전PlanetKit 5.5
    const char* PeerId()UserIdPtr GetUserID()
    const char* ServiceId()UserIdPtr GetUserID()
추가
  • 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)

예제 코드

  • 참여자가 그룹 통화에 접속하면 IConferenceEvent::OnPeerListUpdate() 이벤트가 발생하며 ConferencePeerUpdateParam::GetAddedPeer()를 이용해 참가한 참여자의 Peer 클래스 인스턴스를 얻을 수 있습니다.

    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 };

    };
  • 참여자별로 뷰를 구현할 경우 뷰에 Peer 클래스 인스턴스를 전달할 수 있습니다.

    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;
    };
  • 참여자별 뷰를 생성할 때 PeerControl 클래스 인스턴스를 생성할 수 있습니다.

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

    private:
    PlanetKit::PeerPtr m_peer;
    PlanetKit::PeerControlPtr m_peerControl;
    };
  • PeerControl 클래스 인스턴스에서 발생하는 이벤트는 IPeerControlEvent를 상속받아 구현한 후 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 };
    };
  • 참여자가 영상 통화를 시작하면 IPeerControlEvent::OnVideoUpdated() 이벤트가 호출되며, 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;
    }
  • 참여자가 그룹 통화에서 퇴장하면 보유 중인 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 그룹 통화에 접속할 때 사용하는 방 유형 제거

  • PlanetKit 5.2 미만 버전에서는 그룹 통화 참여 시 그룹 통화의 방 유형이 일치하지 않는 경우 PLNK_DISCONNECT_REASON_WRONG_ROOM_ATTR 오류가 발생했습니다.
  • PlanetKit 5.2부터 방 유형을 제거하여 더 이상 확인하지 않으므로 PLNK_DISCONNECT_REASON_WRONG_ROOM_ATTR 통화 종료 이유가 더 이상 사용되지 않습니다.

API 변경

삭제
  • 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 로그 설정을 위한 옵션 변경

  • SManagerInitParam 구조체를 삭제하고 Configuration 클래스를 추가했습니다.
  • Configuration 클래스를 이용해 로그 사용 방식을 설정할 수 있습니다.

API 변경

변경
  • SManagerInitParam struct → Configuration class 1-to-1 callGroup call

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

예제 코드

  • PlanetKit을 초기화할 때 로그 레벨과 로그 사용 방식을 지정할 수 있습니다.

    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 오디오 서브그룹 정보를 확인하는 API 제거

  • 사용되지 않던 API를 제거했습니다.
  • 오디오 변경에 대한 서브그룹 정보는 IConferenceEvent::OnMyAudioDescriptionUpdated() 이벤트로 확인할 수 있습니다.

API 변경

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

Breaking change 통화 시작 시 메시지를 주고받기 위한 API 변경

  • SCallInitData 구조체를 제거하고 CallStartMessage 클래스를 추가했습니다.
  • SCallInitData::data[PLNK_CALL_INIT_DATA_BUFFER_SIZE]의 길이를 200 바이트로 제한하고 항상 null 문자열로 끝내기 위해 구조체에서 클래스 형태로 변경해 API 호출 시 문자열을 자동으로 체크할 수 있게 변경했습니다.

API 변경

변경
  • SCallInitData struct → CallStartMessage class 1-to-1 call

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

    이전 버전PlanetKit 5.5
    SCallInitData sCalleeInitDataCallStartMessagePtr GetPeerStartMessage()
  • SCallVerifiedParam struct → CallVerifiedParam class 1-to-1 call

    이전 버전PlanetKit 5.5
    SCallInitData sCalleeInitDataCallStartMessagePtr GetPeerStartMessage()

예제 코드

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 데이터 세션 API 기능 변경

  • 데이터 세션에 대한 실패 정보를 구체화했습니다.
  • 데이터 세션 API의 이름을 보다 구체적인 의미가 담긴 이름으로 변경했습니다.
  • 데이터 세션 스트림 ID 범위의 사양을 기존 100–1000에서 100–999로 변경했습니다.

API 변경

변경
  • PlanetKitCall class 1-to-1 call

    이전 버전PlanetKit 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

    이전 버전PlanetKit 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

추가
  • 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)
삭제
  • IDataSessionExceptionHandler class

예제 코드

  1. 데이터 세션 수신 시 사용할 클래스 인스턴스를 미리 준비하세요.

    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. 상대방이 아웃바운드 데이터 세션을 만들고 OutboundDataSession::Send()를 이용해 데이터를 전송하면 ICallEvent::OnDataSessionIncoming() 또는 IConferenceEvent::OnDataSessionIncoming() 이벤트가 발생합니다.

    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. 이미 생성된 인바운드 데이터 세션이 있는지 검색하고, 없다면 새로운 인바운드 데이터 세션을 만들 수 있습니다.

    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. PlanetKitCall::MakeInboundDataSession()이 성공하면 IInboundDataSessionHandler::OnSuccess()가 호출되고, 이후 IInboundDataSessionHandler::OnReceive()를 통해 데이터를 수신할 수 있습니다. 데이터 수신 중 오류가 발생하면 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 서버 티켓 ID(stid)의 이름을 앱 서버 데이터로 변경

  • 이름을 좀 더 명확하게 하기 위해 stid에서 AppServerData로 변경합니다.
  • 앱 서버 데이터 크기의 최댓값을 256바이트에서 4096바이트로 변경했습니다.

API 변경

변경
  • ConnectParam class → MakeCallParam class 1-to-1 call

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

    이전 버전PlanetKit 5.5
    void SetStid(const char *szStid)void SetAppServerData(const WString& strAppServerData)
    const char* GetStid()const WString& GetAppServerData()

Breaking change 짧은 데이터 전송 기능 변경

  • PlanetKitConference::SendShortData()를 여러 대상으로 전송할 수 있는 기능을 제거하고, 단일 대상으로만 호출할 수 있도록 변경했습니다.
    • PlanetKitConference::SendShortDataToAllPeers()를 이용해 전체 참여자에게 데이터를 전송할 수 있습니다.
  • PlanetKitCall::SendShortData()PlanetKitConference::SendShortData()에서 전송할 수 있는 데이터 크기를 변경했습니다.
    • 전송할 수 있는 총 데이터 크기는, nSize파라미터는 최대 100 바이트, pData파라미터는 최대 800 바이트입니다.
    • 제한 길이를 초과할 경우 전송에 실패합니다.

API 변경

변경
  • PlanetKitCall class 1-to-1 call

    이전 버전PlanetKit 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

    이전 버전PlanetKit 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)
추가
  • bool SendShortDataToAllPeers(const WString& strType, void* pData, unsigned int nSize, void* pUserData = nullptr, ResultCallback pCallback = nullptr)

Breaking change ConferenceParamSetDisableAutoDisconnectOnBadNetwork() 제거

  • PlanetKit 5.5부터 네트워크 상태 변경을 알리는 콜백이 항상 호출됩니다. 이에 따라 SetDisableAutoDisconnectOnBadNetwork()를 제거했습니다.

API 변경

변경
  • IConferenceEvent class Group call

    이전 버전PlanetKit 5.5
    void OnBadNetworkDetected(PlanetKitConferencePtr pPlanetKitConference, int nWillDisconnectAfterSec)void OnNetworkUnavailable(PlanetKitConferencePtr pPlanetKitConference, int nWillDisconnectAfterSec)
    void OnBadNetworkResolved(PlanetKitConferencePtr pPlanetKitConference)void OnNetworkReavailable(PlanetKitConferencePtr pPlanetKitConference)
삭제
  • ConferenceJoinParam class Group call
    • void SetDisableAutoDisconnectOnBadNetwork(bool bDisable)

Breaking change 카메라 장치 관리 API 개선

  • 비디오 캡처 처리 과정을 간소화하기 위해 카메라 장치 관리 API를 개편했습니다.
  • Planet Cloud로 데이터를 보낼 때에만 카메라가 켜지도록 카메라 장치 관리 API를 개선했습니다.
  • 이제 영상 통화에서 카메라의 초기 상태를 제어할 수 있습니다.
    • 1대1 통화: EInitialMyVideoState 유형의 속성 또는 파라미터가 MakeCallParam, PlanetKitCall::AcceptCall(), PlanetKitCall::EnableVideo()에 추가되어 영상 통화를 시작하거나 영상 통화로 전환할 때 카메라 상태를 제어할 수 있습니다.
    • 그룹 통화: EInitialMyVideoState 유형의 속성 또는 파라미터가 ConferenceParamPlanetKitConference::EnableVideo()에 추가되어 영상 통화를 시작하거나 영상 통화로 전환할 때 카메라 상태를 제어할 수 있습니다.

API 변경

변경
  • PlanetKitCall class 1-to-1 call

    이전 버전PlanetKit 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

    이전 버전PlanetKit 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)
추가
  • 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()
삭제
  • VideoCaptureManager class 1-to-1 callGroup call
  • VideoCapture class 1-to-1 callGroup call

예제 코드

  • 새로 추가된 CameraController::StartPreview(WindowHandle)CameraController::StartPreview(IVideoReceiver*)를 사용하여 로컬 사용자의 카메라에서 전송되는 비디오를 미리 볼 수 있습니다.

    • 다음은 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;
      }
  • 비디오를 직접 처리하려면 IVideoReceiver를 상속하는 비디오 수신 모듈(video receiver)을 구현하고 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;
    }
  • 1대1 통화 또는 그룹 통화에 연결한 후 로컬 사용자의 비디오를 화면에 렌더링하려면 AddMyVideoView(WindowHandle) 또는 AddMyVideoView(IVideoReceiver*)를 사용하세요.

  • EnableVideo()DisableVideo()가 호출되면 카메라가 자동으로 켜지고 꺼집니다.

  • EnableVideo()를 사용하여 영상 통화로 전환한 후 AddMyVideoView()를 사용하여 렌더링을 위한 뷰를 등록하면 영상이 화면에 보입니다.

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

    private:
    PlanetKit::PlanetKitCallPtr m_pCall;
    HWND m_hMyView;
    }
  • 4.4 버전에서 카메라를 켜고 끄는 기능과 관련해 마이그레이션할 때에는 아래 예제 코드를 참고하세요.

    • VideoCaptureManager, VideoCapturer 클래스를 제거하고 카메라 장치를 제어하는 CameraController 클래스를 추가했습니다.

      • VideoCaptureManager::CreateVideoCapturer()를 이용해 장치를 생성하고 VideoCapturer::Start()VideoCapturer::Pause() 등을 직접 호출하지 않아도 됩니다.
    • CameraController::GetCapturerInfo()를 호출해 장치에 연결된 카메라 정보를 획득하고 CameraController::SelectCamera()를 호출해 사용할 카메라를 지정합니다.

      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;
      }
      }
      }
      }
    • 통화 연결 전 혹은 연결 후에도 프리뷰를 확인하고 싶다면 CameraController::StartPreview()를 이용해 카메라 영상을 확인할 수 있습니다.

    • 카메라 선택 API를 호출하지 않았다면 연결된 카메라 중 카메라 장치 목록의 첫 번째 장치가 선택됩니다.

      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;
      };
  • 4.4 이전 버전에서 화면에 영상을 렌더링하는 방식과 관련해 마이그레이션할 때에는 아래 예제 코드를 참고하세요.

    • 4.4 이전 버전에서 로컬 사용자의 비디오를 렌더링하는 과정은 다음과 같습니다.

      • 카메라 선택

        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;
        }
        }
        }
        }
      • 화면에 영상을 렌더링할 렌더링 클래스 생성

        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;
        }
      • 비디오를 켜기 위해 PlanetKitCall::EnableVideoSend() 호출


        // 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;
        }
    • 5.5 버전부터 로컬 사용자의 비디오를 렌더링하는 과정은 다음과 같습니다.

      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 화면 공유 기능 변경

  • PlanetKitManager에서 제공하는 VideoCaptureManager *GetVideoCaptureManager()를 제거하고, 화면 공유를 제어하기 위한 ScreenShareControllerPtr GetScreenShareController()를 제공합니다.
  • ScreenShareController::GetScreenShareInfos()를 통해 화면 공유 정보를 획득한 후 ScreenShareController::StartScreenShareCapture()를 호출해 화면 공유를 시작할 수 있습니다.

API 변경

추가
  • 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)
삭제
  • VideoCaptureManager class 1-to-1 callGroup call
  • VideoCapture class 1-to-1 callGroup call

예제 코드

  • 4.4 이전 버전에서는 다음과 같은 방법으로 화면 공유 기능을 사용할 수 있었습니다.

    • 렌더링을 위한 렌더 클래스 생성

      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;
      }
    • 화면 공유를 위한 화면 선택

      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;
      }
    • 화면 공유 시작

      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 sharing capturer → `PlanetKitCall` instance.
      m_pCall->SetMyScreenShareCapturer(m_screenShareCapture);

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

      // Start screen sharing.
      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 };
      }
  • 5.5 이후 버전에서는 아래와 같은 방법으로 화면 공유를 시작할 수 있습니다.

    • 새로 추가된 PlanetKitCall::AddMyScreenShareVideoView()는 로컬 사용자의 화면 공유 동영상을 렌더링할 수 있습니다.

      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;
      };
    • 원격 사용자의 화면 공유 동영상을 PlanetKitCall::AddPeerScreenShareVideoView()로 렌더링할 수 있습니다.

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

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

Breaking change 1대1 통화 종료 API를 서로 다른 파라미터를 갖는 3개의 API로 세분화

  • EndCall()을 상황에 맞춰 쓸 수 있도록 서로 다른 파라미터를 갖는 3개의 API로 세분화했습니다.

API 변경

추가
  • PlanetKitCall class 1-to-1 call
    • void EndCall()
    • void EndCall(const WString& strUserReleaseCode)
    • void EndCallWithError(const WString& strUserReleaseCode)
삭제
  • PlanetKitCall class 1-to-1 call
    • bool EndCall(EDisconnectReason eCallEndReason)

Spec change 클라우드 서버에서 전달받은 데이터를 확인할 수 있는 클래스 추가

  • 클라우드 서버에서 전달받은 문자열 데이터를 해석해 정보를 확인할 수 있는 CCParam 클래스를 추가했습니다.

API 변경

추가
  • 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)

예제 코드

  • 클라우드 서버에서 획득한 문자열을 PlanetKitManager::CreateCCParam() API를 호출할 때 파라미터로 사용하세요.

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

    PlanetKit::CCparamPtr ccParam = planetKitManager->CreateCCParam(ccParam);
    }
    };
  • 획득한 CCParam 클래스 인스턴스를 이용해 송신자의 ID, 서비스 ID, 통화 미디어 타입을 확인할 수 있습니다.

    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;
    }
    };
  • CCParamVerifyCallParam::Create()을 이용해 VerifyCallParam 클래스 인스턴스 생성에 활용할 수 있습니다.

    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 표시 이름에 제한 추가

  • ConferenceParamSetDisplayName()으로 설정되는 표시 이름은 이제 UTF-8 변환 이후 null 종료 문자를 포함하여 128바이트로 제한됩니다.
  • 문자열에서 최대 크기를 초과하는 뒷부분은 버려집니다.

Spec change 카메라 비디오 및 화면 공유 비디오의 미러 모드 API 변경

  • 5.5 버전부터 로컬 사용자의 동영상은 API 호출 없이 자동으로 미러링됩니다.
  • 로컬 사용자의 영상을 좌우 반전하려면 CameraController::GetRender()를 이용해 등록된 VideoRender를 획득해 영상을 반전하면 됩니다.
  • VideoRender에서 설정할 수 있는 EVideoMirrorType 열거형을 추가했습니다.
    • 이 열거형에는 PLNK_MIRROR_TYPE_AUTO, PLNK_MIRROR_TYPE_MIRROREDPLNK_MIRROR_TYPE_UNMIRRORED 값이 포함됩니다.
      • PLNK_MIRROR_TYPE_AUTO 상태는 로컬 사용자의 영상을 렌더링할 때는 자동으로 PLNK_MIRROR_TYPE_MIRRORED를 선택하고, 원격 사용자의 영상을 렌더링할 때는 자동으로 PLNK_MIRROR_TYPE_UNMIRRORED를 선택합니다.

API 변경

추가
  • 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()

예제 코드

  • 렌더링 중 등록된 VideoRender 클래스를 획득해 미러 모드를 지정할 수 있습니다.

    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 카메라 비디오 화면 회전 API 추가

  • CameraInfo 클래스 인스턴스에 화면 회전 각도를 지정할 수 있습니다.
    • CameraInfo에 지정된 회전 각도는 상대방에게 전송되는 영상에도 적용됩니다.
    • 내 화면에서만 영상을 회전하고 싶다면 VideoRender를 획득해 회전할 수 있습니다.

API 변경

추가
  • 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 볼륨 변경을 이벤트로 제공하는 기능 추가

  • 이전에는 사용자가 볼륨값을 확인하기 위해 폴링 방식으로 주기적으로 관련 API를 호출해야 했지만, 이제 그럴 필요 없도록 볼륨 변경을 이벤트로 제공하는 이벤트 콜백 API를 추가했습니다.
    • 이제 볼륨값이 변경될 때마다 등록해 둔 이벤트가 호출됩니다.
    • 이벤트 발생 주기를 설정하지 않을 경우 이벤트는 500ms마다 발생합니다.

API 변경

추가
  • 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 로컬 사용자의 미디어 상태 변경을 구독하는 기능 추가

  • 통화에서 로컬 사용자의 미디어 상태 변경을 구독할 수 있는 클래스룰 추가했습니다.

API 변경

추가
  • 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()

예제 코드

  • IMyMediaStatusEvent 클래스를 상속받은 이벤트 리스너를 만듭니다.

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

    // ...
    };
  • MyMediaStatusIMyMediaStatusEvent 인스턴스를 관리할 멤버 변수를 만듭니다.

    class YourApplication {
    private :
    PlanetKit::MyMediaStatusPtr m_pMyMediaStatus;
    YourApplicationMyMediaStatusListener m_cMyListener;
    }
  • PlanetManager::JoinConference()를 이용해 그룹 통화에 접속한 후 MyMediaStatus 인스턴스를 획득하고 이벤트 리스너를 등록합니다.

    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);
    }
  • 그룹 통화에서 로컬 사용자의 미디어 상태가 변경되면 IMyMediaStatusEvent를 상속하여 구현한 콜백 함수들이 호출됩니다.

Enhancement 화면 공유 시 비디오 공유 모드 추가

  • PlanetKitCallPlanetKitConference 클래스에 화면 공유 시 비디오 공유 모드를 설정할 수 있는 API를 추가했습니다.
  • 화면 공유를 캡처할 때 비디오 공유 모드를 설정하면 전송 프레임 레이트를 5 FPS에서 10 FPS로 변경합니다.

API 변경

추가
  • 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()

예제 코드

  • 1대1 통화 또는 그룹 통화 접속 후 ICallEvent::OnConnected() 또는 IConferenceEvent::OnConnected() 콜백 API가 호출됩니다.

  • 호출 시 제공되는 파라미터 CallConnectedParamConferenceConnectedParam에서 IsSupportVideoShareMode() API를 이용해 비디오 공유 모드를 사용할 수 있는 상태인지 확인할 수 있습니다.

    void YourApplicationConferenceEventListener::OnConnected(PlanetKit::PlanetKitConferencePtr pPlanetKitConference, PlanetKit::ConferenceConnectedParamPtr pParam) {
    if(pConnectedParam->IsSupportVideoShareMode() == true) {
    // You can set video share mode flag on this call.
    }
    }
  • IsSupportVideoShareMode()의 결과값이 true일 경우 PlanetKitCall 또는 PlanetKitConference에서 제공하는 SetMyScreenShareVideoShareMode() API를 이용해 비디오 공유 모드 플래그를 설정할 수 있습니다.

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

    pConference->SetMyScreenShareVideoShareMode(bEnable);
    }

Enhancement AEC(Acoustic Echo Canceller) 성능 개선

  • AEC 성능을 개선했습니다.
  • API 변경 사항은 없습니다.

Enhancement 미러 모드 동작 방식 변경

  • 미러 모드가 적용되면 내 화면에서만 반전되고 다른 참여자에게는 반전되지 않은 상태로 보이도록 변경했습니다.

Enhancement 화면 공유 정보를 통계로 확인할 수 있는 기능 추가

  • 통계 정보를 획득할 수 있는 API를 추가했습니다.

API 변경

추가
  • 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 통화 시작 실패 코드 추가

  • 통화 시작 실패에 대한 코드를 추가했습니다.

API 변경

추가
  • EStartFailReason enum 1-to-1 callGroup call
    • PLNK_START_FAIL_REASON_TOO_LONG_APP_SERVER_DATA
    • PLNK_START_FAIL_REASON_NOT_INITIALIZED

Enhancement 오디오 우선순위를 정하는 API 제거

  • 사용되지 않던 PlanetKitConference::AudioSendSetHighPriority() API를 제거했습니다.

API 변경

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

Enhancement 통화 종료 코드 추가 및 제거

  • 불필요하거나 중복된 통화 종료 코드를 삭제하고 새로운 통화 종료 코드를 추가했습니다.
    • 시스템 종료 및 로그아웃과 관련된 통화 종료 이유를 추가했습니다.
      • 시스템 종료: PLNK_DISCONNECT_REASON_SYSTEM_DESTROY
      • 절전모드 진입: PLNK_DISCONNECT_REASON_SYSTEM_SLEEP
      • 로그아웃: PLNK_DISCONNECT_REASON_SYSTEM_LOGOFF
    • Planet Cloud 서버가 앱 서버 데이터를 앱 서버에 전달하지 못하는 경우에 대한 통화 종료 이유를 추가했습니다.
      • 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
      • 이 통화 종료 이유는 사용자의 요청이나 시스템 비활성화로 인해 화면이 잠겼을 때 데스크톱 시스템에서만 발생합니다. 상대방이 데스크톱을 사용 중이고 상대방의 화면이 잠기는 경우 통화가 종료되며 이벤트를 통해 이 이유를 전달받습니다.

API 변경

추가
  • 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
삭제
  • 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 전체 화면 및 특정 윈도의 스냅숏 이미지를 획득하는 기능 추가

  • 전체 화면 및 특정 윈도의 스냅숏 이미지를 획득하는 API를 추가했습니다.

API 변경

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

Enhancement 클라우드 레코딩 기능 추가

  • 1대1 통화를 레코딩하는 기능을 추가했습니다.
  • 사용하기를 원하는 경우 PlanetKit 팀에 문의하세요.

API 변경

추가
  • 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 비디오 소스가 입력되지 않을 때 발생하는 이벤트 추가

  • 일정 기간 동안 비디오 소스가 입력되지 않는다면 이벤트가 발생합니다.

API 변경

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

Enhancement 화면 공유 종료 이벤트 추가

  • 로컬 사용자가 화면 공유 중 Hold()를 호출할 경우 화면 공유 기능을 자동으로 중단합니다.

API 변경

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

Enhancement 통화 종료 이벤트 발생 시 종료 요청자를 확인할 수 있는 코드 추가

  • 통화 종료 시 종료 요청자를 확인할 수 있는 코드를 추가했습니다.

API 변경

추가
  • 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 1대1 통화를 위한 오디오 리시버 API 추가

  • 로컬 사용자의 오디오 데이터를 수신하기 위한 인터페이스와 피어의 오디오 데이터를 수신하기 위한 인터페이스를 추가했습니다.

API 변경

추가
  • 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)

예제 코드

  1. ICallAudioReceiver 클래스를 상속받아 데이터를 수신할 클래스를 구현하세요.

    class YourCallAudioReceiver : public PlanetKit::ICallAudioReceiver {
    void OnAudio(const PlanetKit::SAudioData * pAudioData) override {
    ...
    }
    };
  2. 통화 연결 후 PlanetKitCall::RegisterMyAudioReceiver()을 이용해 구현한 오디오 리시버 클래스를 등록하세요.

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

    private:
    PlanetKit::PlanetKitCallPtr m_pCall;
    YourCallAudioReceiver m_myAudioReceiver;
    }
  3. 등록이 완료되면 사용자의 오디오 데이터가 발생할 때마다 ICallAudioReceiver::OnAudio() 이벤트가 발생하며, 파라미터로 전달된 SAudioData를 이용해 오디오 데이터를 확인할 수 있습니다.

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

Enhancement 통화 상태에 관계없이 통화 종료음을 재생하도록 하는 설정 추가

  • 통화 상태와 관계없이 통화 종료음을 재생하는 설정을 추가했습니다.

API 변경

추가
  • 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 기본 인증서를 사용할 수 없는 경우 Windows CA 인증서를 사용하도록 개선

  • auth\\cacert.pem 인증서가 있는 경우 해당 인증서를 사용합니다.
  • 위 인증서가 없는 경우 Windows CA(Certificate Authority) 인증서를 사용합니다.

API 변경 목록

변경

  • ICallEvent class 1-to-1 call

    이전 버전PlanetKit 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

    이전 버전PlanetKit 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

    이전 버전PlanetKit 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

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

    이전 버전PlanetKit 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

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

    이전 버전PlanetKit 5.5
    SCallInitData sCalleeInitDataCallStartMessagePtr GetPeerStartMessage()
    bool bVideoSendHWCodecEnabledbool IsVideoSendHardwareCodecEnabled()
  • SCallVerifiedParam struct → CallVerifiedParam class 1-to-1 call

    이전 버전PlanetKit 5.5
    SCallInitData sCalleeInitDataCallStartMessagePtr GetPeerStartMessage()
  • SCallDisconnectedParam struct → CallDisconnectedParam class 1-to-1 call

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

    이전 버전PlanetKit 5.5
    bool bVideoSendHWCodecEnabledbool IsVideoSendHardwareCodecEnabled()
  • SConferenceDisconnectedParam struct → ConferenceDisconnectedParam class Group call

    이전 버전PlanetKit 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

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

    이전 버전PlanetKit 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

    이전 버전PlanetKit 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

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

    이전 버전PlanetKit 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

    이전 버전PlanetKit 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

    이전 버전PlanetKit 5.5
    const char* PeerId()UserIdPtr GetPeerID()
    const char* ServiceId()UserIdPtr GetPeerID()
  • ConferenceParam class Group call

    이전 버전PlanetKit 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

    이전 버전PlanetKit 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

    이전 버전PlanetKit 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

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

    이전 버전PlanetKit 5.5
    const char *GetSubGroupName()const WStringOptional& GetSubgroupName()
  • SubGroupManager class Group call

    이전 버전PlanetKit 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

    이전 버전PlanetKit 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

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

    이전 버전PlanetKit 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

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

    이전 버전PlanetKit 5.5
    SCallInitData sCalleeInitDataCallStartMessagePtr GetPeerStartMessage()
  • ConnectParam class → MakeCallParam class 1-to-1 call

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

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

    이전 버전PlanetKit 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

추가

  • 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)

삭제

  • 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)