PlanetKit 4.4에서 5.5로 마이그레이션하기
PlanetKit 4.4에서 PlanetKit 5.5로 마이그레이션하기 위한 절차와 고려 사항을 상세히 설명합니다.
마이그레이션
Breaking change 메모리 관리를 위한 신규 클래스 추가
- PlanetKit에서 제공하는 포인터형 변수의 생성 주기를 관리하기 위해 메모리 관리 클래스들을 추가했습니다.
AutoPtr,Optional,Array를 추가했습니다.- 포인터형 변수는
AutoPtr을 사용하도록 변경했습니다. - 명시적으로
nullptr을 제공하던 API는Optional을 사용하도록 변경했습니다. - 배열 변수는 파라미터의 크기와 포인터로 제공되지 않고
Array로 제공하도록 변경했습니다.
- 포인터형 변수는
API 변경
변경
-
ICallEventclass 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) -
IConferenceEventclass 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) -
ConferencePeerUpdateParamclass 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() -
ConferenceVideoUpdatedParamclass Group call이전 버전 PlanetKit 5.5 PeerVideoStatus* At(size_t nIdx)const PeerVideoStatusArray& GetPeerVideoStatus()SubGroup* GetSubGroup()SubgroupPtr GetSubgroup() -
ConferenceSubgroupUpdatePeerclass Group call이전 버전 PlanetKit 5.5 ConferencePeerInfo* GetPeerInfo() constPeerPtr GetPeer() constconst CommonStringArray* GetSubscribedSubgroup() constconst WStringArray& GetSubscribedSubgroupNames() constconst CommonStringArray* GetUnsubscribedSubgroup() constconst WStringArray& GetUnsubscribedSubgroup() const -
ConferenceExceptionclass Group call이전 버전 PlanetKit 5.5 ConferencePeer* GetPeer()PeerPtr GetPeer()SubGroup* GetSubGroup()SubgroupPtr GetSubgroup()const char* GetMessage()const WString& GetMessage() -
SCallConnectedParamstruct →CallConnectedParamclass 1-to-1 call이전 버전 PlanetKit 5.5 SCallInitData sCalleeInitDataCallStartMessagePtr GetPeerStartMessage()bool bVideoSendHWCodecEnabledbool IsVideoSendHardwareCodecEnabled() -
SCallVerifiedParamstruct →CallVerifiedParamclass 1-to-1 call이전 버전 PlanetKit 5.5 SCallInitData sCalleeInitDataCallStartMessagePtr GetPeerStartMessage() -
SCallDisconnectedParamstruct →CallDisconnectedParamclass 1-to-1 call이전 버전 PlanetKit 5.5 bool bByRemotebool IsDisconnectedByRemote()EDisconnectReason eReasonEDisconnectReason GetReason()const char* szUserRelCodeconst WString& GetUserReleaseCode() -
SConferenceConnectedParamstruct →ConferenceConnectedParamclass Group call이전 버전 PlanetKit 5.5 bool bVideoSendHWCodecEnabledbool IsVideoSendHardwareCodecEnabled() -
SConferenceDisconnectedParamstruct →ConferenceDisconnectedParamclass Group call이전 버전 PlanetKit 5.5 bool bByRemotebool IsDisconnectedByRemote()EDisconnectReason eEndReasonEDisconnectReason GetReason()const char* szUserRelCodeconst WString& GetUserReleaseCode() -
ConferenceExceptionMessageclass →ConferenceExceptionArrayclass Group call -
ConferencePeerScreenSharingUpdateInfoclass →ConferencePeerScreenShareUpdatedParamclass Group call이전 버전 PlanetKit 5.5 ConferencePeer* GetPeer()PeerPtr GetPeer()SubGroup* GetSubGroup()SubgroupPtr GetSubgroup()EScreenSharingState ScreenSharingState()EScreenShareState ScreenShareState()
추가
AutoPtrclass 1-to-1 callGroup callbool 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->()
Optionalclass 1-to-1 callGroup callbool HasValue() constconst T* operator->() constT* operator->()const T& operator*() constT& operator*()Optional<T>& operator=(const Optional<T>& src)Optional<T>& operator=(const T& src)T& Value()const T& Value() const
Arrayclass 1-to-1 callGroup callconst T* Buffer() constT* Buffer()void Resize(size_t size)void SetAt(size_t idx, const T& rhs)size_t Size() constT& At(size_t idx) constT& operator[](size_t idx) const
CallConnectedParamclass 1-to-1 callCallStartMessagePtr GetPeerStartMessage()bool ShouldFinishPreparation()bool IsInPreparation()bool IsVideoSendHardwareCodecEnabled()bool IsSupportDataSession()
CallVerifiedParamclass 1-to-1 callCallStartMessagePtr GetPeerStartMessage()bool IsPeerUsePreparation()
CallDisconnectedParamclass 1-to-1 callbool IsDisconnectedByRemote()EDisconnectReason GetReason()const WString& GetUserReleaseCode()
ConferenceDisconnectedParamclass Group callbool IsDisconnectedByRemote()EDisconnectReason GetReason()const WString& GetUserReleaseCode()
ConferencePeerScreenShareUpdatedParamclass Group callPeerPtr GetPeer()SubgroupPtr GetSubgroup()EScreenShareState ScreenShareState()
삭제
SCallConnectedParamstruct 1-to-1 callEMediaType eMediaType
ConferencePeerUpdateParamclass Group callsize_t AddedCount()size_t RemovedCount()
ConferenceVideoUpdatedParamclass Group callsize_t GetCount()
ConferenceSubGroupUpdateParamclass 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 변경
변경
-
PlanetKitCallclass 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) -
PlanetKitConferenceclass 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() -
ConferenceSubGroupUpdatePeerclass Group call이전 버전 PlanetKit 5.5 const CommonStringArray* GetSubscribedSubgroup() constconst WStringArray& GetSubscribedSubgroupNames() constconst CommonStringArray* GetUnsubscribedSubgroup() constconst WStringArray& GetUnsubscribedSubgroup() const -
ConferenceExceptionclass Group call이전 버전 PlanetKit 5.5 const char* GetMessage()const WString& GetMessage() -
IConferenceEventclass Group call이전 버전 PlanetKit 5.5 void OnDataSessionIncoming(const char* szSubgroupName, DataSessionStreamIdT nStreamId, EDataSessionType eType)void OnDataSessionIncoming(const WStringOptional& strSubgroupName, DataSessionStreamIdT nStreamId, EDataSessionType eType) -
AudioDeviceclass 1-to-1 callGroup call이전 버전 PlanetKit 5.5 bool PlayFile(const char* szPath, unsigned int unLoop)bool PlayFile(const WString& strFilePath, unsigned int unLoop) -
MakeCallParamclass 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) -
VerifyCallParamclass 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) -
CommonSetSharedContentclass 1-to-1 callGroup call이전 버전 PlanetKit 5.5 const char* PeerId()UserIdPtr GetPeerID()const char* ServiceId()UserIdPtr GetPeerID() -
ConferenceParamclass 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) -
PlanetKitManagerclass 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() -
StatisticsVideoRecvclass 1-to-1 callGroup call이전 버전 PlanetKit 5.5 const char* PeerId()UserIdPtr GetPeerID()const char* PeerServiceId()UserIdPtr GetPeerID()const char* SubgroupName()const WStringOptional& GetSubgroupName() -
StatisticsScreenShareRecvclass 1-to-1 callGroup call이전 버전 PlanetKit 5.5 const char* PeerId()UserIdPtr GetPeerID()const char* PeerServiceId()UserIdPtr GetPeerID()const char* SubgroupName()const WStringOptional& GetSubgroupName() -
SubGroupclass - Group call이전 버전 PlanetKit 5.5 const char *GetSubGroupName()const WStringOptional& GetSubgroupName() -
SubGroupManagerclass 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)
추가
WStringclass 1-to-1 callGroup calloperator const wchar_t*() constconst wchar_t* c_str() constsize_t Size() constWString& Append(const wchar_t* rhs)bool operator==(const wchar_t* rhs) constbool operator==(const WString& rhs) constbool operator!=(const WString& rhs) constconst 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
MakeCallParamclass 1-to-1 callconst WString& GetEndTonePath()void SetEndTonePath(const WString& strEndTonePath)
VerifyCallParamclass 1-to-1 callconst WString& GetEndTonePath()void SetEndTonePath(const WString& strEndTonePath)
ConferenceParamclass 1-to-1 callconst WString& GetEndTonePath()void SetEndTonePath(const WString& strEndTonePath)
삭제
MakeCallParamclass 1-to-1 callconst char* GetAPIKey()const char* GetAccessToken()
ConferenceParamclass Group callconst 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에서 제공하는MultibyteToWideCharAPI를 활용할 수 있습니다.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, ISubscribeSubgroupResultHandler 및 IUnsubscribeSubgroupResultHandler 클래스 제거
- 비동기 API 호출 결과를 콜백으로 전달하는 데 사용하던 클래스들을 제거하고 정적 함수를 추가했습니다.
IResultHandler,ISubscribeSubgroupResultHandler,IUnsubscribeSubgroupResultHandler를 제거하고ResultCallback,SubscribeResult,UnsubscribeResult로 대체합니다.
- 이제 클래스 정적 함수, C 스타일 정적 함수 또는 람다 함수를 '함수 콜백'으로 사용할 수 있습니다.
API 변경
변경
-
IResultHandlerclass →using ResultCallback = void(*)(void* pUserData, bool bSuccess)1-to-1 callGroup call -
ISubscribeSubgroupResultHandlerclass →using SubscribeResult = void(*)(SubgroupPtr pSubgroup, bool bSuccess, ESubgroupSubscribeFailReason eReason, void* pUserData)Group call -
IUnsubscribeSubgroupResultHandlerclass →using UnsubscribeResult = void(*)(SubgroupPtr pSubgroup, bool bSuccess, ESubgroupUnsubscribeFailReason eReason, void* pUserData)Group call -
PlanetKitCallclass 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) -
PlanetKitConferenceclass 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) -
SubgroupManagerclass 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 변경
변경
-
PeerInfoclass →Peerclass Group call이전 버전 PlanetKit 5.5 const char* PeerId()UserIdPtr GetUserID()const char* ServiceId()UserIdPtr GetUserID()
추가
Peerclass Group callEMediaType 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()
PeerControlclass Group callPeerPtr 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)
IPeerControlEventclass Group callvoid 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 변경
삭제
EConferenceRoomTypeenum Group callConferenceParamclass Group callEConferenceRoomType ConferenceRoomType()void SetConferenceRoomType(EConferenceRoomType eRoomType)
EDisconnectReasonenum 1-to-1 callGroup callPLNK_DISCONNECT_REASON_WRONG_ROOM_ATTR
Breaking change 로그 설정을 위한 옵션 변경
SManagerInitParam구조체를 삭제하고Configuration클래스를 추가했습니다.Configuration클래스를 이용해 로그 사용 방식을 설정할 수 있습니다.
API 변경
변경
-
SManagerInitParamstruct →Configurationclass 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()
추가
Configurationclass 1-to-1 callGroup callConfigurationPtr Create(const WString& strBasePath, const WString& strDatabasePath)void SetLogSizeLimit(ELogSizeLimit eLogSizeLimit)ELogSizeLimit GetLogSizeLimit()
삭제
SManagerInitParamstructbool bEnableStdOutLogbool 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 변경
삭제
SubGroupManagerclass Group callconst char *GetMyAudioSubGroupName()const char *GetMyAudioTaggedSubGroupName()
Breaking change 통화 시작 시 메시지를 주고받기 위한 API 변경
SCallInitData구조체를 제거하고CallStartMessage클래스를 추가했습니다.SCallInitData::data[PLNK_CALL_INIT_DATA_BUFFER_SIZE]의 길이를 200 바이트로 제한하고 항상 null 문자열로 끝내기 위해 구조체에서 클래스 형태로 변경해 API 호출 시 문자열을 자동으로 체크할 수 있게 변경했습니다.
API 변경
변경
-
SCallInitDatastruct →CallStartMessageclass 1-to-1 call이전 버전 PlanetKit 5.5 bool bPreperationbool IsInPreparation()char datastatic CallStartMessagePtr Create(const WString& strMessage)const WStringOptional& GetMessage() -
SCallConnectedParamstruct →CallConnectedParamclass 1-to-1 call이전 버전 PlanetKit 5.5 SCallInitData sCalleeInitDataCallStartMessagePtr GetPeerStartMessage() -
SCallVerifiedParamstruct →CallVerifiedParamclass 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 변경
변경
-
PlanetKitCallclass 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) -
SubGroupclass 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) -
IDataSessionHanderclass →IInboundDataSessionHandler,IOutboundDataSessionHandlerclass 1-to-1 callGroup call
추가
EDataSessionFailReasonenum 1-to-1 callGroup callPLNK_DATA_SESS_FAIL_REASON_NONEPLNK_DATA_SESS_FAIL_REASON_INTERNALPLNK_DATA_SESS_FAIL_REASON_UNSUPPORTEDPLNK_DATA_SESS_FAIL_REASON_NOT_INCOMINGPLNK_DATA_SESS_FAIL_REASON_ALREADY_EXISTPLNK_DATA_SESS_FAIL_REASON_INVALID_IDPLNK_DATA_SESS_FAIL_REASON_INVALID_TYPE
PlanetKitCallclass 1-to-1 callbool GetInboundDataSession(int nStreamId, InboundDataSessionPtr* pResult)bool GetOutboundDataSession(int nStreamId, OutboundDataSessionPtr* pResult)
Subgroupclass Group callbool GetInboundDataSession(int nStreamId, InboundDataSessionPtr* pResult)bool GetOutboundDataSession(int nStreamId, OutboundDataSessionPtr* pResult)
ICallEventclass 1-to-1 callvoid OnDataSessionIncoming(DataSessionStreamIdT nStreamId, EDataSessionType eType)
IConferenceEventclass Group callvoid OnDataSessionIncoming(const WStringOptional& strSubgroupName, DataSessionStreamIdT nStreamId, EDataSessionType eType)
IInboundDataSessionHandlerclass 1-to-1 callGroup callvoid OnReceive(DataSessionStreamIdT nStreamId, DataSessionFramePtr pFrame)void OnSuccess(InboundDataSessionPtr pInboundDataInterface, void* pUserData)void OnError(void* pUserData, EDataSessionFailReason eFailReason)void OnClosed(void* pUserData, EDataSessionClosedReason eClosedReason)
IOutboundDataSessionHandlerclass 1-to-1 callGroup callvoid 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)
InboundDataSessionclass 1-to-1 callGroup callDataSessionStreamIdT GetStreamId()IInboundDataSessionHandler* GetReceiver()
OutboundDataSessionclass 1-to-1 callGroup callbool 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)
삭제
IDataSessionExceptionHandlerclass
예제 코드
-
데이터 세션 수신 시 사용할 클래스 인스턴스를 미리 준비하세요.
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 {
...
};
} -
상대방이 아웃바운드 데이터 세션을 만들고
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) {
...
}
} -
이미 생성된 인바운드 데이터 세션이 있는지 검색하고, 없다면 새로운 인바운드 데이터 세션을 만들 수 있습니다.
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;
} -
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 변경
변경
-
ConnectParamclass →MakeCallParamclass 1-to-1 call이전 버전 PlanetKit 5.5 void SetStid(const char *szStid)void SetAppServerData(const WString& strAppServerData)const char* GetStid()const WString& GetAppServerData() -
ConnectParamclass →ConferenceParamclass 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 변경
변경
-
PlanetKitCallclass 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) -
PlanetKitConferenceclass 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 ConferenceParam의 SetDisableAutoDisconnectOnBadNetwork() 제거
- PlanetKit 5.5부터 네트워크 상태 변경을 알리는 콜백이 항상 호출됩니다. 이에 따라
SetDisableAutoDisconnectOnBadNetwork()를 제거했습니다.
API 변경
변경
-
IConferenceEventclass 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)
삭제
ConferenceJoinParamclass Group callvoid SetDisableAutoDisconnectOnBadNetwork(bool bDisable)
Breaking change 카메라 장치 관리 API 개선
- 비디오 캡처 처리 과정을 간소화하기 위해 카메라 장치 관리 API를 개편했습니다.
- Planet Cloud로 데이터를 보낼 때에만 카메라가 켜지도록 카메라 장치 관리 API를 개선했습니다.
- 이제 영상 통화에서 카메라의 초기 상태를 제어할 수 있습니다.
- 1대1 통화:
EInitialMyVideoState유형의 속성 또는 파라미터가MakeCallParam,PlanetKitCall::AcceptCall(),PlanetKitCall::EnableVideo()에 추가되어 영상 통화를 시작하거나 영상 통화로 전환할 때 카메라 상태를 제어할 수 있습니다. - 그룹 통화:
EInitialMyVideoState유형의 속성 또는 파라미터가ConferenceParam및PlanetKitConference::EnableVideo()에 추가되어 영상 통화를 시작하거나 영상 통화로 전환할 때 카메라 상태를 제어할 수 있습니다.
- 1대1 통화:
API 변경
변경
-
PlanetKitCallclass 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) -
PlanetKitConferenceclass 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)
추가
EVideoControlResultenum 1-to-1 callGroup callEVideoControlResult_PreviewAlreadyExistEVideoControlResult_CreateRenderFailEVideoControlResult_CameraIsAlreadyInUseByAnotherApplicationEVideoControlResult_PreviewHandleIsInvalidEVideoControlResult_PreviewReceiverIsInvalid
EInitialMyVideoStateenum 1-to-1 callGroup callPLNK_INITIAL_MY_VIDEO_STATE_RESUMEPLNK_INITIAL_MY_VIDEO_STATE_PAUSE
ECameraControlResultenum 1-to-1 callGroup callPLNK_CAMERA_CONTROL_RESULT_NONEPLNK_CAMERA_CONTROL_RESULT_FAILED_TO_CREATE_CAMERA_DEVICEPLNK_CAMERA_CONTROL_RESULT_SELECTED_CAMERA_IS_REMOVEDPLNK_CAMERA_CONTROL_RESULT_NO_CAMERA_SELECTED
CameraControllerclass 1-to-1 callGroup callvoid 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)
ConferenceParamclass Group callEInitialMyVideoState GetInitialMyVideoState()void SetInitialMyVideoState(EInitialMyVideoState eInitialMyVideoState)
MakeCallParamclass 1-to-1 callEInitialMyVideoState GetInitialMyVideoState()void SetInitialMyVideoState(EInitialMyVideoState eInitialMyVideoState)
PlanetKitCallclass 1-to-1 callvoid RemoveAllMyVideoViewAndReceiver()void RemoveAllPeerVideoViewAndReceiver()
PlanetKitConferenceclass Group callvoid RemoveAllMyVideoViewAndReceiver()bool AddPeerVideoReceiver(UserIdPtr pPeerID, IVideoReceiver* pReceiver)bool RemovePeerVideoReceiver(IVideoReceiver* pReceiver)void RemoveAllPeerVideoViewAndReceiver()
삭제
VideoCaptureManagerclass 1-to-1 callGroup callVideoCaptureclass 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 변경
추가
PlanetKitCallclass 1-to-1 callbool 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()
PlanetKitConferenceclass Group callbool 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()
ScreenShareControllerclass 1-to-1 callGroup callbool 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)
삭제
VideoCaptureManagerclass 1-to-1 callGroup callVideoCaptureclass 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 변경
추가
PlanetKitCallclass 1-to-1 callvoid EndCall()void EndCall(const WString& strUserReleaseCode)void EndCallWithError(const WString& strUserReleaseCode)
삭제
PlanetKitCallclass 1-to-1 callbool EndCall(EDisconnectReason eCallEndReason)
Spec change 클라우드 서버에서 전달받은 데이터를 확인할 수 있는 클래스 추가
- 클라우드 서버에서 전달받은 문자열 데이터를 해석해 정보를 확인할 수 있는
CCParam클래스를 추가했습니다.
API 변경
추가
CCParamclass 1-to-1 callconst WString& GetPeerID()const WString& GetPeerServiceID()EMediaType GetMediaType()
PlanetKitManagerclass 1-to-1 callCCParamPtr 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;
}
}; -
CCParam을VerifyCallParam::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 표시 이름에 제한 추가
ConferenceParam의SetDisplayName()으로 설정되는 표시 이름은 이제 UTF-8 변환 이후 null 종료 문자를 포함하여 128바이트로 제한됩니다.- 문자열에서 최대 크기를 초과하는 뒷부분은 버려집니다.
Spec change 카메라 비디오 및 화면 공유 비디오의 미러 모드 API 변경
- 5.5 버전부터 로컬 사용자의 동영상은 API 호출 없이 자동으로 미러링됩니다.
- 로컬 사용자의 영상을 좌우 반전하려면
CameraController::GetRender()를 이용해 등록된VideoRender를 획득해 영상을 반전하면 됩니다. VideoRender에서 설정할 수 있는EVideoMirrorType열거형을 추가했습니다.- 이 열거형에는
PLNK_MIRROR_TYPE_AUTO,PLNK_MIRROR_TYPE_MIRRORED및PLNK_MIRROR_TYPE_UNMIRRORED값이 포함됩니다.PLNK_MIRROR_TYPE_AUTO상태는 로컬 사용자의 영상을 렌더링할 때는 자동으로PLNK_MIRROR_TYPE_MIRRORED를 선택하고, 원격 사용자의 영상을 렌더링할 때는 자동으로PLNK_MIRROR_TYPE_UNMIRRORED를 선택합니다.
- 이 열거형에는
API 변경
추가
EVideoMirrorTypeenum 1-to-1 callGroup callPLNK_MIRROR_TYPE_AUTO = 0PLNK_MIRROR_TYPE_MIRRORED = 1PLNK_MIRROR_TYPE_UNMIRRORED = 2
VideoRenderclass 1-to-1 callGroup callvoid 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 변경
추가
CameraInfoclass 1-to-1 callGroup callEVideoRotation GetRotation() constvoid SetRotation(EVideoRotation eRotation)
VideoRenderclass 1-to-1 callGroup callvoid SetRotation(EVideoRotation eRotation)EVideoRotation GetRotation()
Enhancement 볼륨 변경을 이벤트로 제공하는 기능 추가
- 이전에는 사용자가 볼륨값을 확인하기 위해 폴링 방식으로 주기적으로 관련 API를 호출해야 했지만, 이제 그럴 필요 없도록 볼륨 변경을 이벤트로 제공하는 이벤트 콜백 API를 추가했습니다.
- 이제 볼륨값이 변경될 때마다 등록해 둔 이벤트가 호출됩니다.
- 이벤트 발생 주기를 설정하지 않을 경우 이벤트는 500ms마다 발생합니다.
API 변경
추가
AudioDescriptionInfostruct 1-to-1 callGroup callbool bEnableAudioDescriptionunsigned int unAudioDescriptionInterval
MakeCallParamclass 1-to-1 callvoid SetAudioDescriptionInfo(bool bUse, unsigned int unAudioDescriptionInterval)AudioDescriptionInfo GetAudioDescriptionInfo()
VerifyCallParamclass 1-to-1 callvoid SetAudioDescriptionInfo(bool bUse, unsigned int unAudioDescriptionInterval)AudioDescriptionInfo GetAudioDescriptionInfo()
ConferenceParamclass Group callvoid SetAudioDescriptionInfo(bool bUse, unsigned int unAudioDescriptionInterval)AudioDescriptionInfo GetAudioDescriptionInfo()
ICallEventclass 1-to-1 callvoid OnPeerAudioDescriptionUpdated(PlanetKitCallPtr pPlanetKitCall, unsigned char ucAverageVolumeLevel)void OnMyAudioDescriptionUpdated(PlanetKitCallPtr pPlanetKitCall, unsigned char ucAverageVolumeLevel)
IConferenceEventclass Group callvoid OnPeersAudioDescriptionUpdated(PlanetKitConferencePtr pPlanetKitConference, unsigned char ucAverageVolumeLevel, const PeerAudioDescriptionArray& arrPeer)void OnMyAudioDescriptionUpdated(PlanetKitConferencePtr pPlanetKitConference, const MyAudioDescription& sMyAudioDescription)
Enhancement 로컬 사용자의 미디어 상태 변경을 구독하는 기능 추가
- 통화에서 로컬 사용자의 미디어 상태 변경을 구독할 수 있는 클래스룰 추가했습니다.
API 변경
추가
PlanetKitCallclass 1-to-1 callMyMediaStatusPtr GetMyMediaStatus()
PlanetKitConferenceclass Group callMyMediaStatusPtr GetMyMediaStatus()
IMyMediaStatusEventclass 1-to-1 callGroup callvoid 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)
MyMediaStatusclass Group callbool 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;
// ...
}; -
MyMediaStatus와IMyMediaStatusEvent인스턴스를 관리할 멤버 변수를 만듭니다.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 화면 공유 시 비디오 공유 모드 추가
PlanetKitCall과PlanetKitConference클래스에 화면 공유 시 비디오 공유 모드를 설정할 수 있는 API를 추가했습니다.- 화면 공유를 캡처할 때 비디오 공유 모드를 설정하면 전송 프레임 레이트를 5 FPS에서 10 FPS로 변경합니다.
API 변경
추가
PlanetKitCallclass 1-to-1 callbool SetMyScreenShareVideoShareMode(bool bVideoShareMode)bool IsMyScreenShareVideoShareModeEnabled()
CallConnectedParamclass 1-to-1 callbool IsSupportVideoShareMode()
PlanetKitConferenceclass Group callbool SetMyScreenShareVideoShareMode(bool bVideoShareMode)bool IsMyScreenShareVideoShareModeEnabled()
ConferenceConnectedParamclass 1-to-1 callbool IsSupportVideoShareMode()
예제 코드
-
1대1 통화 또는 그룹 통화 접속 후
ICallEvent::OnConnected()또는IConferenceEvent::OnConnected()콜백 API가 호출됩니다. -
호출 시 제공되는 파라미터
CallConnectedParam과ConferenceConnectedParam에서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 변경
추가
StatisticsScreenShareSendclass 1-to-1 callGroup callStatisticsNetwork* Network()StatisticsVideo* Video()
StatisticsScreenShareRecvclass 1-to-1 callGroup callconst WStringOptional& GetSubgroupName()UserIdPtr GetPeerID()StatisticsNetwork* Network()StatisticsVideo* Video()
Enhancement 통화 시작 실패 코드 추가
- 통화 시작 실패에 대한 코드를 추가했습니다.
API 변경
추가
EStartFailReasonenum 1-to-1 callGroup callPLNK_START_FAIL_REASON_TOO_LONG_APP_SERVER_DATAPLNK_START_FAIL_REASON_NOT_INITIALIZED
Enhancement 오디오 우선순위를 정하는 API 제거
- 사용되지 않던
PlanetKitConference::AudioSendSetHighPriority()API를 제거했습니다.
API 변경
삭제
PlanetKitConferenceclass Group callbool 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 변경
추가
EDisconnectReasonenum 1-to-1 callGroup callPLNK_DISCONNECT_REASON_INTERNAL_ERRORPLNK_DISCONNECT_REASON_USER_ERRORPLNK_DISCONNECT_REASON_INTERNAL_KIT_ERRORPLNK_DISCONNECT_REASON_AUDIO_TX_NO_SRCPLNK_DISCONNECT_REASON_UNAVAILABLE_NETWORKPLNK_DISCONNECT_REASON_SYSTEM_DESTROYPLNK_DISCONNECT_REASON_SYSTEM_SLEEPPLNK_DISCONNECT_REASON_SYSTEM_LOGOFFPLNK_DISCONNECT_REASON_SERVICE_ACCESS_TOKEN_ERRORPLNK_DISCONNECT_REASON_APP_SERVER_DATA_ERRORPLNK_DISCONNECT_REASON_MAX_CALL_TIME_EXCEEDEDPLNK_DISCONNECT_REASON_SERVICE_TOO_MANY_REQUESTSPLNK_DISCONNECT_REASON_DESKTOP_SCREEN_LOCKED
삭제
EDisconnectReasonenum 1-to-1 callGroup callPLNK_DISCONNECT_REASON_AUDIO_TX_NO_SRC_BY_LOCALPLNK_DISCONNECT_REASON_AUDIO_TX_NO_SRC_BY_REMOTEPLNK_DISCONNECT_REASON_INTERNAL_ERROR_BY_LOCALPLNK_DISCONNECT_REASON_INTERNAL_ERROR_BY_REMOTEPLNK_DISCONNECT_REASON_USER_ERROR_BY_LOCALPLNK_DISCONNECT_REASON_USER_ERROR_BY_REMOTEPLNK_DISCONNECT_REASON_INTERNAL_KIT_ERROR_BY_LOCALPLNK_DISCONNECT_REASON_INTERNAL_KIT_ERROR_BY_REMOTEPLNK_DISCONNECT_REASON_BAD_NETWORK_IN_CONFERENCEPLNK_DISCONNECT_REASON_UNAVAILABLE_NETWORK_IN_CALLPLNK_DISCONNECT_REASON_SERVICE_APIKEY_ERROR
Enhancement 전체 화면 및 특정 윈도의 스냅숏 이미지를 획득하는 기능 추가
- 전체 화면 및 특정 윈도의 스냅숏 이미지를 획득하는 API를 추가했습니다.
API 변경
추가
ScreenShareControllerclass 1-to-1 callGroup callVideoFramePtr GetScreenShareSnapshot(ScreenShareInfoPtr pScreenShareInfo)
Enhancement 클라우드 레코딩 기능 추가
- 1대1 통화를 레코딩하는 기능을 추가했습니다.
- 사용하기를 원하는 경우 PlanetKit 팀에 문의하세요.
API 변경
추가
ERecordOnCloudDeactivateReasonenum 1-to-1 callPLNK_RECORD_ON_CLOUD_DEACTIVATE_REASON_INTERNALPLNK_RECORD_ON_CLOUD_DEACTIVATE_REASON_ACTIVATION_FAILEDPLNK_RECORD_ON_CLOUD_DEACTIVATE_REASON_MAX_RECORDING_DURATION_REACHED
RecordOnCloudclass 1-to-1 callbool IsActivated()DeactivateReasonOptional GetDeactivatedReason()
ICallEventclass 1-to-1 callvoid OnRecordOnCloudUpdated(PlanetKitCallPtr pPlanetKitCall, RecordOnCloudPtr pRecordOnCloud)
PlanetKitCallclass 1-to-1 callvoid AcceptCall(bool bPreparation, CallStartMessagePtr pCallStartMessage = CallStartMessagePtr(nullptr), bool bRecordOnCloud = false)
MakeCallParamclass 1-to-1 callvoid SetRecordOnCloud(bool bRecord)bool IsRecordOnCloud()
Enhancement 비디오 소스가 입력되지 않을 때 발생하는 이벤트 추가
- 일정 기간 동안 비디오 소스가 입력되지 않는다면 이벤트가 발생합니다.
API 변경
추가
ICallEventclass 1-to-1 callvoid OnMyVideoNoSource(PlanetKitCallPtr pPlanetKitCall)
IConferenceEventclass Group callvoid OnMyVideoNoSource(PlanetKitConferencePtr pPlanetKitConference)
Enhancement 화면 공유 종료 이벤트 추가
- 로컬 사용자가 화면 공유 중
Hold()를 호출할 경우 화면 공유 기능을 자동으로 중단합니다.
API 변경
추가
ICallEventclass 1-to-1 callvoid OnMyScreenShareStoppedByHold(PlanetKitCallPtr pPlanetKitCall)
IConferenceEventclass Group callvoid OnMyScreenShareStoppedByHold(PlanetKitConferencePtr pPlanetKitConference)
Enhancement 통화 종료 이벤트 발생 시 종료 요청자를 확인할 수 있는 코드 추가
- 통화 종료 시 종료 요청자를 확인할 수 있는 코드를 추가했습니다.
API 변경
추가
EDisconnectSourceenum 1-to-1 callGroup callPLNK_DISCONNECT_SOURCE_UNDEFINEDPLNK_DISCONNECT_SOURCE_CALLEEPLNK_DISCONNECT_SOURCE_CALLERPLNK_DISCONNECT_SOURCE_PARTICIPANTPLNK_DISCONNECT_SOURCE_CLOUD_SERVERPLNK_DISCONNECT_SOURCE_APP_SERVER
CallDisconnectedParamclass 1-to-1 callEDisconnectSource GetDisconnectSource()
ConferenceDisconnectedParamclass Group callEDisconnectSource GetDisconnectSource()
Enhancement 1대1 통화를 위한 오디오 리시버 API 추가
- 로컬 사용자의 오디오 데이터를 수신하기 위한 인터페이스와 피어의 오디오 데이터를 수신하기 위한 인터페이스를 추가했습니다.
API 변경
추가
PlanetKitCallclass 1-to-1 callbool RegisterMyAudioReceiver(ICallAudioReceiver *pReceiver)bool RegisterPeerAudioReceiver(ICallAudioReceiver *pReceiver)bool DeregisterMyAudioReceiver(ICallAudioReceiver *pReceiver)bool DeregisterPeerAudioReceiver(ICallAudioReceiver *pReceiver)ICallAudioReceiverclass 1-to-1 callvoid OnAudio(const SAudioData * pAudioData)
예제 코드
-
ICallAudioReceiver클래스를 상속받아 데이터를 수신할 클래스를 구현하세요.class YourCallAudioReceiver : public PlanetKit::ICallAudioReceiver {
void OnAudio(const PlanetKit::SAudioData * pAudioData) override {
...
}
}; -
통화 연결 후
PlanetKitCall::RegisterMyAudioReceiver()을 이용해 구현한 오디오 리시버 클래스를 등록하세요.class YourApplication {
void RegisterAudioReceiver() {
m_pCall->RegisterMyAudioReceiver(&m_myAudioReceiver);
}
private:
PlanetKit::PlanetKitCallPtr m_pCall;
YourCallAudioReceiver m_myAudioReceiver;
} -
등록이 완료되면 사용자의 오디오 데이터가 발생할 때마다
ICallAudioReceiver::OnAudio()이벤트가 발생하며, 파라미터로 전달된SAudioData를 이용해 오디오 데이터를 확인할 수 있습니다.class YourCallAudioReceiver : public PlanetKit::ICallAudioReceiver {
void OnAudio(const PlanetKit::SAudioData * pAudioData) override {
...
}
};
Enhancement 통화 상태에 관계없이 통화 종료음을 재생하도록 하는 설정 추가
- 통화 상태와 관계없이 통화 종료음을 재생하는 설정을 추가했습니다.
API 변경
추가
MakeCallParamclass 1-to-1 callvoid PlayEndtoneRegardlessOfCallState(bool bPlayEndtone)bool IsPlayEndtoneRegardlessOfCallState()
VerifyCallParamclass 1-to-1 callvoid PlayEndtoneRegardlessOfCallState(bool bPlayEndtone)bool IsPlayEndtoneRegardlessOfCallState()
ConferenceParamclass Group callvoid PlayEndtoneRegardlessOfConferenceState(bool bPlayEndtone)bool IsPlayEndtoneRegardlessOfConferenceState()
Enhancement 기본 인증서를 사용할 수 없는 경우 Windows CA 인증서를 사용하도록 개선
auth\\cacert.pem인증서가 있는 경우 해당 인증서를 사용합니다.- 위 인증서가 없는 경우 Windows CA(Certificate Authority) 인증서를 사용합니다.
API 변경 목록
변경
-
ICallEventclass 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) -
IConferenceEventclass 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) -
ConferencePeerUpdateParamclass 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() -
ConferenceVideoUpdatedParamclass Group call이전 버전 PlanetKit 5.5 PeerVideoStatus* At(size_t nIdx)const PeerVideoStatusArray& GetPeerVideoStatus()SubGroup* GetSubGroup()SubgroupPtr GetSubgroup() -
ConferenceSubgroupUpdatePeerclass Group call이전 버전 PlanetKit 5.5 ConferencePeerInfo* GetPeerInfo() constPeerPtr GetPeer() constconst CommonStringArray* GetSubscribedSubgroup() constconst WStringArray& GetSubscribedSubgroupNames() constconst CommonStringArray* GetUnsubscribedSubgroup() constconst WStringArray& GetUnsubscribedSubgroup() const -
ConferenceExceptionclass Group call이전 버전 PlanetKit 5.5 ConferencePeer* GetPeer()PeerPtr GetPeer()SubGroup* GetSubGroup()SubgroupPtr GetSubgroup()const char* GetMessage()const WString& GetMessage() -
SCallConnectedParamstruct →CallConnectedParamclass 1-to-1 call이전 버전 PlanetKit 5.5 SCallInitData sCalleeInitDataCallStartMessagePtr GetPeerStartMessage()bool bVideoSendHWCodecEnabledbool IsVideoSendHardwareCodecEnabled() -
SCallVerifiedParamstruct →CallVerifiedParamclass 1-to-1 call이전 버전 PlanetKit 5.5 SCallInitData sCalleeInitDataCallStartMessagePtr GetPeerStartMessage() -
SCallDisconnectedParamstruct →CallDisconnectedParamclass 1-to-1 call이전 버전 PlanetKit 5.5 bool bByRemotebool IsDisconnectedByRemote()EDisconnectReason eReasonEDisconnectReason GetReason()const char* szUserRelCodeconst WString& GetUserReleaseCode() -
SConferenceConnectedParamstruct →ConferenceConnectedParamclass Group call이전 버전 PlanetKit 5.5 bool bVideoSendHWCodecEnabledbool IsVideoSendHardwareCodecEnabled() -
SConferenceDisconnectedParamstruct →ConferenceDisconnectedParamclass Group call이전 버전 PlanetKit 5.5 bool bByRemotebool IsDisconnectedByRemote()EDisconnectReason eEndReasonEDisconnectReason GetReason()const char* szUserRelCodeconst WString& GetUserReleaseCode() -
ConferenceExceptionMessageclass →ConferenceExceptionArrayclass Group call -
ConferencePeerScreenSharingUpdateInfoclass →ConferencePeerScreenShareUpdatedParamclass Group call이전 버전 PlanetKit 5.5 ConferencePeer* GetPeer()PeerPtr GetPeer()SubGroup* GetSubGroup()SubgroupPtr GetSubgroup()EScreenSharingState ScreenSharingState()EScreenShareState ScreenShareState() -
PlanetKitCallclass 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) -
PlanetKitConferenceclass 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) -
AudioDeviceclass 1-to-1 callGroup call이전 버전 PlanetKit 5.5 bool PlayFile(const char* szPath, unsigned int unLoop)bool PlayFile(const WString& strFilePath, unsigned int unLoop) -
MakeCallParamclass 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) -
VerifyCallParamclass 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) -
CommonSetSharedContentclass 1-to-1 callGroup call이전 버전 PlanetKit 5.5 const char* PeerId()UserIdPtr GetPeerID()const char* ServiceId()UserIdPtr GetPeerID() -
ConferenceParamclass 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) -
PlanetKitManagerclass 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() -
StatisticsVideoRecvclass 1-to-1 callGroup call이전 버전 PlanetKit 5.5 const char* PeerId()UserIdPtr GetPeerID()const char* PeerServiceId()UserIdPtr GetPeerID()const char* SubgroupName()const WStringOptional& GetSubgroupName() -
StatisticsScreenShareRecvclass 1-to-1 callGroup call이전 버전 PlanetKit 5.5 const char* PeerId()UserIdPtr GetPeerID()const char* PeerServiceId()UserIdPtr GetPeerID()const char* SubgroupName()const WStringOptional& GetSubgroupName() -
SubGroupclass - Group call이전 버전 PlanetKit 5.5 const char *GetSubGroupName()const WStringOptional& GetSubgroupName() -
SubGroupManagerclass 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) -
IResultHandlerclass →using ResultCallback = void(*)(void* pUserData, bool bSuccess)1-to-1 callGroup call -
ISubscribeSubgroupResultHandlerclass →using SubscribeResult = void(*)(SubgroupPtr pSubgroup, bool bSuccess, ESubgroupSubscribeFailReason eReason, void* pUserData)Group call -
IUnsubscribeSubgroupResultHandlerclass →using UnsubscribeResult = void(*)(SubgroupPtr pSubgroup, bool bSuccess, ESubgroupUnsubscribeFailReason eReason, void* pUserData)Group call -
PeerControlclass 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) -
PeerInfoclass →Peerclass Group call이전 버전 PlanetKit 5.5 const char* PeerId()UserIdPtr GetUserID()const char* ServiceId()UserIdPtr GetUserID() -
SManagerInitParamstruct →Configurationclass 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() -
SCallInitDatastruct →CallStartMessageclass 1-to-1 call이전 버전 PlanetKit 5.5 bool bPreperationbool IsInPreparation()char datastatic CallStartMessagePtr Create(const WString& strMessage)const WStringOptional& GetMessage() -
SCallVerifiedParamstruct →CallVerifiedParamclass 1-to-1 call이전 버전 PlanetKit 5.5 SCallInitData sCalleeInitDataCallStartMessagePtr GetPeerStartMessage() -
ConnectParamclass →MakeCallParamclass 1-to-1 call이전 버전 PlanetKit 5.5 void SetStid(const char *szStid)void SetAppServerData(const WString& strAppServerData)const char* GetStid()const WString& GetAppServerData() -
ConnectParamclass →ConferenceParamclass Group call이전 버전 PlanetKit 5.5 void SetStid(const char *szStid)void SetAppServerData(const WString& strAppServerData)const char* GetStid()const WString& GetAppServerData() -
SubGroupclass 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) -
IDataSessionHanderclass →IInboundDataSessionHandler,IOutboundDataSessionHandlerclass 1-to-1 callGroup call
추가
AutoPtrclass 1-to-1 callGroup callbool 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->()
Optionalclass 1-to-1 callGroup callbool HasValue() constconst T* operator->() constT* operator->()const T& operator*() constT& operator*()Optional<T>& operator=(const Optional<T>& src)Optional<T>& operator=(const T& src)T& Value()const T& Value() const
Arrayclass 1-to-1 callGroup callconst T* Buffer() constT* Buffer()void Resize(size_t size)void SetAt(size_t idx, const T& rhs)size_t Size() constT& At(size_t idx) constT& operator[](size_t idx) const
WStringclass 1-to-1 callGroup calloperator const wchar_t*() constconst wchar_t* c_str() constsize_t Size() constWString& Append(const wchar_t* rhs)bool operator==(const wchar_t* rhs) constbool operator==(const WString& rhs) constbool operator!=(const WString& rhs) constconst 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
CallConnectedParamclass 1-to-1 callCallStartMessagePtr GetPeerStartMessage()bool ShouldFinishPreparation()bool IsInPreparation()bool IsVideoSendHardwareCodecEnabled()bool IsSupportDataSession()bool IsSupportVideoShareMode()
CallVerifiedParamclass 1-to-1 callCallStartMessagePtr GetPeerStartMessage()bool IsPeerUsePreparation()
CallDisconnectedParamclass 1-to-1 callbool IsDisconnectedByRemote()EDisconnectReason GetReason()const WString& GetUserReleaseCode()EDisconnectSource GetDisconnectSource()
ConferenceDisconnectedParamclass Group callbool IsDisconnectedByRemote()EDisconnectReason GetReason()EDisconnectSource GetDisconnectSource()const WString& GetUserReleaseCode()
ConferencePeerScreenShareUpdatedParamclass Group callPeerPtr GetPeer()SubgroupPtr GetSubgroup()EScreenShareState ScreenShareState()
VerifyCallParamclass 1-to-1 callconst WString& GetEndTonePath()void SetEndTonePath(const WString& strEndTonePath)void PlayEndtoneRegardlessOfCallState(bool bPlayEndtone)bool IsPlayEndtoneRegardlessOfCallState()void SetAudioDescriptionInfo(bool bUse, unsigned int unAudioDescriptionInterval)AudioDescriptionInfo GetAudioDescriptionInfo()
ConferenceParamclass 1-to-1 callconst 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)
Peerclass Group callEMediaType 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()
PeerControlclass Group callPeerPtr 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)
IPeerControlEventclass Group callvoid 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)
Configurationclass 1-to-1 callGroup callConfigurationPtr Create(const WString& strBasePath, const WString& strDatabasePath)void SetLogSizeLimit(ELogSizeLimit eLogSizeLimit)ELogSizeLimit GetLogSizeLimit()
CCParamclass 1-to-1 callconst WString& GetPeerID()const WString& GetPeerServiceID()EMediaType GetMediaType()
PlanetKitManagerclass 1-to-1 callCCParamPtr CreateCCParam(const char* strCCParam)
bool SendShortDataToAllPeers(const WString& strType, void* pData, unsigned int nSize, void* pUserData = nullptr, ResultCallback pCallback = nullptr)PlanetKitCallclass 1-to-1 callvoid 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)
EDataSessionFailReasonenum 1-to-1 callGroup callPLNK_DATA_SESS_FAIL_REASON_NONEPLNK_DATA_SESS_FAIL_REASON_INTERNALPLNK_DATA_SESS_FAIL_REASON_UNSUPPORTEDPLNK_DATA_SESS_FAIL_REASON_NOT_INCOMINGPLNK_DATA_SESS_FAIL_REASON_ALREADY_EXISTPLNK_DATA_SESS_FAIL_REASON_INVALID_IDPLNK_DATA_SESS_FAIL_REASON_INVALID_TYPE
Subgroupclass Group callbool GetInboundDataSession(int nStreamId, InboundDataSessionPtr* pResult)bool GetOutboundDataSession(int nStreamId, OutboundDataSessionPtr* pResult)
IInboundDataSessionHandlerclass 1-to-1 callGroup callvoid OnReceive(DataSessionStreamIdT nStreamId, DataSessionFramePtr pFrame)void OnSuccess(InboundDataSessionPtr pInboundDataInterface, void* pUserData)void OnError(void* pUserData, EDataSessionFailReason eFailReason)void OnClosed(void* pUserData, EDataSessionClosedReason eClosedReason)
IOutboundDataSessionHandlerclass 1-to-1 callGroup callvoid 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)
InboundDataSessionclass 1-to-1 callGroup callDataSessionStreamIdT GetStreamId()IInboundDataSessionHandler* GetReceiver()
OutboundDataSessionclass 1-to-1 callGroup callbool 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)
EVideoControlResultenum 1-to-1 callGroup callEVideoControlResult_PreviewAlreadyExistEVideoControlResult_CreateRenderFailEVideoControlResult_CameraIsAlreadyInUseByAnotherApplicationEVideoControlResult_PreviewHandleIsInvalidEVideoControlResult_PreviewReceiverIsInvalid
EInitialMyVideoStateenum 1-to-1 callGroup callPLNK_INITIAL_MY_VIDEO_STATE_RESUMEPLNK_INITIAL_MY_VIDEO_STATE_PAUSE
ECameraControlResultenum 1-to-1 callGroup callPLNK_CAMERA_CONTROL_RESULT_NONEPLNK_CAMERA_CONTROL_RESULT_FAILED_TO_CREATE_CAMERA_DEVICEPLNK_CAMERA_CONTROL_RESULT_SELECTED_CAMERA_IS_REMOVEDPLNK_CAMERA_CONTROL_RESULT_NO_CAMERA_SELECTED
CameraControllerclass 1-to-1 callGroup callvoid 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)
PlanetKitConferenceclass Group callvoid 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()
ScreenShareControllerclass 1-to-1 callGroup callbool 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)
EVideoMirrorTypeenum 1-to-1 callGroup callPLNK_MIRROR_TYPE_AUTO = 0PLNK_MIRROR_TYPE_MIRRORED = 1PLNK_MIRROR_TYPE_UNMIRRORED = 2
VideoRenderclass 1-to-1 callGroup callvoid SetMirrorType(EVideoMirrorType eMirrorType)EVideoMirrorType GetMirrorType()void SetRotation(EVideoRotation eRotation)EVideoRotation GetRotation()
CameraInfoclass 1-to-1 callGroup callEVideoRotation GetRotation() constvoid SetRotation(EVideoRotation eRotation)
AudioDescriptionInfostruct 1-to-1 callGroup callbool bEnableAudioDescriptionunsigned int unAudioDescriptionInterval
IMyMediaStatusEventclass 1-to-1 callGroup callvoid 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)
MyMediaStatusclass Group callbool Register(IMyMediaStatusEvent* pListener)bool Unregister()WStringOptional GetVideoSubgroupName()bool GetVideoStatus(OUT VideoStatus* pResultStatus)WStringOptional GetScreenShareSubgroupName()EScreenShareState GetScreenShareState()bool IsAudioMuted()
ConferenceConnectedParamclass 1-to-1 callbool IsSupportVideoShareMode()
StatisticsScreenShareSendclass 1-to-1 callGroup callStatisticsNetwork* Network()StatisticsVideo* Video()
StatisticsScreenShareRecvclass 1-to-1 callGroup callconst WStringOptional& GetSubgroupName()UserIdPtr GetPeerID()StatisticsNetwork* Network()StatisticsVideo* Video()
EStartFailReasonenum 1-to-1 callGroup callPLNK_START_FAIL_REASON_TOO_LONG_APP_SERVER_DATAPLNK_START_FAIL_REASON_NOT_INITIALIZED
EDisconnectReasonenum 1-to-1 callGroup callPLNK_DISCONNECT_REASON_INTERNAL_ERRORPLNK_DISCONNECT_REASON_USER_ERRORPLNK_DISCONNECT_REASON_INTERNAL_KIT_ERRORPLNK_DISCONNECT_REASON_AUDIO_TX_NO_SRCPLNK_DISCONNECT_REASON_UNAVAILABLE_NETWORKPLNK_DISCONNECT_REASON_SYSTEM_DESTROYPLNK_DISCONNECT_REASON_SYSTEM_SLEEPPLNK_DISCONNECT_REASON_SYSTEM_LOGOFFPLNK_DISCONNECT_REASON_SERVICE_ACCESS_TOKEN_ERRORPLNK_DISCONNECT_REASON_APP_SERVER_DATA_ERRORPLNK_DISCONNECT_REASON_MAX_CALL_TIME_EXCEEDEDPLNK_DISCONNECT_REASON_SERVICE_TOO_MANY_REQUESTSPLNK_DISCONNECT_REASON_DESKTOP_SCREEN_LOCKED
ERecordOnCloudDeactivateReasonenum 1-to-1 callPLNK_RECORD_ON_CLOUD_DEACTIVATE_REASON_INTERNALPLNK_RECORD_ON_CLOUD_DEACTIVATE_REASON_ACTIVATION_FAILEDPLNK_RECORD_ON_CLOUD_DEACTIVATE_REASON_MAX_RECORDING_DURATION_REACHED
RecordOnCloudclass 1-to-1 callbool IsActivated()DeactivateReasonOptional GetDeactivatedReason()
MakeCallParamclass 1-to-1 callEInitialMyVideoState 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()
ICallEventclass 1-to-1 callvoid 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)
IConferenceEventclass Group callvoid 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)
EDisconnectSourceenum 1-to-1 callGroup callPLNK_DISCONNECT_SOURCE_UNDEFINEDPLNK_DISCONNECT_SOURCE_CALLEEPLNK_DISCONNECT_SOURCE_CALLERPLNK_DISCONNECT_SOURCE_PARTICIPANTPLNK_DISCONNECT_SOURCE_CLOUD_SERVERPLNK_DISCONNECT_SOURCE_APP_SERVER
ICallAudioReceiverclass 1-to-1 callvoid OnAudio(const SAudioData * pAudioData)
AudioDatastruct 1-to-1 callunsigned int unBufferSizePlanetKitByte* pBuffer
EAudioSampleTypeenum 1-to-1 callPLNK_AUDIO_SAMPLE_TYPE_SIGNED_FLOAT32 = 0PLNK_AUDIO_SAMPLE_TYPE_SIGNED_SHORT16 = 1
PlanetKitHookedAudioclass 1-to-1 callconst 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()
IPlanetKitAudioHookclass 1-to-1 callvoid OnHooked(PlanetKitHookedAudioPtr pHookedAudio)
삭제
SCallConnectedParamstruct 1-to-1 callEMediaType eMediaType
ConferencePeerUpdateParamclass Group callsize_t AddedCount()size_t RemovedCount()
ConferenceVideoUpdatedParamclass Group callsize_t GetCount()
ConferenceSubGroupUpdateParamclass Group callMakeCallParamclass 1-to-1 callconst char* GetAPIKey()const char* GetAccessToken()
ConferenceParamclass Group callconst char* GetAPIKey()const char* GetAccessToken()EConferenceRoomType ConferenceRoomType()void SetConferenceRoomType(EConferenceRoomType eRoomType)
EConferenceRoomTypeenum Group callEDisconnectReasonenum 1-to-1 callGroup callPLNK_DISCONNECT_REASON_WRONG_ROOM_ATTRPLNK_DISCONNECT_REASON_AUDIO_TX_NO_SRC_BY_LOCALPLNK_DISCONNECT_REASON_AUDIO_TX_NO_SRC_BY_REMOTEPLNK_DISCONNECT_REASON_INTERNAL_ERROR_BY_LOCALPLNK_DISCONNECT_REASON_INTERNAL_ERROR_BY_REMOTEPLNK_DISCONNECT_REASON_USER_ERROR_BY_LOCALPLNK_DISCONNECT_REASON_USER_ERROR_BY_REMOTEPLNK_DISCONNECT_REASON_INTERNAL_KIT_ERROR_BY_LOCALPLNK_DISCONNECT_REASON_INTERNAL_KIT_ERROR_BY_REMOTEPLNK_DISCONNECT_REASON_BAD_NETWORK_IN_CONFERENCEPLNK_DISCONNECT_REASON_UNAVAILABLE_NETWORK_IN_CALLPLNK_DISCONNECT_REASON_SERVICE_APIKEY_ERROR
SManagerInitParamstructbool bEnableStdOutLogbool bEnableJupLog
SubGroupManagerclass Group callconst char *GetMyAudioSubGroupName()const char *GetMyAudioTaggedSubGroupName()
PlanetKitCallclass 1-to-1 callbool EndCall(EDisconnectReason eCallEndReason)
IDataSessionExceptionHandlerclassConferenceJoinParamclass Group callvoid SetDisableAutoDisconnectOnBadNetwork(bool bDisable)
VideoCaptureManagerclass 1-to-1 callGroup callVideoCaptureclass 1-to-1 callGroup callPlanetKitConferenceclass Group callbool AudioSendSetHighPriority(bool bHighPriority, void *pResultUserData, IResultHandler *pResultHandler)