PlanetKit 4.4에서 5.5로 마이그레이션하기
PlanetKit 4.4에서 PlanetKit 5.5로 마이그레이션하기 위한 절차와 고려 사항을 상세히 설명합니다.
마이그레이션
Breaking change 메모리 관리를 위한 신규 클래스 추가
- PlanetKit에서 제공하는 포인터형 변수의 생성 주기를 관리하기 위해 메모리 관리 클래스들을 추가했습니다.
AutoPtr
,Optional
,Array
를 추가했습니다.- 포인터형 변수는
AutoPtr
을 사용하도록 변경했습니다. - 명시적으로
nullptr
을 제공하던 API는Optional
을 사용하도록 변경했습니다. - 배열 변수는 파라미터의 크기와 포인터로 제공되지 않고
Array
로 제공하도록 변경했습니다.
- 포인터형 변수는
API 변경
변경
-
ICallEvent
class 1-to-1 call이전 버전 PlanetKit 5.5 void OnCallConnect(PlanetKitCall *pPlanetKitCall, SCallConnectedParam *pConnectedParam)
void OnConnected(PlanetKitCallPtr pPlanetKitCall, CallConnectedParamPtr pConnectedParam)
void OnCallWaitAnswer(PlanetKitCall *pPlanetKitCall)
void OnWaitAnswer(PlanetKitCallPtr pPlanetKitCall)
void OnCallVerified(PlanetKitCall *pPlanetKitCall, SCallVerifiedParam *pVerifiedParam)
void OnVerified(PlanetKitCallPtr pPlanetKitCall, CallVerifiedParamPtr pVerifiedParam)
void OnCallPreperationFinished(PlanetKitCall *pPlanetKitCall)
void OnPreparationFinished(PlanetKitCallPtr pPlanetKitCall)
void OnCallDisconnect(PlanetKitCall *pPlanetKitCall, const SCallDisconnectedParam *pParam)
void OnDisconnected(PlanetKitCallPtr pPlanetKitCall, CallDisconnectedParamPtr pDisconnectedParam)
void OnPeerVideoPaused(PlanetKitCall *pPlanetKitCall, EVideoPauseReason eVideoPauseReason)
void OnPeerVideoPaused(PlanetKitCallPtr pPlanetKitCall, EVideoPauseReason eVideoPauseReason)
void OnPeerVideoResumed(PlanetKitCall *pPlanetKitCall)
void OnPeerVideoResumed(PlanetKitCallPtr pPlanetKitCall)
void OnShortDataReceived(PlanetKitCall *pPlanetKitCall, const SShortDataParam *pShortDataParam)
void OnReceivedShortData(PlanetKitCallPtr pPlanetKitCall, ShortDataParamPtr pShortDataParam)
void OnVideoEnabledByPeer(PlanetKitCall *pPlanetKitCall, bool bVideoCapturerStartSuccess)
void OnVideoEnabledByPeer(PlanetKitCallPtr pPlanetKitCall, bool bIsSendingMyVideo)
void OnVideoDisabledByPeer(PlanetKitCall *pPlanetKitCall, const EMediaDisabledReason eReason)
void OnVideoDisabledByPeer(PlanetKitCallPtr pPlanetKitCall, const EMediaDisabledReason eReason)
void OnPeerHold(PlanetKitCall *pPlanetKitCall, const char *szHoldReason)
void OnReceivedPeerHold(PlanetKitCallPtr pPlanetKitCall, const WString& strHoldReason)
void OnPeerUnhold(PlanetKitCall *pPlanetKitCall)
void OnReceivedPeerUnhold(PlanetKitCallPtr pPlanetKitCall)
void OnNetworkUnavailable(PlanetKitCall *pPlanetKitCall, bool bIsPeer, int nDisconnectAfterSec)
void OnNetworkUnavailable(PlanetKitCallPtr pPlanetKitCall, bool bIsPeer, int nDisconnectAfterSec)
void OnNetworkReavailable(PlanetKitCall *pPlanetKitCall, bool bIsPeer)
void OnNetworkReavailable(PlanetKitCallPtr pPlanetKitCall, bool bIsPeer)
void OnPeerMicMuted(PlanetKitCall *pPlanetKitCall)
void OnPeerMicMuted(PlanetKitCallPtr pPlanetKitCall)
void OnPeerMicUnmuted(PlanetKitCall *pPlanetKitCall)
void OnPeerMicUnmuted(PlanetKitCallPtr pPlanetKitCall)
void OnMuteRequest(PlanetKitCall *pPlanetKitCall, bool bEnableMute)
void OnReceivedMuteMyAudioRequest(PlanetKitCallPtr pPlanetKitCall, bool bEnableMute)
void OnPeerStartScreenShare(PlanetKitCall *pPlanetKitCall)
void OnPeerStartedScreenShare(PlanetKitCallPtr pPlanetKitCall)
void OnPeerStopScreenShare(PlanetKitCall *pPlanetKitCall, bool bHasReason, int nUserReason)
void OnPeerStoppedScreenShare(PlanetKitCallPtr pPlanetKitCall, bool bHasReason, int nUserReason)
void OnDataSessionIncoming(DataSessionStreamIdT nStreamId, EDataSessionType eType)
void OnDataSessionIncoming(DataSessionStreamIdT nStreamId, EDataSessionType eType)
-
IConferenceEvent
class Group call이전 버전 PlanetKit 5.5 void OnConferenceConnect(PlanetKitConference *pPlanetKitConference, SConferenceConnectedParam *pParam)
void OnConnected(PlanetKitConferencePtr pPlanetKitConference, ConferenceConnectedParamPtr pParam)
void OnConferenceDisconnect(PlanetKitConference *pPlanetKitConference, const SConferenceDisconnectedParam *pParam)
void OnDisconnected(PlanetKitConferencePtr pPlanetKitConference, ConferenceDisconnectedParamPtr pParam)
void OnPeerListUpdate(PlanetKitConference *pPlanetKitConference, ConferencePeerUpdateParam* pParam)
void OnPeerListUpdate(PlanetKitConferencePtr pPlanetKitConference, ConferencePeerUpdateParamPtr pParam)
void OnPeerVideoUpdate(PlanetKitConference *pPlanetKitConference, ConferenceVideoUpdatedParam *pParam)
void OnPeersVideoUpdated(PlanetKitConferencePtr pPlanetKitConference, ConferenceVideoUpdatedParam* pParam)
void OnPublicSubgroupPeerUpdate(PlanetKitConference *pPlanetKitConference, const ConferenceSubGroupUpdateParam *pParam)
void OnPublicSubgroupUpdated(PlanetKitConferencePtr pPlanetKitConference, const ConferenceSubgroupUpdatePeerArray& arrSubgroupUpdatePeer)
void OnShortDataReceived(PlanetKitConference *pPlanetKitConference, const SShortDataParam *pParam)
void OnReceivedShortData(PlanetKitConferencePtr pPlanetKitConference, ShortDataParamPtr pParam)
void OnPeersHold(PlanetKitConference *pPlanetKitConference, CommonReceivedHolds * pParam)
void OnReceivedPeersHold(PlanetKitConferencePtr pPlanetKitConference, const PeerHoldArray& arrPeerHold)
void OnPeersUnhold(PlanetKitConference *pPlanetKitConference)
void OnReceivedPeersUnhold(PlanetKitConferencePtr pPlanetKitConference, const PeerArray& arrPeer)
void OnPeersMicMuted(PlanetKitConference *pPlanetKitConference, PeerInfos * pPeerInfos)
void OnPeersMicMuted(PlanetKitConferencePtr pPlanetKitConference, const PeerArray& peerArray)
void OnPeersMicUnmuted(PlanetKitConference *pPlanetKitConference, PeerInfos * pPeerInfos)
void OnPeersMicUnmuted(PlanetKitConferencePtr pPlanetKitConference, const PeerArray& peerArray)
void OnMuteRequest(PlanetKitConference *pPlanetKitConference, PeerInfo* pParam, bool bEnableMute)
void OnReceivedMuteMyAudioRequest(PlanetKitConferencePtr pPlanetKitConference, PeerPtr pPeer, bool bEnableMute)
void OnReceiveAppControlMessage(PlanetKitConference *pPlanetKitConference, const void *pMessage, int nMessageSize)
void OnReceivedAppControlMessage(PlanetKitConferencePtr pPlanetKitConference, const void* pMessage, int nMessageSize)
void OnBadNetworkDetected(PlanetKitConference *pPlanetKitConference, int nWillDisconnectAfterSec)
void OnNetworkUnavailable(PlanetKitConferencePtr pPlanetKitConference, int nWillDisconnectAfterSec)
void OnBadNetworkResolved(PlanetKitConference *pPlanetKitConference)
void OnNetworkReavailable(PlanetKitConferencePtr pPlanetKitConference)
void OnDataSessionIncoming(const char* szSubgroupName, DataSessionStreamIdT nStreamId, EDataSessionType eType)
void OnDataSessionIncoming(const WStringOptional& strSubgroupName, DataSessionStreamIdT nStreamId, EDataSessionType eType)
void OnPeerScreenSharingUpdateInfo(ConferencePeerScreenSharingUpdateInfo* pPeerScreenSharingUpdateInfo)
void OnPeerScreenShareUpdated(ConferencePeerScreenShareUpdatedParam* pPeerScreenShareUpdateInfo)
void OnConferenceException(PlanetKitConference *pPlanetKitConference, ConferenceExceptionMessage* pExceptionMessage)
void OnException(PlanetKitConferencePtr pPlanetKitConference, const ConferenceExceptionArray& arrExceptionMessage)
-
ConferencePeerUpdateParam
class Group call이전 버전 PlanetKit 5.5 SubGroup* GetSubGroup()
SubgroupPtr GetSubgroup()
ConferencePeer* AddedAt(size_t index)
const PeerArray& GetAddedPeer()
ConferencePeer* RemovedAt(size_t index)
const PeerArray& GetRemovedPeer()
-
ConferenceVideoUpdatedParam
class Group call이전 버전 PlanetKit 5.5 PeerVideoStatus* At(size_t nIdx)
const PeerVideoStatusArray& GetPeerVideoStatus()
SubGroup* GetSubGroup()
SubgroupPtr GetSubgroup()
-
ConferenceSubgroupUpdatePeer
class Group call이전 버전 PlanetKit 5.5 ConferencePeerInfo* GetPeerInfo() const
PeerPtr GetPeer() const
const CommonStringArray* GetSubscribedSubgroup() const
const WStringArray& GetSubscribedSubgroupNames() const
const CommonStringArray* GetUnsubscribedSubgroup() const
const WStringArray& GetUnsubscribedSubgroup() const
-
ConferenceException
class Group call이전 버전 PlanetKit 5.5 ConferencePeer* GetPeer()
PeerPtr GetPeer()
SubGroup* GetSubGroup()
SubgroupPtr GetSubgroup()
const char* GetMessage()
const WString& GetMessage()
-
SCallConnectedParam
struct →CallConnectedParam
class 1-to-1 call이전 버전 PlanetKit 5.5 SCallInitData sCalleeInitData
CallStartMessagePtr GetPeerStartMessage()
bool bVideoSendHWCodecEnabled
bool IsVideoSendHardwareCodecEnabled()
-
SCallVerifiedParam
struct →CallVerifiedParam
class 1-to-1 call이전 버전 PlanetKit 5.5 SCallInitData sCalleeInitData
CallStartMessagePtr GetPeerStartMessage()
-
SCallDisconnectedParam
struct →CallDisconnectedParam
class 1-to-1 call이전 버전 PlanetKit 5.5 bool bByRemote
bool IsDisconnectedByRemote()
EDisconnectReason eReason
EDisconnectReason GetReason()
const char* szUserRelCode
const WString& GetUserReleaseCode()
-
SConferenceConnectedParam
struct →ConferenceConnectedParam
class Group call이전 버전 PlanetKit 5.5 bool bVideoSendHWCodecEnabled
bool IsVideoSendHardwareCodecEnabled()
-
SConferenceDisconnectedParam
struct →ConferenceDisconnectedParam
class Group call이전 버전 PlanetKit 5.5 bool bByRemote
bool IsDisconnectedByRemote()
EDisconnectReason eEndReason
EDisconnectReason GetReason()
const char* szUserRelCode
const WString& GetUserReleaseCode()
-
ConferenceExceptionMessage
class →ConferenceExceptionArray
class Group call -
ConferencePeerScreenSharingUpdateInfo
class →ConferencePeerScreenShareUpdatedParam
class Group call이전 버전 PlanetKit 5.5 ConferencePeer* GetPeer()
PeerPtr GetPeer()
SubGroup* GetSubGroup()
SubgroupPtr GetSubgroup()
EScreenSharingState ScreenSharingState()
EScreenShareState ScreenShareState()
추가
AutoPtr
class 1-to-1 callGroup 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->()
Optional
class 1-to-1 callGroup callbool HasValue() const
const T* operator->() const
T* operator->()
const T& operator*() const
T& operator*()
Optional<T>& operator=(const Optional<T>& src)
Optional<T>& operator=(const T& src)
T& Value()
const T& Value() const
Array
class 1-to-1 callGroup callconst T* Buffer() const
T* Buffer()
void Resize(size_t size)
void SetAt(size_t idx, const T& rhs)
size_t Size() const
T& At(size_t idx) const
T& operator[](size_t idx) const
CallConnectedParam
class 1-to-1 callCallStartMessagePtr GetPeerStartMessage()
bool ShouldFinishPreparation()
bool IsInPreparation()
bool IsVideoSendHardwareCodecEnabled()
bool IsSupportDataSession()
CallVerifiedParam
class 1-to-1 callCallStartMessagePtr GetPeerStartMessage()
bool IsPeerUsePreparation()
CallDisconnectedParam
class 1-to-1 callbool IsDisconnectedByRemote()
EDisconnectReason GetReason()
const WString& GetUserReleaseCode()
ConferenceDisconnectedParam
class Group callbool IsDisconnectedByRemote()
EDisconnectReason GetReason()
const WString& GetUserReleaseCode()
ConferencePeerScreenShareUpdatedParam
class Group callPeerPtr GetPeer()
SubgroupPtr GetSubgroup()
EScreenShareState ScreenShareState()
삭제
SCallConnectedParam
struct 1-to-1 callEMediaType eMediaType
ConferencePeerUpdateParam
class Group callsize_t AddedCount()
size_t RemovedCount()
ConferenceVideoUpdatedParam
class Group callsize_t GetCount()
ConferenceSubGroupUpdateParam
class Group call
예제 코드
-
추가된 클래스는 다음과 같이 사용할 수 있습니다.
class YourApplication {
public:
MakeCallParamPtr CreateMakeCallParam() {
// Do not need to release.
PlanetKit::PlanetKitManagerPtr planetKitManager = PlanetKit::PlanetKitManager::GetInstance();
PlanetKit::PlanetKitManagerPtr
PlanetKit::UserIdPtr myId = PlanetKit::UserId::Create(
L"yourId",
L"yourServiceId",
);
PlanetKit::UserIdPtr peerId = PlanetKit::UserId::Create(
L"peerId",
L"peerServiceId"
);
// Do not need to release.
PlanetKit::MakeCallParamPtr makeCallParam = PlanetKit::MakeCallParam::CreateWithAccessToken(
myId,
peerId,
L"yourAccessToken"
);
return makeCallParam;
}
void MakeCall() {
// Do not need to release.
PlanetKit::PlanetKitManagerPtr planetkitManager = PlanetKit::PlanetKitManager::GetInstance();
PlanetKit::MakeCallParamPtr makeCallParam = CreateMakeCallParam();
auto startResult = planetkitManager->MakeCall(makeCallParam, &pCall);
if (startResult.bSuccess == true) {
// Do not need to release.
m_pCall = pCall;
}
}
private:
PlanetKit::PlanetKitCallPtr m_pCall;
}; -
포인터 변수 및 구조체를 파라미터로 제공하던 API들은
PlanetKit::AutoPtr
클래스로 대체됩니다. 구조체의 포인터로 제공되는 API들은PlanetKit::AutoPtr
로 제공합니다.class YourCallEventListener : public PlanetKit::ICallEvent {
public:
// This API is deleted on version 5.5.
// - void OnCallConnect(PlanetKit::PlanetKitCall *pPlanetKitCall, PlanetKit::SCallConnectedParam *pConnectedParam);
// `PlanetKit::PlanetKitCall` and `PlanetKit::SCallConnectedParam` are changed with `PlanetKit::AutoPtr`.
void OnConnected(PlanetKit::PlanetKitCallPtr pPlanetKitCall, PlanetKit::CallConnectedParamPtr pConnectedParam) override {
// You can obtain the information of call connection using the API provided by pConnectedParam.
...
}
} -
사용자가 직접 생성해 API의 파라미터로 사용하던 인스턴스 변수들도 PlanetKit에서 직접 생성해 반환하도록 변경했습니다.
class YourApplication {
public:
void PlanetKit::UserIdPtr createMyId() {
// This API is deleted on version 5.5.
// - PlanetKit::InitUserId myId("yourId", "yourServiceId");
// In order to manage memory management and life cycle, the PlanetKit library was changed to create and return the necessary instances directly.
PlanetKit::UserIdPtr myId = PlanetKit::UserId::Create(
L"yourId",
L"yourServiceId",
);
}
return myId;
} -
API를 이용해 생성한 인스턴스를 포인터 변수로 제공했으나
PlanetKit::AutoPtr
클래스로 대체해AddRef()
나Release()
등 레퍼런스를 관리하기 위한 API를 호출하지 않아도 생성 주기가 자동으로 관리됩니다. -
파라미터로 문자열을 사용할 때 const char와 길이 변수를 사용하지 않고 WString(utf-8)로 제공합니다.
class YourApplication {
public:
void createMakeCallParam() {
PlanetKit::UserIdPtr myId = PlanetKit::UserId::Create(
L"yourId",
L"yourServiceId",
);
PlanetKit::UserIdPtr peerId = PlanetKit::UserId::Create(
L"peerId",
L"peerServiceId",
);
// This API is deleted on version 5.5.
// - static CallInitParam* CreateMakeCallParamWithAccessToken(const PlanetKit::InitUserId & myID, const PlanetKit::InitUserId & peerID, const char* szKey, int nKeyLen);
// You do not need to directly manage the life cycle of CallInitParam* by using `PlanetKit::MakeCallParamPtr`.
PlanetKit::MakeCallParamPtr makeCallParam = PlanetKit::MakeCallParam::CreateWithAccessToken(
myId,
peerId,
L"yourAccessToken"
);
return makeCallParam;
}
}
Breaking change API 파라미터 유형으로 사용하는 char(UTF-8) 문자열을 WString(UTF-16) 문자열로 변경
- 유니코드 문자열을 처리하기 위해 WString(UTF-16)을 파라미터 유형으로 사용하도록 변경했습니다.
- 입력 문자열 길이 제한이 필요한 API의 경우 PlanetKit이 UTF-8로 변환해 길이를 체크하고 성공/실패 결과를 반환합니다.
API 변경
변경
-
PlanetKitCall
class 1-to-1 call이전 버전 PlanetKit 5.5 bool SendShortData(const SShortData *pShortData, void *pResultUserData, IResultHandler *pResultHandler)
bool SendShortData(const WString& strType, void* pData, unsigned int nSize, void* pUserData = nullptr, ResultCallback pCallback = nullptr)
bool Hold(const char *szHoldReason, bool bPauseReceive, void *pResultUserData, IResultHandler *pResultHandler)
bool Hold(const WStringOptional& strHoldReason = NullOptional, void* pUserData = nullptr, ResultCallback pCallback = nullptr)
-
PlanetKitConference
class Group call이전 버전 PlanetKit 5.5 bool RequestPeerVideo(const char *szPeerId, const char *szPeerServiceId, const char *szSubGroupName, EVideoResolution eVideoResolution, void* pResultUserData, IRequestVideoResultHandler* pResultHandler, void* pReqVidResResultUserData, IRequestVideoResultHandler* pReqVidResResultHander)
bool RequestPeerVideo(UserIdPtr pPeerId, const WStringOptional& strSubgroupName, EVideoResolution eVideoResolution, void* pUserData, RequestPeerVideoResolutionCallback pCallback)
bool StopPeerVideo(const char *szPeerId, const char *szPeerServiceId, const char *szSubGroupName, void* pUserData, IRequestVideoResultHandler* pResultHandler)
bool StopPeerVideo(UserIdPtr pPeerId, const WStringOptional& strSubgroupName, void* pUserData = nullptr, RequestPeerVideoResultCallback pCallback = nullptr)
bool SendShortData(const SShortData *pShortData, SShortDataTarget *pTargets, unsigned int unTargetCount, void *pResultUserData, IResultHandler *pResultHandler)
bool SendShortData(const WString& strType, void* pData, unsigned int nSize, UserIdPtr pPeerId, void* pUserData = nullptr, ResultCallback pCallback = nullptr)
bool Hold(const char *szHoldReason, void *pResultUserData, IResultHandler *pResultHandler)
bool Hold(const WStringOptional& strHoldReason = NullOptional, void* pUserData = nullptr, ResultCallback pCallback = nullptr)
bool RequestMutePeerAudioSend(const char *szPeerId, const char *szPeerServiceId, bool bMute, void *pResultUserData, IResultHandler *pResultHandler)
bool RequestPeerMute(UserIdPtr pPeerId, bool bMute, void* pUserData = nullptr, ResultCallback pCallback = nullptr)
bool StartMyScreenShare(const char* szSubgroupName, void *pResultUserData, IResultHandler *pResultHandler)
bool StartMyScreenShare(ScreenShareInfoPtr pScreenShareInfo, const WStringOptional& strSubgroupName, void* pUserData = nullptr, ResultCallback pCallback = nullptr)
bool ChangeMyScreenShareGroup(const char* szToSubgroupName, void *pResultUserData, IResultHandler *pResultHandler)
bool ChangeMyScreenShareDestination(const WString& strToSubgroupName, void* pUserData = nullptr, ResultCallback pCallback = nullptr)
bool RequestPeerScreenShare(const char* szPeerId, const char* szPeerServiceId, const char* szSubgroupName, void *pResultUserData, IRequestVideoResultHandler* pResultHandler)
bool RequestPeerScreenShare(UserIdPtr pPeerId, const WStringOptional& strSubgroupName, void* pUserData, RequestPeerVideoResultCallback pCallback)
bool StopPeerScreenShare(const char* szPeerId, const char* szPeerServiceId, const char* szSubgroupName, void *pResultUserData, IRequestVideoResultHandler* pResultHandler)
bool StopPeerScreenShare(UserIdPtr pPeerId, const WStringOptional& strSubgroupName, void* pUserData, RequestPeerVideoResultCallback pCallback)
const char* MyDisplayName()
const WStringOptional& GetMyDisplayName()
-
ConferenceSubGroupUpdatePeer
class Group call이전 버전 PlanetKit 5.5 const CommonStringArray* GetSubscribedSubgroup() const
const WStringArray& GetSubscribedSubgroupNames() const
const CommonStringArray* GetUnsubscribedSubgroup() const
const WStringArray& GetUnsubscribedSubgroup() const
-
ConferenceException
class Group call이전 버전 PlanetKit 5.5 const char* GetMessage()
const WString& GetMessage()
-
IConferenceEvent
class Group call이전 버전 PlanetKit 5.5 void OnDataSessionIncoming(const char* szSubgroupName, DataSessionStreamIdT nStreamId, EDataSessionType eType)
void OnDataSessionIncoming(const WStringOptional& strSubgroupName, DataSessionStreamIdT nStreamId, EDataSessionType eType)
-
AudioDevice
class 1-to-1 callGroup call이전 버전 PlanetKit 5.5 bool PlayFile(const char* szPath, unsigned int unLoop)
bool PlayFile(const WString& strFilePath, unsigned int unLoop)
-
MakeCallParam
class 1-to-1 call이전 버전 PlanetKit 5.5 static CallInitParam* CreateMakeCallParamWithAccessToken(const InitUserId & myID, const InitUserId & peerID, const char* szKey, int nKeyLen)
static MakeCallParamPtr CreateWithAccessToken(UserIdPtr pMyID, UserIdPtr pPeerID, const WString& strToken)
static CallInitParam* CreateMakeCallParamWithAPIKey(const InitUserId & myID, const InitUserId & peerID, const char* szKey)
static MakeCallParamPtr CreateWithAPIKey(UserIdPtr pMyID, UserIdPtr pPeerID, const WString& strKey)
const char* RingTonePath()
const WString& GetRingTonePath()
const char* RingBackTonePath()
const WString& GetRingBackTonePath()
const char* HoldTonePath()
const WString& GetHoldTonePath()
const char* GetStid()
const wchar_t* GetAppServerData()
void SetStid(const char* szStid)
void SetAppServerData(const wchar_t* szAppServerData)
void SetRingTonePath(const char* szRingTonePath)
void SetRingTonePath(const WString& strRingTonePath)
void SetRingBackTonePath(const char* szRingBackTonePath)
void SetRingBackTonePath(const WString& strRingBackTonePath)
void SetHoldTonePath(const char* szHoldTonePath)
void SetHoldTonePath(const WString& strHoldTonePath)
-
VerifyCallParam
class 1-to-1 call이전 버전 PlanetKit 5.5 static CallInitParam* CreateVerifyCallParam(const InitUserId & myID, const char* szCcParam)
static VerifyCallParamPtr Create(UserIdPtr pMyID, CCParamPtr pCCParam)
const char* RingTonePath()
const WString& GetRingTonePath()
const char* RingBackTonePath()
const WString& GetRingBackTonePath()
const char* HoldTonePath()
const WString& GetHoldTonePath()
void SetRingTonePath(const char* szRingTonePath)
void SetRingTonePath(const WString& strRingTonePath)
void SetRingBackTonePath(const char* szRingBackTonePath)
void SetRingBackTonePath(const WString& strRingBackTonePath)
void SetHoldTonePath(const char* szHoldTonePath)
void SetHoldTonePath(const WString& strHoldTonePath)
-
CommonSetSharedContent
class 1-to-1 callGroup call이전 버전 PlanetKit 5.5 const char* PeerId()
UserIdPtr GetPeerID()
const char* ServiceId()
UserIdPtr GetPeerID()
-
ConferenceParam
class Group call이전 버전 PlanetKit 5.5 static ConferenceJoinParam * CreateWithAccessToken(const InitUserId & myID, const char* szAccessToken, int nAccessTokenLength)
static ConferenceParamPtr CreateWithAPIKey(UserIdPtr pMyID, const WString& strRoomID, const WString& strRoomServiceID, const WString& strAPIKey)
static ConferenceJoinParam* CreateWithAPIKey(const InitUserId & myID, const char* szAPIKey)
static ConferenceParamPtr CreateWithAccessToken(UserIdPtr pMyID, const WString& strRoomID, const WString& strRoomServiceID, const WString& strToken)
const char* DisplayName()
const WStringOptional& GetDisplayName()
void SetDisplayName(const char* szMyDisplayName)
void SetDisplayName(const WStringOptional& strMyDisplayName)
const char* RoomId()
const WString& GetRoomId()
void SetRoomId(const char* szRoomId)
void SetRoomId(const WString& strRoomId)
const char* RoomServiceId()
const WString& GetRoomServiceId()
void SetRoomServiceId(const char *szRoomServiceId)
void SetRoomId(const WString& strRoomId)
const char* GetStid()
const wchar_t* GetAppServerData()
void SetStid(const char* szStid)
void SetAppServerData(const wchar_t* szAppServerData)
-
PlanetKitManager
class 1-to-1 callGroup call이전 버전 PlanetKit 5.5 bool UpdateServerUrl(const char *szServerUrl)
bool UpdateServerUrl(const WString& strServerUrl)
bool GetServerUrl(char * szServerUrl, size_t nBufferSize)
WString& GetServerUrl()
const char* PlanetKitVersion()
const WString& PlanetKitVersion()
-
StatisticsVideoRecv
class 1-to-1 callGroup call이전 버전 PlanetKit 5.5 const char* PeerId()
UserIdPtr GetPeerID()
const char* PeerServiceId()
UserIdPtr GetPeerID()
const char* SubgroupName()
const WStringOptional& GetSubgroupName()
-
StatisticsScreenShareRecv
class 1-to-1 callGroup call이전 버전 PlanetKit 5.5 const char* PeerId()
UserIdPtr GetPeerID()
const char* PeerServiceId()
UserIdPtr GetPeerID()
const char* SubgroupName()
const WStringOptional& GetSubgroupName()
-
SubGroup
class - Group call이전 버전 PlanetKit 5.5 const char *GetSubGroupName()
const WStringOptional& GetSubgroupName()
-
SubGroupManager
class Group call이전 버전 PlanetKit 5.5 bool SubscribeSubgroup(const char *szSubgroupName, ESubgroupPeerUpdateType eUpdateType, bool bEnableVideoUpdate, bool bUseDataSession, void *pResultUserData, ISubscribeSubgroupResultHandler *pResultHandler)
bool SubscribeSubgroup(const WString& strSubgroupName, ESubgroupPeerUpdateType eUpdateType, bool bEnableVideoUpdate, bool bUseDataSession, void* pUserData = nullptr, SubscribeResult pCallback = nullptr)
bool UnsubscribeSubgroup(const char *szSubgroupName, void *pResultUserData, IUnsubscribeSubgroupResultHandler *pResultHandler)
bool UnsubscribeSubgroup(const WString& strSubgroupName, void* pUserData = nullptr, UnsubscribeResult pCallback = nullptr)
SubGroupOptional GetSubGroup(const char *szSubGroupName)
SubgroupOptional GetSubgroup(const WString& strSubgroupName)
SubGroupOptional GetSubGroup(const char *szSubGroupName)
SubgroupPtr GetMainRoom()
bool ChangeMyAudioSend(const char *szDstSubgroupName, void *pResultUserData, IResultHandler *pResultHandler)
bool ChangeMyAudioDestination(const WString& strDestinationSubgroupName, void* pUserData = nullptr, ResultCallback pCallback = nullptr)
bool ChangeMyAudioSend(const char *szDstSubgroupName, void *pResultUserData, IResultHandler *pResultHandler)
bool ChangeMyAudioDestinationToMainRoom(void* pUserData = nullptr, ResultCallback pCallback = nullptr)
bool TagMainRoomAudioSend(const char *szTagSubgroupName, void *pResultUserData, IResultHandler *pResultHandler)
bool SetTagMyAudioOfMainRoom(const WString& strTagSubgroupName, void* pUserData = nullptr, ResultCallback pCallback = nullptr)
bool SilenceAudio(const char *szSubgroupName, bool bSilence, void *pResultUserData, IResultHandler *pResultHandler)
bool SilencePeersAudio(const WStringOptional& strSubgroupName, bool bSilence, void* pUserData = nullptr, ResultCallback pCallback = nullptr)
bool EnableAutoVolumeControl(const char **szFocusSubgroups, size_t nFocusSubgroupCnt, void *pResultUserData, IResultHandler *pResultHandler)
bool SetPeersAudioAutoVolumeControl(const WStringArray& arrSubgroupNames, void* pUserData = nullptr, ResultCallback pCallback = nullptr)
bool SetPeerVolumeSetting(const char *szPeerId, const char *szPeerServiceId, bool bSetForAllSubgroups, const char *szSubgroupNameToApply, unsigned char ucVolume, void *pResultUserData, IResultHandler *pResultHandler)
bool SetPeerAudioVolumeLevelSetting(UserIdPtr pPeerId, bool bSetForAllSubgroups, const WStringOptional& strSubgroupNameToApply, unsigned char ucVolume, void* pUserData = nullptr, ResultCallback pCallback = nullptr)
const String& GetMyVideoSubGroupName()
WStringOptional GetMyVideoSubgroupName()
bool VideoSendChangeSubgroup(const char *szDstSubgroupName, void *pResultUserData, IResultHandler *pResultHandler)
bool ChangeMyVideoDestination(const WString& strDestinationSubgroupName, void* pUserData = nullptr, ResultCallback pCallback = nullptr)
bool VideoSendChangeSubgroup(const char *szDstSubgroupName, void *pResultUserData, IResultHandler *pResultHandler)
bool ChangeMyVideoDestinationToMainRoom(void* pUserData = nullptr, ResultCallback pCallback = nullptr)
추가
WString
class 1-to-1 callGroup calloperator const wchar_t*() const
const wchar_t* c_str() const
size_t Size() const
WString& Append(const wchar_t* rhs)
bool operator==(const wchar_t* rhs) const
bool operator==(const WString& rhs) const
bool operator!=(const WString& rhs) const
const wchar_t operator[] (int idx)
WString& operator=(const wchar_t* src)
WString& operator=(const WString& src)
WString& operator+=(const wchar_t* rhs)
WString& operator+=(const WString& rhs)
WString Substring(const unsigned int unStart, const unsigned unLength = 0) const
MakeCallParam
class 1-to-1 callconst WString& GetEndTonePath()
void SetEndTonePath(const WString& strEndTonePath)
VerifyCallParam
class 1-to-1 callconst WString& GetEndTonePath()
void SetEndTonePath(const WString& strEndTonePath)
ConferenceParam
class 1-to-1 callconst WString& GetEndTonePath()
void SetEndTonePath(const WString& strEndTonePath)
삭제
MakeCallParam
class 1-to-1 callconst char* GetAPIKey()
const char* GetAccessToken()
ConferenceParam
class 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에서 제공하는MultibyteToWideChar
API를 활용할 수 있습니다.std::wstring YourApplication::ConvertUTF8(LPCSTR pszUTF8Text) {
if(pszUTF8Text == NULL || *pszUTF8Text == '\0') {
return std::wstring();
}
int nLengthOfUTF8 = lstrlenA(pszUTF8Text);
int nUTF16 = ::MultiByteToWideChar(
CP_UTF8,
0,
pszUTF8Text,
nLengthOfUTF8,
nullptr,
0);
if (nUTF16 == 0) {
return std::wstring();
}
std::wstring strConvertedUTF16Text(nUTF16, '\0');
int nResult = ::MultiByteToWideChar(
CP_UTF8,
0,
pszUTF8Text,
nLengthOfUTF8,
&strConvertedUTF16Text[0],
nUTF16);
if (nResult == 0) {
return std::wstring();
}
return strConvertedUTF16Text;
} -
Windows에서 제공하는
CString
은 프로젝트의Character set
옵션을Unicode Character Set
으로 설정할 경우 UTF-16으로 사용할 수 있으므로 코드를 변경할 필요는 없습니다.
Breaking change IResultHandler
, ISubscribeSubgroupResultHandler
및 IUnsubscribeSubgroupResultHandler
클래스 제거
- 비동기 API 호출 결과를 콜백으로 전달하는 데 사용하던 클래스들을 제거하고 정적 함수를 추가했습니다.
IResultHandler
,ISubscribeSubgroupResultHandler
,IUnsubscribeSubgroupResultHandler
를 제거하고ResultCallback
,SubscribeResult
,UnsubscribeResult
로 대체합니다.
- 이제 클래스 정적 함수, C 스타일 정적 함수 또는 람다 함수를 '함수 콜백'으로 사용할 수 있습니다.
API 변경
변경
-
IResultHandler
class →using ResultCallback = void(*)(void* pUserData, bool bSuccess)
1-to-1 callGroup call -
ISubscribeSubgroupResultHandler
class →using SubscribeResult = void(*)(SubgroupPtr pSubgroup, bool bSuccess, ESubgroupSubscribeFailReason eReason, void* pUserData)
Group call -
IUnsubscribeSubgroupResultHandler
class →using UnsubscribeResult = void(*)(SubgroupPtr pSubgroup, bool bSuccess, ESubgroupUnsubscribeFailReason eReason, void* pUserData)
Group call -
PlanetKitCall
class 1-to-1 call이전 버전 PlanetKit 5.5 bool MuteMyAudio(bool bMute, void *pMuteResultUserData, IResultHandler *pMuteResultHandler)
bool MuteMyAudio(bool bMute, void *pUserData = nullptr, ResultCallback pCallback = nullptr)
bool PauseMyVideo(void *pResultUserData, IResultHandler *pResultHandler)
bool PauseMyVideo(void* pUserData = nullptr, ResultCallback pCallback = nullptr)
bool ResumeMyVideo(void *pResultUserData, IResultHandler *pResultHandler)
bool ResumeMyVideo(void* pUserData = nullptr, ResultCallback pCallback = nullptr)
bool EnableVideo(void *pResultUserData, IResultHandler *pResultHandler)
bool EnableVideo(void* pUserData = nullptr, ResultCallback pCallback = nullptr)
bool DisableVideo(EMediaDisabledReason eDisableReason, void *pResultUserData, IResultHandler *pResultHandler)
bool DisableVideo(EMediaDisabledReason eDisableReason = PLNK_MEDIA_DISABLE_REASON_USER, void* pUserData = nullptr, ResultCallback pCallback = nullptr)
bool Unhold(void *pResultUserData, IResultHandler *pResultHandler)
bool Unhold(void* pUserData = nullptr, ResultCallback pCallback = nullptr)
bool RequestPeerMute(bool bMute, void *pResultUserData, IResultHandler *pResultHandler)
bool RequestPeerMute(bool bMute, void* pUserData = nullptr, ResultCallback pCallback = nullptr)
bool SilencePeerAudio(bool bSilence, void *pResultUserData, IResultHandler *pResultHandler)
bool SilencePeerAudio(bool bSilence, void* pUserData = nullptr, ResultCallback pCallback = nullptr)
bool StartMyScreenShare(ScreenShareInfoPtr pScreenShareInfo, void *pResultUserData, IResultHandler *pResultHandler)
bool StopMyScreenShare(void* pUserData = nullptr, ResultCallback pCallback = nullptr)
bool StopMyScreenShare(void *pResultUserData, IResultHandler *pResultHandler)
bool StopMyScreenShare(void* pUserData = nullptr, ResultCallback pCallback = nullptr)
bool StopMyScreenShare(int nUserReason, void *pResultUserData, IResultHandler *pResultHandler
bool StopMyScreenShare(int nUserReason, void* pUserData = nullptr, ResultCallback pCallback = nullptr)
bool StartUserAcousticEchoCancellerReference(void *pResultUserData, IResultHandler *pResultHandler)
bool StartUserAcousticEchoCancellerReference(void *pUserData = nullptr, ResultCallback pCallback = nullptr)
bool StopUserAcousticEchoCancellerReference(void *pResultUserData, IResultHandler *pResultHandler)
bool StopUserAcousticEchoCancellerReference(void* pUserData = nullptr, ResultCallback pCallback = nullptr)
-
PlanetKitConference
class Group call이전 버전 PlanetKit 5.5 bool MuteMyAudio(bool bMute, void *pMuteResultUserData, IResultHandler *pMuteResultHandler)
bool MuteMyAudio(bool bMute, void *pUserData = nullptr, ResultCallback pCallback = nullptr)
bool PauseMyVideo(void *pPauseResultUserData, IResultHandler *pPauseResultHandler)
bool PauseMyVideo(void* pUserData = nullptr, ResultCallback pCallback = nullptr)
bool ResumeMyVideo(void *pResumeResultUserData, IResultHandler *pResumeResultHandler)
bool ResumeMyVideo(void* pUserData = nullptr, ResultCallback pCallback = nullptr)
bool EnableVideo(void *pResultUserData, IResultHandler *pResultHandler)
bool EnableVideo(void *pUserData = nullptr, ResultCallback pCallback = nullptr)
bool DisableVideo(void *pResultUserData, IResultHandler *pResultHandler)
bool DisableVideo(void* pUserData = nullptr, ResultCallback pCallback = nullptr)
bool Unhold(void* pResultUserData, IResultHandler* pResultHandler)
bool Unhold(void* pUserData = nullptr, ResultCallback pCallback = nullptr)
bool RequestPeerMute(UserIdPtr pPeerId, bool bMute, void* pUserData, IResultHandler* pResultHandler)
bool RequestPeerMute(UserIdPtr pPeerId, bool bMute, void* pUserData = nullptr, ResultCallback pCallback = nullptr)
bool RequestPeersMute(bool bMute, void* pUserData, IResultHandler* pResultHandler)
bool RequestPeersMute(bool bMute, void* pUserData = nullptr, ResultCallback pCallback = nullptr)
bool SilencePeersAudio(bool bSilence, void *pResultUserData, IResultHandler *pResultHandler)
bool SilencePeersAudio(bool bSilence, void* pUserData = nullptr, ResultCallback pCallback = nullptr)
bool StopMyScreenShare(void* pUserData, IResultHandler* pResultHandler)
bool StopMyScreenShare(void* pUserData = nullptr, ResultCallback pCallback = nullptr)
bool StopMyScreenShare(int nUserReason, void* pUserData, IResultHandler* pResultHandler)
bool StopMyScreenShare(int nUserReason, void* pUserData = nullptr, ResultCallback pCallback = nullptr)
bool ChangeMyScreenShareDestinationToMainRoom(void* pUserData, IResultHandler* pResultHandler)
bool ChangeMyScreenShareDestinationToMainRoom(void* pUserData = nullptr, ResultCallback pCallback = nullptr)
bool StartUserAcousticEchoCancellerReference(void* pUserData, IResultHandler* pResultHandler)
bool StartUserAcousticEchoCancellerReference(void* pUserData = nullptr, ResultCallback pCallback = nullptr)
bool StopUserAcousticEchoCancellerReference(void *pResultUserData, IResultHandler *pResultHandler)
bool StopUserAcousticEchoCancellerReference(void* pUserData = nullptr, ResultCallback pCallback = nullptr)
-
SubgroupManager
class Group call이전 버전 PlanetKit 5.5 bool SubscribeSubgroup(const wchar_t* szSubgroupName, ESubgroupPeerUpdateType eUpdateType, bool bEnableVideoUpdate, bool bUseDataSession, void* pUserData, ISubscribeSubgroupResultHandler* pCallback)
bool SubscribeSubgroup(const WString& strSubgroupName, ESubgroupPeerUpdateType eUpdateType, bool bEnableVideoUpdate, bool bUseDataSession, void* pUserData = nullptr, SubscribeResult pCallback = nullptr)
bool UnsubscribeSubgroup(const wchar_t* szSubgroupName, void* pUserData, IUnsubscribeSubgroupResultHandler* pCallback)
bool UnsubscribeSubgroup(const WString& strSubgroupName, void* pUserData = nullptr, UnsubscribeResult pCallback = nullptr)
bool ChangeMyAudioDestination(const wchar_t* szSubgroupName, void* pUserData, IResultHandler* pCallback)
bool ChangeMyAudioDestination(const WString& strDestinationSubgroupName, void* pUserData = nullptr, ResultCallback pCallback = nullptr)
bool ChangeMyAudioDestinationToMainRoom(void* pUserData, IResultHandler* pCallback)
bool ChangeMyAudioDestinationToMainRoom(void* pUserData = nullptr, ResultCallback pCallback = nullptr)
bool SetTagMyAudioOfMainRoom(const wchar_t* szSubgroupName, void* pUserData, IResultHandler* pCallback)
bool SetTagMyAudioOfMainRoom(const WString& strTagSubgroupName, void* pUserData = nullptr, ResultCallback pCallback = nullptr)
bool ClearTagMyAudioOfMainRoom(void* pUserData, IResultHandler* pCallback)
bool ClearTagMyAudioOfMainRoom(void* pUserData = nullptr, ResultCallback pCallback = nullptr)
bool SilencePeersAudio(const wchar_t* szSubgroupName, bool bSilence, void* pUserData, IResultHandler* pCallback)
bool SilencePeersAudio(const WStringOptional& strSubgroupName, bool bSilence, void* pUserData = nullptr, ResultCallback pCallback = nullptr)
bool SetPeersAudioAutoVolumeControl(const WStringArray& arrSubgroupNames, void* pUserData, IResultHandler* pCallback)
bool SetPeersAudioAutoVolumeControl(const WStringArray& arrSubgroupNames, void* pUserData = nullptr, ResultCallback pCallback = nullptr)
bool ClearPeersAudioAutoVolumeControl(void *pResultUserData, IResultHandler *pResultHandler)
bool ClearPeersAudioAutoVolumeControl(void* pUserData = nullptr, ResultCallback pCallback = nullptr)
bool SetPeerAudioVolumeLevelSetting(UserIdPtr pPeerId, bool bSetForAllSubgroups, const wchar_t* szSubgroupName, unsigned char ucVolume, void* pUserData, IResultHandler* pCallback)
bool SetPeerAudioVolumeLevelSetting(UserIdPtr pPeerId, bool bSetForAllSubgroups, const WStringOptional& strSubgroupNameToApply, unsigned char ucVolume, void* pUserData = nullptr, ResultCallback pCallback = nullptr)
bool ChangeMyVideoDestination(const wchar_t* szSubgroupName, void* pUserData, IResultHandler* pCallback)
bool ChangeMyVideoDestination(const WString& strDestinationSubgroupName, void* pUserData = nullptr, ResultCallback pCallback = nullptr)
bool ChangeMyVideoDestinationToMainRoom(void* pUserData, IResultHandler* pCallback)
bool ChangeMyVideoDestinationToMainRoom(void* pUserData = nullptr, ResultCallback pCallback = nullptr)
예제 코드
-
다음은 이전 버전에서 비동기 API의 결과를 확인하던 방식입니다.
enum YourCallResultType {
CallMuteMyAudio = 0,
CallPauseMyVideo,
CallResumeMyVideo,
...
};
struct YourCallbackParam {
YourCallResultType eType;
YourCall* pYourCallInstance;
}
class YourCallResultHandler : public PlanetKit::IResultHandler {
public :
void OnResult(void* pUserData, bool bSuccess) {
YourCallbackParam* pCallbackParam = (YourCallbackParam*)pUserData;
switch(pCallbackParam->eType) {
case YourCallResultType::CallMuteMyAudio :
// Handle the mute result
break;
case YourCallResultType::CallPauseMyVideo :
// Handle the pause result
break;
case YourCallResultType::CallResumeMyVideo :
// Handle the resume result
break;
};
delete pCallbackParam;
}
}
class YourCall {
void MuteMyAudio(bool bMute) {
YourCallbackParam* pCallbackParam = new YourCallbackParam;
pCallbackParam->eType = YourCallResultType::CallMuteMyAudio;
m_pCall->MuteMyAudio(bMute, pCallbackParam, &m_callResultHandler);
}
void PauseMyVideo() {
YourCallbackParam* pCallbackParam = new YourCallbackParam;
pCallbackParam->eType = YourCallResultType::CallPauseMyVideo;
m_pCall->PauseMyVideo(pCallbackParam, &m_callResultHandler);
}
void ResumeMyVideo() {
YourCallbackParam* pCallbackParam = new YourCallbackParam;
pCallbackParam->eType = YourCallResultType::CallResumeMyVideo;
m_pCall->ResumeMyVideo(bMute, pCallbackParam, &m_callResultHandler);
}
private :
YourCallResultHandler m_callResultHandler;
PlanetKit::PlanetKitCallPtr m_pCall;
} -
새 버전에서는 다음과 같은 세 가지 방법으로 비동기 API의 결과를 확인할 수 있습니다.
-
방법 1:
OnResult
메서드를 정적 메서드로 변경하세요.class YourCallResultHandler : public PlanetKit::IResultHandler {
public :
// Change the `OnResult` method to a static method
static void OnResult(void* pUserData, bool bSuccess) {
YourCallbackParam* pCallbackParam = (YourCallbackParam*)pUserData;
switch(pCallbackParam->eType) {
case YourCallResultType::CallMuteMyAudio :
// Handle the mute result
break;
case YourCallResultType::CallPauseMyVideo :
// Handle the pause result
break;
case YourCallResultType::CallResumeMyVideo :
// Handle the resume result
break;
};
delete pCallbackParam;
}
}
class YourCall {
void MuteMyAudio(bool bMute) {
YourCallbackParam* pCallbackParam = new YourCallbackParam;
pCallbackParam->eType = YourCallResultType::CallMuteMyAudio;
// Use the static method as a callback parameter.
m_pCall->MuteMyAudio(bMute, pCallbackParam, YourCallResultHandler::OnResult);
}
private :
PlanetKit::PlanetKitCallPtr m_pCall;
} -
방법 2:
YourCallResultHandler
클래스를 삭제하고OnResult()
메서드를 함수로 변경하세요.void OnResult(void* pUserData, bool bSuccess) {
YourCallbackParam* pCallbackParam = (YourCallbackParam*)pUserData;
switch(pCallbackParam->eType) {
case YourCallResultType::CallMuteMyAudio :
// Handle the mute result
break;
case YourCallResultType::CallPauseMyVideo :
// Handle the pause result
break;
case YourCallResultType::CallResumeMyVideo :
// Handle the resume result
break;
};
delete pCallbackParam;
}
class YourCall {
void MuteMyAudio(bool bMute) {
YourCallbackParam* pCallbackParam = new YourCallbackParam;
pCallbackParam->eType = YourCallResultType::CallMuteMyAudio;
// Use the static method as a callback parameter.
m_pCall->MuteMyAudio(bMute, pCallbackParam, OnResult);
}
private :
PlanetKit::PlanetKitCallPtr m_pCall;
} -
방법 3: 비동기 API를 호출할 때 람다 표현식을 이용해 결과를 확인하세요.
class YourCall {
void MuteMyAudio(bool bMute) {
YourCallbackParam* pCallbackParam = new YourCallbackParam;
m_pCall->MuteMyAudio(bMute, pCallbackParam, [](void* pUserData, bool bSuccess) -> void {
YourCallbackParam* pCallbackParam = (YourCallbackParam*)pUserData;
// Handle the mute result
delete pCallbackParam;
});
}
void PauseMyVideo() {
YourCallbackParam* pCallbackParam = new YourCallbackParam;
m_pCall->PauseMyVideo(pCallbackParam, [](void* pUserData, bool bSuccess) -> void {
YourCallbackParam* pCallbackParam = (YourCallbackParam*)pUserData;
// Handle the pause result
delete pCallbackParam;
});
}
void ResumeMyVideo() {
YourCallbackParam* pCallbackParam = new YourCallbackParam;
m_pCall->ResumeMyVideo(pCallbackParam, [](void* pUserData, bool bSuccess) -> void {
YourCallbackParam* pCallbackParam = (YourCallbackParam*)pUserData;
// Handle the resume result
delete pCallbackParam;
});
}
}
-
Breaking change 그룹 통화 참여자 정보를 확인하는 클래스와 참여자를 컨트롤하는 클래스 추가
- 이전에는
PeerInfo
클래스를 통해 참여자의 ID와 서비스 ID만 확인할 수 있었지만, 참여자의 여러 정보를 확인할 수 있도록Peer
클래스를 추가했습니다. Peer
클래스를 이용해PeerControl
클래스를 생성할 수 있습니다.PeerControl
을 이용하면 참여자의 비디오를 켜거나 끄고, 화면 공유 영상을 켜거나 끌 수 있습니다.
API 변경
변경
-
PeerInfo
class →Peer
class Group call이전 버전 PlanetKit 5.5 const char* PeerId()
UserIdPtr GetUserID()
const char* ServiceId()
UserIdPtr GetUserID()
추가
Peer
class Group 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()
PeerControl
class 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)
IPeerControlEvent
class 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 변경
삭제
EConferenceRoomType
enum Group callConferenceParam
class Group callEConferenceRoomType ConferenceRoomType()
void SetConferenceRoomType(EConferenceRoomType eRoomType)
EDisconnectReason
enum 1-to-1 callGroup callPLNK_DISCONNECT_REASON_WRONG_ROOM_ATTR
Breaking change 로그 설정을 위한 옵션 변경
SManagerInitParam
구조체를 삭제하고Configuration
클래스를 추가했습니다.Configuration
클래스를 이용해 로그 사용 방식을 설정할 수 있습니다.
API 변경
변경
-
SManagerInitParam
struct →Configuration
class 1-to-1 callGroup call이전 버전 PlanetKit 5.5 char* szBasePath
const WString& GetBasePath()
char* szDbPath
const WString& GetDatabasePath()
int nLogLevel
void SetLogLevel(ELogLevel eLogLevel)
ELogLevel GetLogLevel()
bEnableFileLog
void EnableLogOutput(bool bEnable)
bool IsLogOutputEnabled()
추가
Configuration
class 1-to-1 callGroup callConfigurationPtr Create(const WString& strBasePath, const WString& strDatabasePath)
void SetLogSizeLimit(ELogSizeLimit eLogSizeLimit)
ELogSizeLimit GetLogSizeLimit()
삭제
SManagerInitParam
structbool bEnableStdOutLog
bool bEnableJupLog
예제 코드
-
PlanetKit
을 초기화할 때 로그 레벨과 로그 사용 방식을 지정할 수 있습니다.class YourApplication {
public:
void Initialize() {
PlanetKit::ConfigurationPtr config = PlanetKit::Configuration::Create(L"yourPlanetKitBinaryPath", L"yourDataPath");
config->EnableLogOutput(true);
config->SetLogLevel(PlanetKit::ELogLevel::PLNK_LOG_SIMPLE);
config->SetLogSizeLimit(PlanetKit::ELogSizeLimit::PLNK_LOG_SIZE_LIMIT_MEDIUM);
PlanetKit::PlanetKitManager::Initialize(config);
}
};
Breaking change 오디오 서브그룹 정보를 확인하는 API 제거
- 사용되지 않던 API를 제거했습니다.
- 오디오 변경에 대한 서브그룹 정보는
IConferenceEvent::OnMyAudioDescriptionUpdated()
이벤트로 확인할 수 있습니다.
API 변경
삭제
SubGroupManager
class Group callconst char *GetMyAudioSubGroupName()
const char *GetMyAudioTaggedSubGroupName()
Breaking change 통화 시작 시 메시지를 주고받기 위한 API 변경
SCallInitData
구조체를 제거하고CallStartMessage
클래스를 추가했습니다.SCallInitData::data[PLNK_CALL_INIT_DATA_BUFFER_SIZE]
의 길이를 200 바이트로 제한하고 항상 null 문자열로 끝내기 위해 구조체에서 클래스 형태로 변경해 API 호출 시 문자열을 자동으로 체크할 수 있게 변경했습니다.
API 변경
변경
-
SCallInitData
struct →CallStartMessage
class 1-to-1 call이전 버전 PlanetKit 5.5 bool bPreperation
bool IsInPreparation()
char data
static CallStartMessagePtr Create(const WString& strMessage)
const WStringOptional& GetMessage()
-
SCallConnectedParam
struct →CallConnectedParam
class 1-to-1 call이전 버전 PlanetKit 5.5 SCallInitData sCalleeInitData
CallStartMessagePtr GetPeerStartMessage()
-
SCallVerifiedParam
struct →CallVerifiedParam
class 1-to-1 call이전 버전 PlanetKit 5.5 SCallInitData sCalleeInitData
CallStartMessagePtr GetPeerStartMessage()
예제 코드
bool YourApplication::CreateCallStartMessage() {
PlanetKit::PlanetKitManagerPtr planetKitMnager = PlanetKit::PlanetKitManager::GetInstance();
// Prepare your start message
std::wstring yourMessage = L"your message";
// Create CallStartMessage
PlanetKit::CallStartMessagePtr callStartMessage = PlanetKit::CallStartMessage::Create(yourMessage);
if(*callStartMessage == nullptr) {
// `PlanetKit::CallStartMessage::Create()` API will return nullptr if szMessage is nullptr or if it exceeds 200 bytes after being converted to UTF-8.
return false;
}
...
return true;
}
Breaking change 데이터 세션 API 기능 변경
- 데이터 세션에 대한 실패 정보를 구체화했습니다.
- 데이터 세션 API의 이름을 보다 구체적인 의미가 담긴 이름으로 변경했습니다.
- 데이터 세션 스트림 ID 범위의 사양을 기존 100–1000에서 100–999로 변경했습니다.
API 변경
변경
-
PlanetKitCall
class 1-to-1 call이전 버전 PlanetKit 5.5 bool MakeRecvDataSession(int nStreamId, IDataSessionReceiver *pIDataSessionReceiver, NULLABLE void *pResultUserData, NULLABLE IDataSessionHander *pResultHandler, void *pExceptionUserData, IDataSessionExceptionHandler *pExceptionHandler)
bool MakeInboundDataSession(int nStreamId, NULLABLE void* pResultUserData, IInboundDataSessionHandler* pDataSessionHandler)
bool MakeSendDataSession(int nStreamId, EDataSessionType eType, NULLABLE void *pResultUserData, NULLABLE IDataSessionHander* pResultHandler, void *pExceptionUserData, IDataSessionExceptionHandler *pExceptionHandler)
bool MakeOutboundDataSession(int nStreamId, EDataSessionType eType, NULLABLE void* pResultUserData, IOutboundDataSessionHandler* pDataSessionHandler)
-
SubGroup
class Group call이전 버전 PlanetKit 5.5 bool MakeRecvDataSession(int nStreamId, IDataSessionReceiver *pIDataSessionReceiver, NULLABLE void *pResultUserData, NULLABLE IDataSessionHander *pResultHandler, void *pExceptionUserData, IDataSessionExceptionHandler *pExceptionHandler)
bool MakeInboundDataSession(int nStreamId, NULLABLE void *pResultUserData, IInboundDataSessionHandler* pDataSessionHandler)
bool MakeSendDataSession(int nStreamId, EDataSessionType eType, NULLABLE void *pResultUserData, NULLABLE IDataSessionHander* pResultHandler, void *pExceptionUserData, IDataSessionExceptionHandler *pExceptionHandler)
bool MakeOutboundDataSession(int nStreamId, EDataSessionType eType, NULLABLE void* pResultUserData, IOutboundDataSessionHandler* pDataSessionHandler)
-
IDataSessionHander
class →IInboundDataSessionHandler
,IOutboundDataSessionHandler
class 1-to-1 callGroup call
추가
EDataSessionFailReason
enum 1-to-1 callGroup callPLNK_DATA_SESS_FAIL_REASON_NONE
PLNK_DATA_SESS_FAIL_REASON_INTERNAL
PLNK_DATA_SESS_FAIL_REASON_UNSUPPORTED
PLNK_DATA_SESS_FAIL_REASON_NOT_INCOMING
PLNK_DATA_SESS_FAIL_REASON_ALREADY_EXIST
PLNK_DATA_SESS_FAIL_REASON_INVALID_ID
PLNK_DATA_SESS_FAIL_REASON_INVALID_TYPE
PlanetKitCall
class 1-to-1 callbool GetInboundDataSession(int nStreamId, InboundDataSessionPtr* pResult)
bool GetOutboundDataSession(int nStreamId, OutboundDataSessionPtr* pResult)
Subgroup
class Group callbool GetInboundDataSession(int nStreamId, InboundDataSessionPtr* pResult)
bool GetOutboundDataSession(int nStreamId, OutboundDataSessionPtr* pResult)
ICallEvent
class 1-to-1 callvoid OnDataSessionIncoming(DataSessionStreamIdT nStreamId, EDataSessionType eType)
IConferenceEvent
class Group callvoid OnDataSessionIncoming(const WStringOptional& strSubgroupName, DataSessionStreamIdT nStreamId, EDataSessionType eType)
IInboundDataSessionHandler
class 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)
IOutboundDataSessionHandler
class 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)
InboundDataSession
class 1-to-1 callGroup callDataSessionStreamIdT GetStreamId()
IInboundDataSessionHandler* GetReceiver()
OutboundDataSession
class 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)
삭제
IDataSessionExceptionHandler
class
예제 코드
-
데이터 세션 수신 시 사용할 클래스 인스턴스를 미리 준비하세요.
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 변경
변경
-
ConnectParam
class →MakeCallParam
class 1-to-1 call이전 버전 PlanetKit 5.5 void SetStid(const char *szStid)
void SetAppServerData(const WString& strAppServerData)
const char* GetStid()
const WString& GetAppServerData()
-
ConnectParam
class →ConferenceParam
class Group call이전 버전 PlanetKit 5.5 void SetStid(const char *szStid)
void SetAppServerData(const WString& strAppServerData)
const char* GetStid()
const WString& GetAppServerData()
Breaking change 짧은 데이터 전송 기능 변경
PlanetKitConference::SendShortData()
를 여러 대상으로 전송할 수 있는 기능을 제거하고, 단일 대상으로만 호출할 수 있도록 변경했습니다.PlanetKitConference::SendShortDataToAllPeers()
를 이용해 전체 참여자에게 데이터를 전송할 수 있습니다.
PlanetKitCall::SendShortData()
와PlanetKitConference::SendShortData()
에서 전송할 수 있는 데이터 크기를 변경했습니다.- 전송할 수 있는 총 데이터 크기는,
nSize
파라미터는 최대 100 바이트,pData
파라미터는 최대 800 바이트입니다. - 제한 길이를 초과할 경우 전송에 실패합니다.
- 전송할 수 있는 총 데이터 크기는,
API 변경
변경
-
PlanetKitCall
class 1-to-1 call이전 버전 PlanetKit 5.5 bool SendShortData(const SShortData *pShortData, void *pResultUserData, IResultHandler *pResultHandler)
bool SendShortData(const WString& strType, void* pData, unsigned int nSize, void* pUserData = nullptr, ResultCallback pCallback = nullptr)
-
PlanetKitConference
class Group call이전 버전 PlanetKit 5.5 bool SendShortData(const SShortData *pShortData, SShortDataTarget *pTargets, unsigned int unTargetCount, void *pResultUserData, IResultHandler *pResultHandler)
bool SendShortData(const WString& strType, void* pData, unsigned int nSize, UserIdPtr pPeerId, void* pUserData = nullptr, ResultCallback pCallback = nullptr)
추가
bool SendShortDataToAllPeers(const WString& strType, void* pData, unsigned int nSize, void* pUserData = nullptr, ResultCallback pCallback = nullptr)
Breaking change ConferenceParam
의 SetDisableAutoDisconnectOnBadNetwork()
제거
- PlanetKit 5.5부터 네트워크 상태 변경을 알리는 콜백이 항상 호출됩니다. 이에 따라
SetDisableAutoDisconnectOnBadNetwork()
를 제거했습니다.
API 변경
변경
-
IConferenceEvent
class Group call이전 버전 PlanetKit 5.5 void OnBadNetworkDetected(PlanetKitConferencePtr pPlanetKitConference, int nWillDisconnectAfterSec)
void OnNetworkUnavailable(PlanetKitConferencePtr pPlanetKitConference, int nWillDisconnectAfterSec)
void OnBadNetworkResolved(PlanetKitConferencePtr pPlanetKitConference)
void OnNetworkReavailable(PlanetKitConferencePtr pPlanetKitConference)
삭제
ConferenceJoinParam
class Group 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 변경
변경
-
PlanetKitCall
class 1-to-1 call이전 버전 PlanetKit 5.5 void AcceptCall(EMediaType eMediaType, SCallInitData *pCallInitData)
void AcceptCall(bool bPreparation, CallStartMessagePtr pCallStartMessage = CallStartMessagePtr(nullptr), EInitialMyVideoState eInitialMyVideoState = PLNK_INITIAL_MY_VIDEO_STATE_RESUME, bool bRecordOnCloud = false)
bool EnableVideoSend(VideoCapturer *pVideoCaptuer, void *pResultUserData, IResultHandler *pResultHandler)
bool EnableVideo(EInitialMyVideoState eInitialMyVideoState = PLNK_INITIAL_MY_VIDEO_STATE_RESUME, void* pUserData = nullptr, ResultCallback pCallback = nullptr)
bool DisableVideoSend(void *pResultUserData, IResultHandler *pResultHandler)
bool DisableVideo(EMediaDisabledReason eDisableReason = PLNK_MEDIA_DISABLE_REASON_USER, void* pUserData = nullptr, ResultCallback pCallback = nullptr)
-
PlanetKitConference
class Group call이전 버전 PlanetKit 5.5 bool EnableVideoSend(VideoCapturer *pVideoCaptuer, void *pResultUserData, IResultHandler *pResultHandler)
bool EnableVideo(EInitialMyVideoState eInitialMyVideoState = PLNK_INITIAL_MY_VIDEO_STATE_RESUME, void* pUserData = nullptr, ResultCallback pCallback = nullptr)
bool DisableVideoSend(void *pResultUserData, IResultHandler *pResultHandler)
bool DisableVideo(EMediaDisabledReason eDisableReason = PLNK_MEDIA_DISABLE_REASON_USER, void* pUserData = nullptr, ResultCallback pCallback = nullptr)
추가
EVideoControlResult
enum 1-to-1 callGroup callEVideoControlResult_PreviewAlreadyExist
EVideoControlResult_CreateRenderFail
EVideoControlResult_CameraIsAlreadyInUseByAnotherApplication
EVideoControlResult_PreviewHandleIsInvalid
EVideoControlResult_PreviewReceiverIsInvalid
EInitialMyVideoState
enum 1-to-1 callGroup callPLNK_INITIAL_MY_VIDEO_STATE_RESUME
PLNK_INITIAL_MY_VIDEO_STATE_PAUSE
ECameraControlResult
enum 1-to-1 callGroup callPLNK_CAMERA_CONTROL_RESULT_NONE
PLNK_CAMERA_CONTROL_RESULT_FAILED_TO_CREATE_CAMERA_DEVICE
PLNK_CAMERA_CONTROL_RESULT_SELECTED_CAMERA_IS_REMOVED
PLNK_CAMERA_CONTROL_RESULT_NO_CAMERA_SELECTED
CameraController
class 1-to-1 callGroup 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)
ConferenceParam
class Group callEInitialMyVideoState GetInitialMyVideoState()
void SetInitialMyVideoState(EInitialMyVideoState eInitialMyVideoState)
MakeCallParam
class 1-to-1 callEInitialMyVideoState GetInitialMyVideoState()
void SetInitialMyVideoState(EInitialMyVideoState eInitialMyVideoState)
PlanetKitCall
class 1-to-1 callvoid RemoveAllMyVideoViewAndReceiver()
void RemoveAllPeerVideoViewAndReceiver()
PlanetKitConference
class Group callvoid RemoveAllMyVideoViewAndReceiver()
bool AddPeerVideoReceiver(UserIdPtr pPeerID, IVideoReceiver* pReceiver)
bool RemovePeerVideoReceiver(IVideoReceiver* pReceiver)
void RemoveAllPeerVideoViewAndReceiver()
삭제
VideoCaptureManager
class 1-to-1 callGroup callVideoCapture
class 1-to-1 callGroup call
예제 코드
-
새로 추가된
CameraController::StartPreview(WindowHandle)
와CameraController::StartPreview(IVideoReceiver*)
를 사용하여 로컬 사용자의 카메라에서 전송되는 비디오를 미리 볼 수 있습니다.-
다음은
CameraController::StartPreview(WindowHandle)
를 사용하는 예입니다.class YourApplication {
void StartPreview() {
// Get PlanetKit::CameraController instance from PlanetKit::PlanetKitManager.
auto planetKitCameraController = PlanetKit::PlanetKitManager::GetInstance()->GetCameraController();
// Start preview.
planetKitCameraController->StartPreview(m_hWnd);
}
private:
// Prepare your window handle (HWND) where you want to render video from the camera device.
HWND m_hWnd;
}
-
-
비디오를 직접 처리하려면
IVideoReceiver
를 상속하는 비디오 수신 모듈(video receiver)을 구현하고CameraController::StartPreview(IVideoReceiver*)
를 사용하세요.class MyVideoReceiver : public PlanetKit::IVideoReceiver {
public:
void OnVideo(const PlanetKit::SVideoFrame* pVideoFrame, PlanetKit::UserIdPtr pUserID) {
// Handling video processing.
...
}
};
class YourApplication {
void StartPreview() {
// Get PlanetKit::CameraController instance from PlanetKit::PlanetKitManager.
auto planetKitCameraController = PlanetKit::PlanetKitManager::GetInstance()->GetCameraController();
// Start preview.
planetKitCameraController->StartPreview(&m_myVideoReceiver);
}
private:
// Prepare your video receiver where you want to render video from the camera device.
MyVideoReceiver m_myVideoReceiver;
} -
1대1 통화 또는 그룹 통화에 연결한 후 로컬 사용자의 비디오를 화면에 렌더링하려면
AddMyVideoView(WindowHandle)
또는AddMyVideoView(IVideoReceiver*)
를 사용하세요. -
EnableVideo()
및DisableVideo()
가 호출되면 카메라가 자동으로 켜지고 꺼집니다. -
EnableVideo()
를 사용하여 영상 통화로 전환한 후AddMyVideoView()
를 사용하여 렌더링을 위한 뷰를 등록하면 영상이 화면에 보입니다.class YourApplication {
void AddMyVideoView() {
m_pCall->AddMyVideoView(m_hMyView);
}
private:
PlanetKit::PlanetKitCallPtr m_pCall;
HWND m_hMyView;
} -
4.4 버전에서 카메라를 켜고 끄는 기능과 관련해 마이그레이션할 때에는 아래 예제 코드를 참고하세요.
-
VideoCaptureManager
,VideoCapturer
클래스를 제거하고 카메라 장치를 제어하는CameraController
클래스를 추가했습니다.VideoCaptureManager::CreateVideoCapturer()
를 이용해 장치를 생성하고VideoCapturer::Start()
나VideoCapturer::Pause()
등을 직접 호출하지 않아도 됩니다.
-
CameraController::GetCapturerInfo()
를 호출해 장치에 연결된 카메라 정보를 획득하고CameraController::SelectCamera()
를 호출해 사용할 카메라를 지정합니다.class YourApplication {
public:
void SelectCamera() {
PlanetKit::CameraControllerPtr cameraController = PlanetKit::PlanetKitManager::GetInstance()->GetCameraController();
PlanetKit::CameraInfoArray arrayCameraInfo;
cameraController->GetCapturerInfo(arrayCameraInfo);
for(size_t idx = 0; idx < arrayCameraInfo.Size(); ++idx) {
// Pick your camera
std::wcout << arrayCameraInfo[idx]->GetDeviceName().c_str() << L" " << arrayCameraInfo[idx]->GetDeviceUid() << std::endl;
if(arrayCameraInfo[idx]->GetDeviceUid() == L"camera_unique_id_that_you_want") {
cameraController->SelectCamera(arrayCameraInfo[idx]);
break;
}
}
}
} -
통화 연결 전 혹은 연결 후에도 프리뷰를 확인하고 싶다면
CameraController::StartPreview()
를 이용해 카메라 영상을 확인할 수 있습니다. -
카메라 선택 API를 호출하지 않았다면 연결된 카메라 중 카메라 장치 목록의 첫 번째 장치가 선택됩니다.
class YourApplication {
public:
void StartPreview() {
// Get PlanetKit::CameraController instance from PlanetKit::PlanetKitManager.
auto planetKitCameraController = PlanetKit::PlanetKitManager::GetInstance()->GetCameraController();
// Start preview.
planetKitCameraController->StartPreview(m_hWnd);
}
void StopPreview() {
// Get PlanetKit::CameraController instance from PlanetKit::PlanetKitManager.
auto planetKitCameraController = PlanetKit::PlanetKitManager::GetInstance()->GetCameraController();
// Stop preview.
planetKitCameraController->StopPreview(m_hWnd);
}
private:
// Prepare your window handle (HWND) where you want to render video from the camera device.
HWND m_hWnd;
};
-
-
4.4 이전 버전에서 화면에 영상을 렌더링하는 방식과 관련해 마이그레이션할 때에는 아래 예제 코드를 참고하세요.
-
4.4 이전 버전에서 로컬 사용자의 비디오를 렌더링하는 과정은 다음과 같습니다.
-
카메라 선택
class YourApplication {
public:
void SelectCamera() {
PlanetKit::VideoCaptureManager* captureManager = PlanetKit::PlanetKitManager::GetInstance()->GetVideoCaptureManager();
static constexpr int maxCameraInfoCount = 25;
PlanetKit::SCameraInfo arrayCameraInfo[maxCameraInfoCount];
size_t nDeviceCount = 0;
captureManager->GetCapturerInfos(arrayCameraInfo, maxCameraInfoCount, &nDeviceCount);
for(size_t idx = 0; idx < nDeviceCount; ++idx) {
if(strcmp(arrayCameraInfo[idx].szDeviceUid, "camera_unique_id_that_you_want") == 0) {
if(m_videoCapture != nullptr) {
m_videoCapture->Release();
m_videoCapture = nullptr;
}
m_videoCapture = captureManager->CreateVideoCapturer(&arrayCameraInfo[idx]);
break;
}
}
}
} -
화면에 영상을 렌더링할 렌더링 클래스 생성
class YourApplication {
public:
void CreateRender() {
if(m_videoRender != nullptr) {
m_videoRender->Release();
}
// Create video render.
m_videoRender = PlanetKit::VideoRender::CreateRender(m_hMyView);
m_videoRender->AddRef();
}
private:
PlanetKit::VideoRender* m_videoRender = nullptr;
} -
비디오를 켜기 위해
PlanetKitCall::EnableVideoSend()
호출
// Prepare result handler.
class YourEnableVideoResult : PlanetKit::IResultHandler {
public:
YourEnableVideoResult(YourApplication* yourApp) {
m_yourApp = yourApp;
}
void OnResult(void* pUserData, bool bSuccess) override {
m_yourApp->VideoEnabled(bSuccess);
}
private:
YourApplication* m_yourApp = nullptr;
}
class YourApplication {
public:
void VideoEnabled(bool bSuccess) {
if(bSuccess == true) {
m_videoCapture->AddPreviewRender(m_videoRender);
m_videoCapture->Start();
}
}
void ToVideoCall() {
// Enable video call.
m_pCall->EnableVideoSend(m_videoCapture, nullptr, &m_enableVideoResult);
}
private:
PlanetKit::PlanetKitCallPtr m_pCall;
PlanetKit::VideoCaptureManager* m_videoCapture = nullptr;
PlanetKit::VideoRender* m_videoRender = nullptr;
YourEnableVideoResult m_enableVideoResult{ this };
HWND m_hMyView;
}
-
-
5.5 버전부터 로컬 사용자의 비디오를 렌더링하는 과정은 다음과 같습니다.
class YourApplication {
void ToVideoCallAsResume() {
// Enable video call.
m_pCall->EnableVideo(PlanetKit::EInitialMyVideoState::PLNK_INITIAL_MY_VIDEO_STATE_RESUME, this, [](void* pUserData, bool bSuccess) {
// Camera device will be started automatically on success of `EnableVideo()` because the first parameter is `EInitialMyVideoState::PLNK_INITIAL_MY_VIDEO_STATE_RESUME`.
if(bSuccess == true) {
YourApplication* pApp = static_cast<YourApplication*>(pUserData);
// Add my view for rendering of local user's video.
pApp->m_pCall->AddMyVideoView(pApp->m_hMyView);
// Add peer view for rendering of remote user's video.
pApp->m_pCall->AddPeerVideoView(pApp->m_hPeerView);
}
});
}
void ToVideoCallAsPaused() {
// Enable video call.
m_pCall->EnableVideo(PlanetKit::EInitialMyVideoState::PLNK_INITIAL_MY_VIDEO_STATE_PAUSE, this, [](void* pUserData, bool bSuccess) {
// Camera device will be stopped automatically on success of `EnableVideo()` because the first parameter is `EInitialMyVideoState::PLNK_INITIAL_MY_VIDEO_STATE_PAUSE`.
if(bSuccess == true) {
// Add peer view for rendering of remote user's video.
pApp->m_pCall->AddPeerVideoView(pApp->m_hPeerView);
// Add my view for rendering of local user's video.
pApp->m_pCall->AddMyVideoView(pApp->m_hMyView);
// Currently, the sending video state is paused, and you can call PlanetKitCall::ResumeMyVideo() to start video capture.
...
}
});
}
private:
PlanetKit::PlanetKitCallPtr m_pCall;
HWND m_hMyView;
HWND m_hPeerView;
}
-
Breaking change 화면 공유 기능 변경
PlanetKitManager
에서 제공하는VideoCaptureManager *GetVideoCaptureManager()
를 제거하고, 화면 공유를 제어하기 위한ScreenShareControllerPtr GetScreenShareController()
를 제공합니다.ScreenShareController::GetScreenShareInfos()
를 통해 화면 공유 정보를 획득한 후ScreenShareController::StartScreenShareCapture()
를 호출해 화면 공유를 시작할 수 있습니다.
API 변경
추가
PlanetKitCall
class 1-to-1 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()
PlanetKitConference
class 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()
ScreenShareController
class 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)
삭제
VideoCaptureManager
class 1-to-1 callGroup callVideoCapture
class 1-to-1 callGroup call
예제 코드
-
4.4 이전 버전에서는 다음과 같은 방법으로 화면 공유 기능을 사용할 수 있었습니다.
-
렌더링을 위한 렌더 클래스 생성
class YourApplication {
public:
void CreateRenderForScreenShare() {
if(m_videoRender != nullptr) {
m_videoRender->Release();
}
// Create video render.
m_videoRender = PlanetKit::VideoRender::CreateRender(m_hMyView);
m_videoRender->AddRef();
}
private:
HWND m_hWnd;
} -
화면 공유를 위한 화면 선택
class YourApplication {
public:
void SelectScreenShare() {
PlanetKit::VideoCaptureManager* captureManager = PlanetKit::PlanetKitManager::GetInstance()->GetVideoCaptureManager();
static constexpr int maxScreenShareInfoCount = 25;
PlanetKit::SScreenInfo arrayScreenShareInfo[maxScreenShareInfoCount];
size_t nScreenShareInfoCount = 0;
captureManager->GetCapturerInfos(arrayScreenShareInfo, maxScreenShareInfoCount, &nScreenShareInfoCount);
for(size_t idx = 0; idx < nScreenShareInfoCount; ++idx) {
if(strcmp(arrayScreenShareInfo[idx].szName, "screen_share_name_that_you_want") == 0) {
if(m_screenShareCapture != nullptr) {
m_screenShareCapture->Release();
m_screenShareCapture = nullptr;
}
m_screenShareCapture = captureManager->CreateVideoCapturer(&arrayScreenShareInfo[idx]);
break;
}
}
}
private:
PlanetKit::VideoCapturer* m_screenShareCapture = nullptr;
} -
화면 공유 시작
class YourScreenShareResult : public PlanetKit::IResultHandler {
public:
YourScreenShareResult(YourApplication* yourApp) {
m_yourApp = yourApp;
}
void OnResult(void* pUserData, bool bSuccess) {
m_yourApp->ScreenShareResult(bSuccess);
}
private:
YourApplication* m_yourApp = nullptr;
}
class YourApplication {
public:
void ScreenShareResult(bool bSuccess) {
// Set screen sharing capturer → `PlanetKitCall` instance.
m_pCall->SetMyScreenShareCapturer(m_screenShareCapture);
// Add renderer to capturer.
m_screenShareCapture->->AddPreviewRender(m_videoRender);
// Start screen sharing.
m_screenShareCapture->Start();
}
void StartScreenShare() {
m_pCall->StartMyScreenShare(nullptr, &m_screenShareResult);
}
private:
PlanetKit::VideoCapturer* m_screenShareCapture = nullptr;
PlanetKit::PlanetKitCall* m_pCall = nullptr;
YourScreenShareResult m_screenShareResult{ this };
}
-
-
5.5 이후 버전에서는 아래와 같은 방법으로 화면 공유를 시작할 수 있습니다.
-
새로 추가된
PlanetKitCall::AddMyScreenShareVideoView()
는 로컬 사용자의 화면 공유 동영상을 렌더링할 수 있습니다.class YourApplication {
PlanetKit::ScreenShareInfoPtr SelectScreenShare() {
auto pScreenShareController = PlanetKit::PlanetKitManager::GetInstance()->GetScreenShareController();
PlanetKit::ScreenShareInfoArray screenShareInfos;
pScreenShareController->GetScreenShareInfos(screenShareInfos);
size_t selected = 0;
for(size_t idx = 0; idx < screenShareInfos.Size(); ++idx) {
if(screenShareInfos.At(idx)->GetName() == L"screen_share_name_that_you_want") {
selected = idx;
break;
}
}
return screenShareInfos.At(selected);
}
void StartScreenShare() {
auto selectedScreenShareInfo = SelectScreenShare();
// Choose screen share infomation and start.
m_pCall->StartMyScreenShare(selectedScreenShareInfo, this, [](void* pUserData, bool bSuccess) {
if(bSuccess == true) {
YourApplication* pApp = static_cast<YourApplication*>(pUserData);
pApp->m_pCall->AddMyScreenShareVideoView(m_hScreenShareView);
}
});
}
private:
PlanetKit::PlanetKitCallPtr m_pCall;
HWNd m_hScreenShareView;
}; -
원격 사용자의 화면 공유 동영상을
PlanetKitCall::AddPeerScreenShareVideoView()
로 렌더링할 수 있습니다.class YourApplication {
void StartRenderingPeerScreenShare() {
m_pCall->AddPeerScreenShareVideoView(m_hScreenShareRenderWnd);
}
private:
PlanetKit::PlanetKitCallPtr m_pCall;
HWNd m_hScreenShareRenderWnd;
};
-
Breaking change 1대1 통화 종료 API를 서로 다른 파라미터를 갖는 3개의 API로 세분화
EndCall()
을 상황에 맞춰 쓸 수 있도록 서로 다른 파라미터를 갖는 3개의 API로 세분화했습니다.
API 변경
추가
PlanetKitCall
class 1-to-1 callvoid EndCall()
void EndCall(const WString& strUserReleaseCode)
void EndCallWithError(const WString& strUserReleaseCode)
삭제
PlanetKitCall
class 1-to-1 callbool EndCall(EDisconnectReason eCallEndReason)
Spec change 클라우드 서버에서 전달받은 데이터를 확인할 수 있는 클래스 추가
- 클라우드 서버에서 전달받은 문자열 데이터를 해석해 정보를 확인할 수 있는
CCParam
클래스를 추가했습니다.
API 변경
추가
CCParam
class 1-to-1 callconst WString& GetPeerID()
const WString& GetPeerServiceID()
EMediaType GetMediaType()
PlanetKitManager
class 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 변경
추가
EVideoMirrorType
enum 1-to-1 callGroup callPLNK_MIRROR_TYPE_AUTO = 0
PLNK_MIRROR_TYPE_MIRRORED = 1
PLNK_MIRROR_TYPE_UNMIRRORED = 2
VideoRender
class 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 변경
추가
CameraInfo
class 1-to-1 callGroup callEVideoRotation GetRotation() const
void SetRotation(EVideoRotation eRotation)
VideoRender
class 1-to-1 callGroup callvoid SetRotation(EVideoRotation eRotation)
EVideoRotation GetRotation()
Enhancement 볼륨 변경을 이벤트로 제공하는 기능 추가
- 이전에는 사용자가 볼륨값을 확인하기 위해 폴링 방식으로 주기적으로 관련 API를 호출해야 했지만, 이제 그럴 필요 없도록 볼륨 변경을 이벤트로 제공하는 이벤트 콜백 API를 추가했습니다.
- 이제 볼륨값이 변경될 때마다 등록해 둔 이벤트가 호출됩니다.
- 이벤트 발생 주기를 설정하지 않을 경우 이벤트는 500ms마다 발생합니다.
API 변경
추가
AudioDescriptionInfo
struct 1-to-1 callGroup callbool bEnableAudioDescription
unsigned int unAudioDescriptionInterval
MakeCallParam
class 1-to-1 callvoid SetAudioDescriptionInfo(bool bUse, unsigned int unAudioDescriptionInterval)
AudioDescriptionInfo GetAudioDescriptionInfo()
VerifyCallParam
class 1-to-1 callvoid SetAudioDescriptionInfo(bool bUse, unsigned int unAudioDescriptionInterval)
AudioDescriptionInfo GetAudioDescriptionInfo()
ConferenceParam
class Group callvoid SetAudioDescriptionInfo(bool bUse, unsigned int unAudioDescriptionInterval)
AudioDescriptionInfo GetAudioDescriptionInfo()
ICallEvent
class 1-to-1 callvoid OnPeerAudioDescriptionUpdated(PlanetKitCallPtr pPlanetKitCall, unsigned char ucAverageVolumeLevel)
void OnMyAudioDescriptionUpdated(PlanetKitCallPtr pPlanetKitCall, unsigned char ucAverageVolumeLevel)
IConferenceEvent
class Group callvoid OnPeersAudioDescriptionUpdated(PlanetKitConferencePtr pPlanetKitConference, unsigned char ucAverageVolumeLevel, const PeerAudioDescriptionArray& arrPeer)
void OnMyAudioDescriptionUpdated(PlanetKitConferencePtr pPlanetKitConference, const MyAudioDescription& sMyAudioDescription)
Enhancement 로컬 사용자의 미디어 상태 변경을 구독하는 기능 추가
- 통화에서 로컬 사용자의 미디어 상태 변경을 구독할 수 있는 클래스룰 추가했습니다.
API 변경
추가
PlanetKitCall
class 1-to-1 callMyMediaStatusPtr GetMyMediaStatus()
PlanetKitConference
class Group callMyMediaStatusPtr GetMyMediaStatus()
IMyMediaStatusEvent
class 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)
MyMediaStatus
class 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 변경
추가
PlanetKitCall
class 1-to-1 callbool SetMyScreenShareVideoShareMode(bool bVideoShareMode)
bool IsMyScreenShareVideoShareModeEnabled()
CallConnectedParam
class 1-to-1 callbool IsSupportVideoShareMode()
PlanetKitConference
class Group callbool SetMyScreenShareVideoShareMode(bool bVideoShareMode)
bool IsMyScreenShareVideoShareModeEnabled()
ConferenceConnectedParam
class 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 변경
추가
StatisticsScreenShareSend
class 1-to-1 callGroup callStatisticsNetwork* Network()
StatisticsVideo* Video()
StatisticsScreenShareRecv
class 1-to-1 callGroup callconst WStringOptional& GetSubgroupName()
UserIdPtr GetPeerID()
StatisticsNetwork* Network()
StatisticsVideo* Video()
Enhancement 통화 시작 실패 코드 추가
- 통화 시작 실패에 대한 코드를 추가했습니다.
API 변경
추가
EStartFailReason
enum 1-to-1 callGroup callPLNK_START_FAIL_REASON_TOO_LONG_APP_SERVER_DATA
PLNK_START_FAIL_REASON_NOT_INITIALIZED
Enhancement 오디오 우선순위를 정하는 API 제거
- 사용되지 않던
PlanetKitConference::AudioSendSetHighPriority()
API를 제거했습니다.
API 변경
삭제
PlanetKitConference
class 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 변경
추가
EDisconnectReason
enum 1-to-1 callGroup callPLNK_DISCONNECT_REASON_INTERNAL_ERROR
PLNK_DISCONNECT_REASON_USER_ERROR
PLNK_DISCONNECT_REASON_INTERNAL_KIT_ERROR
PLNK_DISCONNECT_REASON_AUDIO_TX_NO_SRC
PLNK_DISCONNECT_REASON_UNAVAILABLE_NETWORK
PLNK_DISCONNECT_REASON_SYSTEM_DESTROY
PLNK_DISCONNECT_REASON_SYSTEM_SLEEP
PLNK_DISCONNECT_REASON_SYSTEM_LOGOFF
PLNK_DISCONNECT_REASON_SERVICE_ACCESS_TOKEN_ERROR
PLNK_DISCONNECT_REASON_APP_SERVER_DATA_ERROR
PLNK_DISCONNECT_REASON_MAX_CALL_TIME_EXCEEDED
PLNK_DISCONNECT_REASON_SERVICE_TOO_MANY_REQUESTS
PLNK_DISCONNECT_REASON_DESKTOP_SCREEN_LOCKED
삭제
EDisconnectReason
enum 1-to-1 callGroup callPLNK_DISCONNECT_REASON_AUDIO_TX_NO_SRC_BY_LOCAL
PLNK_DISCONNECT_REASON_AUDIO_TX_NO_SRC_BY_REMOTE
PLNK_DISCONNECT_REASON_INTERNAL_ERROR_BY_LOCAL
PLNK_DISCONNECT_REASON_INTERNAL_ERROR_BY_REMOTE
PLNK_DISCONNECT_REASON_USER_ERROR_BY_LOCAL
PLNK_DISCONNECT_REASON_USER_ERROR_BY_REMOTE
PLNK_DISCONNECT_REASON_INTERNAL_KIT_ERROR_BY_LOCAL
PLNK_DISCONNECT_REASON_INTERNAL_KIT_ERROR_BY_REMOTE
PLNK_DISCONNECT_REASON_BAD_NETWORK_IN_CONFERENCE
PLNK_DISCONNECT_REASON_UNAVAILABLE_NETWORK_IN_CALL
PLNK_DISCONNECT_REASON_SERVICE_APIKEY_ERROR
Enhancement 전체 화면 및 특정 윈도의 스냅숏 이미지를 획득하는 기능 추가
- 전체 화면 및 특정 윈도의 스냅숏 이미지를 획득하는 API를 추가했습니다.
API 변경
추가
ScreenShareController
class 1-to-1 callGroup callVideoFramePtr GetScreenShareSnapshot(ScreenShareInfoPtr pScreenShareInfo)
Enhancement 클라우드 레코딩 기능 추가
- 1대1 통화를 레코딩하는 기능을 추가했습니다.
- 사용하기를 원하는 경우 PlanetKit 팀에 문의하세요.
API 변경
추가
ERecordOnCloudDeactivateReason
enum 1-to-1 callPLNK_RECORD_ON_CLOUD_DEACTIVATE_REASON_INTERNAL
PLNK_RECORD_ON_CLOUD_DEACTIVATE_REASON_ACTIVATION_FAILED
PLNK_RECORD_ON_CLOUD_DEACTIVATE_REASON_MAX_RECORDING_DURATION_REACHED
RecordOnCloud
class 1-to-1 callbool IsActivated()
DeactivateReasonOptional GetDeactivatedReason()
ICallEvent
class 1-to-1 callvoid OnRecordOnCloudUpdated(PlanetKitCallPtr pPlanetKitCall, RecordOnCloudPtr pRecordOnCloud)
PlanetKitCall
class 1-to-1 callvoid AcceptCall(bool bPreparation, CallStartMessagePtr pCallStartMessage = CallStartMessagePtr(nullptr), bool bRecordOnCloud = false)
MakeCallParam
class 1-to-1 callvoid SetRecordOnCloud(bool bRecord)
bool IsRecordOnCloud()
Enhancement 비디오 소스가 입력되지 않을 때 발생하는 이벤트 추가
- 일정 기간 동안 비디오 소스가 입력되지 않는다면 이벤트가 발생합니다.
API 변경
추가
ICallEvent
class 1-to-1 callvoid OnMyVideoNoSource(PlanetKitCallPtr pPlanetKitCall)
IConferenceEvent
class Group callvoid OnMyVideoNoSource(PlanetKitConferencePtr pPlanetKitConference)
Enhancement 화면 공유 종료 이벤트 추가
- 로컬 사용자가 화면 공유 중
Hold()
를 호출할 경우 화면 공유 기능을 자동으로 중단합니다.
API 변경
추가
ICallEvent
class 1-to-1 callvoid OnMyScreenShareStoppedByHold(PlanetKitCallPtr pPlanetKitCall)
IConferenceEvent
class Group callvoid OnMyScreenShareStoppedByHold(PlanetKitConferencePtr pPlanetKitConference)
Enhancement 통화 종료 이벤트 발생 시 종료 요청자를 확인할 수 있는 코드 추가
- 통화 종료 시 종료 요청자를 확인할 수 있는 코드를 추가했습니다.
API 변경
추가
EDisconnectSource
enum 1-to-1 callGroup callPLNK_DISCONNECT_SOURCE_UNDEFINED
PLNK_DISCONNECT_SOURCE_CALLEE
PLNK_DISCONNECT_SOURCE_CALLER
PLNK_DISCONNECT_SOURCE_PARTICIPANT
PLNK_DISCONNECT_SOURCE_CLOUD_SERVER
PLNK_DISCONNECT_SOURCE_APP_SERVER
CallDisconnectedParam
class 1-to-1 callEDisconnectSource GetDisconnectSource()
ConferenceDisconnectedParam
class Group callEDisconnectSource GetDisconnectSource()
Enhancement 1대1 통화를 위한 오디오 리시버 API 추가
- 로컬 사용자의 오디오 데이터를 수신하기 위한 인터페이스와 피어의 오디오 데이터를 수신하기 위한 인터페이스를 추가했습니다.
API 변경
추가
PlanetKitCall
class 1-to-1 callbool RegisterMyAudioReceiver(ICallAudioReceiver *pReceiver)
bool RegisterPeerAudioReceiver(ICallAudioReceiver *pReceiver)
bool DeregisterMyAudioReceiver(ICallAudioReceiver *pReceiver)
bool DeregisterPeerAudioReceiver(ICallAudioReceiver *pReceiver)
ICallAudioReceiver
class 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 변경
추가
MakeCallParam
class 1-to-1 callvoid PlayEndtoneRegardlessOfCallState(bool bPlayEndtone)
bool IsPlayEndtoneRegardlessOfCallState()
VerifyCallParam
class 1-to-1 callvoid PlayEndtoneRegardlessOfCallState(bool bPlayEndtone)
bool IsPlayEndtoneRegardlessOfCallState()
ConferenceParam
class Group callvoid PlayEndtoneRegardlessOfConferenceState(bool bPlayEndtone)
bool IsPlayEndtoneRegardlessOfConferenceState()
Enhancement 기본 인증서를 사용할 수 없는 경우 Windows CA 인증서를 사용하도록 개선
auth\\cacert.pem
인증서가 있는 경우 해당 인증서를 사용합니다.- 위 인증서가 없는 경우 Windows CA(Certificate Authority) 인증서를 사용합니다.
API 변경 목록
변경
-
ICallEvent
class 1-to-1 call이전 버전 PlanetKit 5.5 void OnCallConnect(PlanetKitCall *pPlanetKitCall, SCallConnectedParam *pConnectedParam)
void OnConnected(PlanetKitCallPtr pPlanetKitCall, CallConnectedParamPtr pConnectedParam)
void OnCallWaitAnswer(PlanetKitCall *pPlanetKitCall)
void OnWaitAnswer(PlanetKitCallPtr pPlanetKitCall)
void OnCallVerified(PlanetKitCall *pPlanetKitCall, SCallVerifiedParam *pVerifiedParam)
void OnVerified(PlanetKitCallPtr pPlanetKitCall, CallVerifiedParamPtr pVerifiedParam)
void OnCallPreperationFinished(PlanetKitCall *pPlanetKitCall)
void OnPreparationFinished(PlanetKitCallPtr pPlanetKitCall)
void OnCallDisconnect(PlanetKitCall *pPlanetKitCall, const SCallDisconnectedParam *pParam)
void OnDisconnected(PlanetKitCallPtr pPlanetKitCall, CallDisconnectedParamPtr pDisconnectedParam)
void OnPeerVideoPaused(PlanetKitCall *pPlanetKitCall, EVideoPauseReason eVideoPauseReason)
void OnPeerVideoPaused(PlanetKitCallPtr pPlanetKitCall, EVideoPauseReason eVideoPauseReason)
void OnPeerVideoResumed(PlanetKitCall *pPlanetKitCall)
void OnPeerVideoResumed(PlanetKitCallPtr pPlanetKitCall)
void OnShortDataReceived(PlanetKitCall *pPlanetKitCall, const SShortDataParam *pShortDataParam)
void OnReceivedShortData(PlanetKitCallPtr pPlanetKitCall, ShortDataParamPtr pShortDataParam)
void OnVideoEnabledByPeer(PlanetKitCall *pPlanetKitCall, bool bVideoCapturerStartSuccess)
void OnVideoEnabledByPeer(PlanetKitCallPtr pPlanetKitCall, bool bIsSendingMyVideo)
void OnVideoDisabledByPeer(PlanetKitCall *pPlanetKitCall, const EMediaDisabledReason eReason)
void OnVideoDisabledByPeer(PlanetKitCallPtr pPlanetKitCall, const EMediaDisabledReason eReason)
void OnPeerHold(PlanetKitCall *pPlanetKitCall, const char *szHoldReason)
void OnReceivedPeerHold(PlanetKitCallPtr pPlanetKitCall, const WString& strHoldReason)
void OnPeerUnhold(PlanetKitCall *pPlanetKitCall)
void OnReceivedPeerUnhold(PlanetKitCallPtr pPlanetKitCall)
void OnNetworkUnavailable(PlanetKitCall *pPlanetKitCall, bool bIsPeer, int nDisconnectAfterSec)
void OnNetworkUnavailable(PlanetKitCallPtr pPlanetKitCall, bool bIsPeer, int nDisconnectAfterSec)
void OnNetworkReavailable(PlanetKitCall *pPlanetKitCall, bool bIsPeer)
void OnNetworkReavailable(PlanetKitCallPtr pPlanetKitCall, bool bIsPeer)
void OnPeerMicMuted(PlanetKitCall *pPlanetKitCall)
void OnPeerMicMuted(PlanetKitCallPtr pPlanetKitCall)
void OnPeerMicUnmuted(PlanetKitCall *pPlanetKitCall)
void OnPeerMicUnmuted(PlanetKitCallPtr pPlanetKitCall)
void OnMuteRequest(PlanetKitCall *pPlanetKitCall, bool bEnableMute)
void OnReceivedMuteMyAudioRequest(PlanetKitCallPtr pPlanetKitCall, bool bEnableMute)
void OnPeerStartScreenShare(PlanetKitCall *pPlanetKitCall)
void OnPeerStartedScreenShare(PlanetKitCallPtr pPlanetKitCall)
void OnPeerStopScreenShare(PlanetKitCall *pPlanetKitCall, bool bHasReason, int nUserReason)
void OnPeerStoppedScreenShare(PlanetKitCallPtr pPlanetKitCall, bool bHasReason, int nUserReason)
void OnDataSessionIncoming(DataSessionStreamIdT nStreamId, EDataSessionType eType)
void OnDataSessionIncoming(DataSessionStreamIdT nStreamId, EDataSessionType eType)
-
IConferenceEvent
class Group call이전 버전 PlanetKit 5.5 void OnConferenceConnect(PlanetKitConference *pPlanetKitConference, SConferenceConnectedParam *pParam)
void OnConnected(PlanetKitConferencePtr pPlanetKitConference, ConferenceConnectedParamPtr pParam)
void OnConferenceDisconnect(PlanetKitConference *pPlanetKitConference, const SConferenceDisconnectedParam *pParam)
void OnDisconnected(PlanetKitConferencePtr pPlanetKitConference, ConferenceDisconnectedParamPtr pParam)
void OnPeerListUpdate(PlanetKitConference *pPlanetKitConference, ConferencePeerUpdateParam* pParam)
void OnPeerListUpdate(PlanetKitConferencePtr pPlanetKitConference, ConferencePeerUpdateParamPtr pParam)
void OnPeerVideoUpdate(PlanetKitConference *pPlanetKitConference, ConferenceVideoUpdatedParam *pParam)
void OnPeersVideoUpdated(PlanetKitConferencePtr pPlanetKitConference, ConferenceVideoUpdatedParam* pParam)
void OnPublicSubgroupPeerUpdate(PlanetKitConference *pPlanetKitConference, const ConferenceSubGroupUpdateParam *pParam)
void OnPublicSubgroupUpdated(PlanetKitConferencePtr pPlanetKitConference, const ConferenceSubgroupUpdatePeerArray& arrSubgroupUpdatePeer)
void OnShortDataReceived(PlanetKitConference *pPlanetKitConference, const SShortDataParam *pParam)
void OnReceivedShortData(PlanetKitConferencePtr pPlanetKitConference, ShortDataParamPtr pParam)
void OnPeersHold(PlanetKitConference *pPlanetKitConference, CommonReceivedHolds * pParam)
void OnReceivedPeersHold(PlanetKitConferencePtr pPlanetKitConference, const PeerHoldArray& arrPeerHold)
void OnPeersUnhold(PlanetKitConference *pPlanetKitConference)
void OnReceivedPeersUnhold(PlanetKitConferencePtr pPlanetKitConference, const PeerArray& arrPeer)
void OnPeersMicMuted(PlanetKitConference *pPlanetKitConference, PeerInfos * pPeerInfos)
void OnPeersMicMuted(PlanetKitConferencePtr pPlanetKitConference, const PeerArray& peerArray)
void OnPeersMicUnmuted(PlanetKitConference *pPlanetKitConference, PeerInfos * pPeerInfos)
void OnPeersMicUnmuted(PlanetKitConferencePtr pPlanetKitConference, const PeerArray& peerArray)
void OnMuteRequest(PlanetKitConference *pPlanetKitConference, PeerInfo* pParam, bool bEnableMute)
void OnReceivedMuteMyAudioRequest(PlanetKitConferencePtr pPlanetKitConference, PeerPtr pPeer, bool bEnableMute)
void OnReceiveAppControlMessage(PlanetKitConference *pPlanetKitConference, const void *pMessage, int nMessageSize)
void OnReceivedAppControlMessage(PlanetKitConferencePtr pPlanetKitConference, const void* pMessage, int nMessageSize)
void OnBadNetworkDetected(PlanetKitConference *pPlanetKitConference, int nWillDisconnectAfterSec)
void OnNetworkUnavailable(PlanetKitConferencePtr pPlanetKitConference, int nWillDisconnectAfterSec)
void OnBadNetworkResolved(PlanetKitConference *pPlanetKitConference)
void OnNetworkReavailable(PlanetKitConferencePtr pPlanetKitConference)
void OnDataSessionIncoming(const char* szSubgroupName, DataSessionStreamIdT nStreamId, EDataSessionType eType)
void OnDataSessionIncoming(const WStringOptional& strSubgroupName, DataSessionStreamIdT nStreamId, EDataSessionType eType)
void OnPeerScreenSharingUpdateInfo(ConferencePeerScreenSharingUpdateInfo* pPeerScreenSharingUpdateInfo)
void OnPeerScreenShareUpdated(ConferencePeerScreenShareUpdatedParam* pPeerScreenShareUpdateInfo)
void OnConferenceException(PlanetKitConference *pPlanetKitConference, ConferenceExceptionMessage* pExceptionMessage)
void OnException(PlanetKitConferencePtr pPlanetKitConference, const ConferenceExceptionArray& arrExceptionMessage)
void OnBadNetworkDetected(PlanetKitConferencePtr pPlanetKitConference, int nWillDisconnectAfterSec)
void OnNetworkUnavailable(PlanetKitConferencePtr pPlanetKitConference, int nWillDisconnectAfterSec)
void OnBadNetworkResolved(PlanetKitConferencePtr pPlanetKitConference)
void OnNetworkReavailable(PlanetKitConferencePtr pPlanetKitConference)
void OnDataSessionIncoming(const char* szSubgroupName, DataSessionStreamIdT nStreamId, EDataSessionType eType)
void OnDataSessionIncoming(const WStringOptional& strSubgroupName, DataSessionStreamIdT nStreamId, EDataSessionType eType)
-
ConferencePeerUpdateParam
class Group call이전 버전 PlanetKit 5.5 SubGroup* GetSubGroup()
SubgroupPtr GetSubgroup()
ConferencePeer* AddedAt(size_t index)
const PeerArray& GetAddedPeer()
ConferencePeer* RemovedAt(size_t index)
const PeerArray& GetRemovedPeer()
-
ConferenceVideoUpdatedParam
class Group call이전 버전 PlanetKit 5.5 PeerVideoStatus* At(size_t nIdx)
const PeerVideoStatusArray& GetPeerVideoStatus()
SubGroup* GetSubGroup()
SubgroupPtr GetSubgroup()
-
ConferenceSubgroupUpdatePeer
class Group call이전 버전 PlanetKit 5.5 ConferencePeerInfo* GetPeerInfo() const
PeerPtr GetPeer() const
const CommonStringArray* GetSubscribedSubgroup() const
const WStringArray& GetSubscribedSubgroupNames() const
const CommonStringArray* GetUnsubscribedSubgroup() const
const WStringArray& GetUnsubscribedSubgroup() const
-
ConferenceException
class Group call이전 버전 PlanetKit 5.5 ConferencePeer* GetPeer()
PeerPtr GetPeer()
SubGroup* GetSubGroup()
SubgroupPtr GetSubgroup()
const char* GetMessage()
const WString& GetMessage()
-
SCallConnectedParam
struct →CallConnectedParam
class 1-to-1 call이전 버전 PlanetKit 5.5 SCallInitData sCalleeInitData
CallStartMessagePtr GetPeerStartMessage()
bool bVideoSendHWCodecEnabled
bool IsVideoSendHardwareCodecEnabled()
-
SCallVerifiedParam
struct →CallVerifiedParam
class 1-to-1 call이전 버전 PlanetKit 5.5 SCallInitData sCalleeInitData
CallStartMessagePtr GetPeerStartMessage()
-
SCallDisconnectedParam
struct →CallDisconnectedParam
class 1-to-1 call이전 버전 PlanetKit 5.5 bool bByRemote
bool IsDisconnectedByRemote()
EDisconnectReason eReason
EDisconnectReason GetReason()
const char* szUserRelCode
const WString& GetUserReleaseCode()
-
SConferenceConnectedParam
struct →ConferenceConnectedParam
class Group call이전 버전 PlanetKit 5.5 bool bVideoSendHWCodecEnabled
bool IsVideoSendHardwareCodecEnabled()
-
SConferenceDisconnectedParam
struct →ConferenceDisconnectedParam
class Group call이전 버전 PlanetKit 5.5 bool bByRemote
bool IsDisconnectedByRemote()
EDisconnectReason eEndReason
EDisconnectReason GetReason()
const char* szUserRelCode
const WString& GetUserReleaseCode()
-
ConferenceExceptionMessage
class →ConferenceExceptionArray
class Group call -
ConferencePeerScreenSharingUpdateInfo
class →ConferencePeerScreenShareUpdatedParam
class Group call이전 버전 PlanetKit 5.5 ConferencePeer* GetPeer()
PeerPtr GetPeer()
SubGroup* GetSubGroup()
SubgroupPtr GetSubgroup()
EScreenSharingState ScreenSharingState()
EScreenShareState ScreenShareState()
-
PlanetKitCall
class 1-to-1 call이전 버전 PlanetKit 5.5 bool SendShortData(const SShortData *pShortData, void *pResultUserData, IResultHandler *pResultHandler)
bool SendShortData(const WString& strType, void* pData, unsigned int nSize, void* pUserData = nullptr, ResultCallback pCallback = nullptr)
bool Hold(const char *szHoldReason, bool bPauseReceive, void *pResultUserData, IResultHandler *pResultHandler)
bool Hold(const WStringOptional& strHoldReason = NullOptional, void* pUserData = nullptr, ResultCallback pCallback = nullptr)
bool MuteMyAudio(bool bMute, void *pMuteResultUserData, IResultHandler *pMuteResultHandler)
bool MuteMyAudio(bool bMute, void *pUserData = nullptr, ResultCallback pCallback = nullptr)
bool PauseMyVideo(void *pResultUserData, IResultHandler *pResultHandler)
bool PauseMyVideo(void* pUserData = nullptr, ResultCallback pCallback = nullptr)
bool ResumeMyVideo(void *pResultUserData, IResultHandler *pResultHandler)
bool ResumeMyVideo(void* pUserData = nullptr, ResultCallback pCallback = nullptr)
bool EnableVideo(void *pResultUserData, IResultHandler *pResultHandler)
bool EnableVideo(void* pUserData = nullptr, ResultCallback pCallback = nullptr)
bool DisableVideo(EMediaDisabledReason eDisableReason, void *pResultUserData, IResultHandler *pResultHandler)
bool DisableVideo(EMediaDisabledReason eDisableReason = PLNK_MEDIA_DISABLE_REASON_USER, void* pUserData = nullptr, ResultCallback pCallback = nullptr)
bool Unhold(void *pResultUserData, IResultHandler *pResultHandler)
bool Unhold(void* pUserData = nullptr, ResultCallback pCallback = nullptr)
bool RequestPeerMute(bool bMute, void *pResultUserData, IResultHandler *pResultHandler)
bool RequestPeerMute(bool bMute, void* pUserData = nullptr, ResultCallback pCallback = nullptr)
bool SilencePeerAudio(bool bSilence, void *pResultUserData, IResultHandler *pResultHandler)
bool SilencePeerAudio(bool bSilence, void* pUserData = nullptr, ResultCallback pCallback = nullptr)
bool StartMyScreenShare(ScreenShareInfoPtr pScreenShareInfo, void *pResultUserData, IResultHandler *pResultHandler)
bool StopMyScreenShare(void* pUserData = nullptr, ResultCallback pCallback = nullptr)
bool StopMyScreenShare(void *pResultUserData, IResultHandler *pResultHandler)
bool StopMyScreenShare(void* pUserData = nullptr, ResultCallback pCallback = nullptr)
bool StopMyScreenShare(int nUserReason, void *pResultUserData, IResultHandler *pResultHandler
bool StopMyScreenShare(int nUserReason, void* pUserData = nullptr, ResultCallback pCallback = nullptr)
bool StartUserAcousticEchoCancellerReference(void *pResultUserData, IResultHandler *pResultHandler)
bool StartUserAcousticEchoCancellerReference(void *pUserData = nullptr, ResultCallback pCallback = nullptr)
bool StopUserAcousticEchoCancellerReference(void *pResultUserData, IResultHandler *pResultHandler)
bool StopUserAcousticEchoCancellerReference(void* pUserData = nullptr, ResultCallback pCallback = nullptr)
bool MakeRecvDataSession(int nStreamId, IDataSessionReceiver *pIDataSessionReceiver, NULLABLE void *pResultUserData, NULLABLE IDataSessionHander *pResultHandler, void *pExceptionUserData, IDataSessionExceptionHandler *pExceptionHandler)
bool MakeInboundDataSession(int nStreamId, NULLABLE void* pResultUserData, IInboundDataSessionHandler* pDataSessionHandler)
bool MakeSendDataSession(int nStreamId, EDataSessionType eType, NULLABLE void *pResultUserData, NULLABLE IDataSessionHander* pResultHandler, void *pExceptionUserData, IDataSessionExceptionHandler *pExceptionHandler)
bool MakeOutboundDataSession(int nStreamId, EDataSessionType eType, NULLABLE void* pResultUserData, IOutboundDataSessionHandler* pDataSessionHandler)
void AcceptCall(EMediaType eMediaType, SCallInitData *pCallInitData)
void AcceptCall(bool bPreparation, CallStartMessagePtr pCallStartMessage = CallStartMessagePtr(nullptr), EInitialMyVideoState eInitialMyVideoState = PLNK_INITIAL_MY_VIDEO_STATE_RESUME, bool bRecordOnCloud = false)
bool EnableVideoSend(VideoCapturer *pVideoCaptuer, void *pResultUserData, IResultHandler *pResultHandler)
bool EnableVideo(EInitialMyVideoState eInitialMyVideoState = PLNK_INITIAL_MY_VIDEO_STATE_RESUME, void* pUserData = nullptr, ResultCallback pCallback = nullptr)
bool DisableVideoSend(void *pResultUserData, IResultHandler *pResultHandler)
bool DisableVideo(EMediaDisabledReason eDisableReason = PLNK_MEDIA_DISABLE_REASON_USER, void* pUserData = nullptr, ResultCallback pCallback = nullptr)
-
PlanetKitConference
class Group call이전 버전 PlanetKit 5.5 bool RequestPeerVideo(const char *szPeerId, const char *szPeerServiceId, const char *szSubGroupName, EVideoResolution eVideoResolution, void* pResultUserData, IRequestVideoResultHandler* pResultHandler, void* pReqVidResResultUserData, IRequestVideoResultHandler* pReqVidResResultHander)
bool RequestPeerVideo(UserIdPtr pPeerId, const WStringOptional& strSubgroupName, EVideoResolution eVideoResolution, void* pUserData, RequestPeerVideoResolutionCallback pCallback)
bool StopPeerVideo(const char *szPeerId, const char *szPeerServiceId, const char *szSubGroupName, void* pUserData, IRequestVideoResultHandler* pResultHandler)
bool StopPeerVideo(UserIdPtr pPeerId, const WStringOptional& strSubgroupName, void* pUserData = nullptr, RequestPeerVideoResultCallback pCallback = nullptr)
bool SendShortData(const SShortData *pShortData, SShortDataTarget *pTargets, unsigned int unTargetCount, void *pResultUserData, IResultHandler *pResultHandler)
bool SendShortData(const WString& strType, void* pData, unsigned int nSize, UserIdPtr pPeerId, void* pUserData = nullptr, ResultCallback pCallback = nullptr)
bool Hold(const char *szHoldReason, void *pResultUserData, IResultHandler *pResultHandler)
bool Hold(const WStringOptional& strHoldReason = NullOptional, void* pUserData = nullptr, ResultCallback pCallback = nullptr)
bool RequestMutePeerAudioSend(const char *szPeerId, const char *szPeerServiceId, bool bMute, void *pResultUserData, IResultHandler *pResultHandler)
bool RequestPeerMute(UserIdPtr pPeerId, bool bMute, void* pUserData = nullptr, ResultCallback pCallback = nullptr)
bool StartMyScreenShare(const char* szSubgroupName, void *pResultUserData, IResultHandler *pResultHandler)
bool StartMyScreenShare(ScreenShareInfoPtr pScreenShareInfo, const WStringOptional& strSubgroupName, void* pUserData = nullptr, ResultCallback pCallback = nullptr)
bool ChangeMyScreenShareGroup(const char* szToSubgroupName, void *pResultUserData, IResultHandler *pResultHandler)
bool ChangeMyScreenShareDestination(const WString& strToSubgroupName, void* pUserData = nullptr, ResultCallback pCallback = nullptr)
bool RequestPeerScreenShare(const char* szPeerId, const char* szPeerServiceId, const char* szSubgroupName, void *pResultUserData, IRequestVideoResultHandler* pResultHandler)
bool RequestPeerScreenShare(UserIdPtr pPeerId, const WStringOptional& strSubgroupName, void* pUserData, RequestPeerVideoResultCallback pCallback)
bool StopPeerScreenShare(const char* szPeerId, const char* szPeerServiceId, const char* szSubgroupName, void *pResultUserData, IRequestVideoResultHandler* pResultHandler)
bool StopPeerScreenShare(UserIdPtr pPeerId, const WStringOptional& strSubgroupName, void* pUserData, RequestPeerVideoResultCallback pCallback)
const char* MyDisplayName()
const WStringOptional& GetMyDisplayName()
bool MuteMyAudio(bool bMute, void *pMuteResultUserData, IResultHandler *pMuteResultHandler)
bool MuteMyAudio(bool bMute, void *pUserData = nullptr, ResultCallback pCallback = nullptr)
bool PauseMyVideo(void *pPauseResultUserData, IResultHandler *pPauseResultHandler)
bool PauseMyVideo(void* pUserData = nullptr, ResultCallback pCallback = nullptr)
bool ResumeMyVideo(void *pResumeResultUserData, IResultHandler *pResumeResultHandler)
bool ResumeMyVideo(void* pUserData = nullptr, ResultCallback pCallback = nullptr)
bool EnableVideo(void *pResultUserData, IResultHandler *pResultHandler)
bool EnableVideo(void *pUserData = nullptr, ResultCallback pCallback = nullptr)
bool DisableVideo(void *pResultUserData, IResultHandler *pResultHandler)
bool DisableVideo(void* pUserData = nullptr, ResultCallback pCallback = nullptr)
bool Unhold(void* pResultUserData, IResultHandler* pResultHandler)
bool Unhold(void* pUserData = nullptr, ResultCallback pCallback = nullptr)
bool RequestPeerMute(UserIdPtr pPeerId, bool bMute, void* pUserData, IResultHandler* pResultHandler)
bool RequestPeerMute(UserIdPtr pPeerId, bool bMute, void* pUserData = nullptr, ResultCallback pCallback = nullptr)
bool RequestPeersMute(bool bMute, void* pUserData, IResultHandler* pResultHandler)
bool RequestPeersMute(bool bMute, void* pUserData = nullptr, ResultCallback pCallback = nullptr)
bool SilencePeersAudio(bool bSilence, void *pResultUserData, IResultHandler *pResultHandler)
bool SilencePeersAudio(bool bSilence, void* pUserData = nullptr, ResultCallback pCallback = nullptr)
bool StopMyScreenShare(void* pUserData, IResultHandler* pResultHandler)
bool StopMyScreenShare(void* pUserData = nullptr, ResultCallback pCallback = nullptr)
bool StopMyScreenShare(int nUserReason, void* pUserData, IResultHandler* pResultHandler)
bool StopMyScreenShare(int nUserReason, void* pUserData = nullptr, ResultCallback pCallback = nullptr)
bool StartUserAcousticEchoCancellerReference(void* pUserData, IResultHandler* pResultHandler)
bool StartUserAcousticEchoCancellerReference(void* pUserData = nullptr, ResultCallback pCallback = nullptr)
bool StopUserAcousticEchoCancellerReference(void *pResultUserData, IResultHandler *pResultHandler)
bool StopUserAcousticEchoCancellerReference(void* pUserData = nullptr, ResultCallback pCallback = nullptr)
bool EnableVideoSend(VideoCapturer *pVideoCaptuer, void *pResultUserData, IResultHandler *pResultHandler)
bool EnableVideo(EInitialMyVideoState eInitialMyVideoState = PLNK_INITIAL_MY_VIDEO_STATE_RESUME, void* pUserData = nullptr, ResultCallback pCallback = nullptr)
bool DisableVideoSend(void *pResultUserData, IResultHandler *pResultHandler)
bool DisableVideo(EMediaDisabledReason eDisableReason = PLNK_MEDIA_DISABLE_REASON_USER, void* pUserData = nullptr, ResultCallback pCallback = nullptr)
-
AudioDevice
class 1-to-1 callGroup call이전 버전 PlanetKit 5.5 bool PlayFile(const char* szPath, unsigned int unLoop)
bool PlayFile(const WString& strFilePath, unsigned int unLoop)
-
MakeCallParam
class 1-to-1 call이전 버전 PlanetKit 5.5 static CallInitParam* CreateMakeCallParamWithAccessToken(const InitUserId & myID, const InitUserId & peerID, const char* szKey, int nKeyLen)
static MakeCallParamPtr CreateWithAccessToken(UserIdPtr pMyID, UserIdPtr pPeerID, const WString& strToken)
static CallInitParam* CreateMakeCallParamWithAPIKey(const InitUserId & myID, const InitUserId & peerID, const char* szKey)
static MakeCallParamPtr CreateWithAPIKey(UserIdPtr pMyID, UserIdPtr pPeerID, const WString& strKey)
const char* RingTonePath()
const WString& GetRingTonePath()
const char* RingBackTonePath()
const WString& GetRingBackTonePath()
const char* HoldTonePath()
const WString& GetHoldTonePath()
const char* GetStid()
const wchar_t* GetAppServerData()
void SetStid(const char* szStid)
void SetAppServerData(const wchar_t* szAppServerData)
void SetRingTonePath(const char* szRingTonePath)
void SetRingTonePath(const WString& strRingTonePath)
void SetRingBackTonePath(const char* szRingBackTonePath)
void SetRingBackTonePath(const WString& strRingBackTonePath)
void SetHoldTonePath(const char* szHoldTonePath)
void SetHoldTonePath(const WString& strHoldTonePath)
-
VerifyCallParam
class 1-to-1 call이전 버전 PlanetKit 5.5 static CallInitParam* CreateVerifyCallParam(const InitUserId & myID, const char* szCcParam)
static VerifyCallParamPtr Create(UserIdPtr pMyID, CCParamPtr pCCParam)
const char* RingTonePath()
const WString& GetRingTonePath()
const char* RingBackTonePath()
const WString& GetRingBackTonePath()
const char* HoldTonePath()
const WString& GetHoldTonePath()
void SetRingTonePath(const char* szRingTonePath)
void SetRingTonePath(const WString& strRingTonePath)
void SetRingBackTonePath(const char* szRingBackTonePath)
void SetRingBackTonePath(const WString& strRingBackTonePath)
void SetHoldTonePath(const char* szHoldTonePath)
void SetHoldTonePath(const WString& strHoldTonePath)
-
CommonSetSharedContent
class 1-to-1 callGroup call이전 버전 PlanetKit 5.5 const char* PeerId()
UserIdPtr GetPeerID()
const char* ServiceId()
UserIdPtr GetPeerID()
-
ConferenceParam
class Group call이전 버전 PlanetKit 5.5 static ConferenceJoinParam * CreateWithAccessToken(const InitUserId & myID, const char* szAccessToken, int nAccessTokenLength)
static ConferenceParamPtr CreateWithAPIKey(UserIdPtr pMyID, const WString& strRoomID, const WString& strRoomServiceID, const WString& strAPIKey)
static ConferenceJoinParam* CreateWithAPIKey(const InitUserId & myID, const char* szAPIKey)
static ConferenceParamPtr CreateWithAccessToken(UserIdPtr pMyID, const WString& strRoomID, const WString& strRoomServiceID, const WString& strToken)
const char* DisplayName()
const WStringOptional& GetDisplayName()
void SetDisplayName(const char* szMyDisplayName)
void SetDisplayName(const WStringOptional& strMyDisplayName)
const char* RoomId()
const WString& GetRoomId()
void SetRoomId(const char* szRoomId)
void SetRoomId(const WString& strRoomId)
const char* RoomServiceId()
const WString& GetRoomServiceId()
void SetRoomServiceId(const char *szRoomServiceId)
void SetRoomId(const WString& strRoomId)
const char* GetStid()
const wchar_t* GetAppServerData()
void SetStid(const char* szStid)
void SetAppServerData(const wchar_t* szAppServerData)
-
PlanetKitManager
class 1-to-1 callGroup call이전 버전 PlanetKit 5.5 bool UpdateServerUrl(const char *szServerUrl)
bool UpdateServerUrl(const WString& strServerUrl)
bool GetServerUrl(char * szServerUrl, size_t nBufferSize)
WString& GetServerUrl()
const char* PlanetKitVersion()
const WString& PlanetKitVersion()
-
StatisticsVideoRecv
class 1-to-1 callGroup call이전 버전 PlanetKit 5.5 const char* PeerId()
UserIdPtr GetPeerID()
const char* PeerServiceId()
UserIdPtr GetPeerID()
const char* SubgroupName()
const WStringOptional& GetSubgroupName()
-
StatisticsScreenShareRecv
class 1-to-1 callGroup call이전 버전 PlanetKit 5.5 const char* PeerId()
UserIdPtr GetPeerID()
const char* PeerServiceId()
UserIdPtr GetPeerID()
const char* SubgroupName()
const WStringOptional& GetSubgroupName()
-
SubGroup
class - Group call이전 버전 PlanetKit 5.5 const char *GetSubGroupName()
const WStringOptional& GetSubgroupName()
-
SubGroupManager
class Group call이전 버전 PlanetKit 5.5 bool SubscribeSubgroup(const char *szSubgroupName, ESubgroupPeerUpdateType eUpdateType, bool bEnableVideoUpdate, bool bUseDataSession, void *pResultUserData, ISubscribeSubgroupResultHandler *pResultHandler)
bool SubscribeSubgroup(const WString& strSubgroupName, ESubgroupPeerUpdateType eUpdateType, bool bEnableVideoUpdate, bool bUseDataSession, void* pUserData = nullptr, SubscribeResult pCallback = nullptr)
bool UnsubscribeSubgroup(const char *szSubgroupName, void *pResultUserData, IUnsubscribeSubgroupResultHandler *pResultHandler)
bool UnsubscribeSubgroup(const WString& strSubgroupName, void* pUserData = nullptr, UnsubscribeResult pCallback = nullptr)
SubGroupOptional GetSubGroup(const char *szSubGroupName)
SubgroupOptional GetSubgroup(const WString& strSubgroupName)
SubGroupOptional GetSubGroup(const char *szSubGroupName)
SubgroupPtr GetMainRoom()
bool ChangeMyAudioSend(const char *szDstSubgroupName, void *pResultUserData, IResultHandler *pResultHandler)
bool ChangeMyAudioDestination(const WString& strDestinationSubgroupName, void* pUserData = nullptr, ResultCallback pCallback = nullptr)
bool ChangeMyAudioSend(const char *szDstSubgroupName, void *pResultUserData, IResultHandler *pResultHandler)
bool ChangeMyAudioDestinationToMainRoom(void* pUserData = nullptr, ResultCallback pCallback = nullptr)
bool TagMainRoomAudioSend(const char *szTagSubgroupName, void *pResultUserData, IResultHandler *pResultHandler)
bool SetTagMyAudioOfMainRoom(const WString& strTagSubgroupName, void* pUserData = nullptr, ResultCallback pCallback = nullptr)
bool SilenceAudio(const char *szSubgroupName, bool bSilence, void *pResultUserData, IResultHandler *pResultHandler)
bool SilencePeersAudio(const WStringOptional& strSubgroupName, bool bSilence, void* pUserData = nullptr, ResultCallback pCallback = nullptr)
bool EnableAutoVolumeControl(const char **szFocusSubgroups, size_t nFocusSubgroupCnt, void *pResultUserData, IResultHandler *pResultHandler)
bool SetPeersAudioAutoVolumeControl(const WStringArray& arrSubgroupNames, void* pUserData = nullptr, ResultCallback pCallback = nullptr)
bool SetPeerVolumeSetting(const char *szPeerId, const char *szPeerServiceId, bool bSetForAllSubgroups, const char *szSubgroupNameToApply, unsigned char ucVolume, void *pResultUserData, IResultHandler *pResultHandler)
bool SetPeerAudioVolumeLevelSetting(UserIdPtr pPeerId, bool bSetForAllSubgroups, const WStringOptional& strSubgroupNameToApply, unsigned char ucVolume, void* pUserData = nullptr, ResultCallback pCallback = nullptr)
const String& GetMyVideoSubGroupName()
WStringOptional GetMyVideoSubgroupName()
bool VideoSendChangeSubgroup(const char *szDstSubgroupName, void *pResultUserData, IResultHandler *pResultHandler)
bool ChangeMyVideoDestination(const WString& strDestinationSubgroupName, void* pUserData = nullptr, ResultCallback pCallback = nullptr)
bool VideoSendChangeSubgroup(const char *szDstSubgroupName, void *pResultUserData, IResultHandler *pResultHandler)
bool ChangeMyVideoDestinationToMainRoom(void* pUserData = nullptr, ResultCallback pCallback = nullptr)
bool ChangeMyAudioDestinationToMainRoom(void* pUserData, IResultHandler* pCallback)
bool ChangeMyAudioDestinationToMainRoom(void* pUserData = nullptr, ResultCallback pCallback = nullptr)
bool ClearTagMyAudioOfMainRoom(void* pUserData, IResultHandler* pCallback)
bool ClearTagMyAudioOfMainRoom(void* pUserData = nullptr, ResultCallback pCallback = nullptr)
bool SetPeersAudioAutoVolumeControl(const WStringArray& arrSubgroupNames, void* pUserData, IResultHandler* pCallback)
bool SetPeersAudioAutoVolumeControl(const WStringArray& arrSubgroupNames, void* pUserData = nullptr, ResultCallback pCallback = nullptr)
bool ClearPeersAudioAutoVolumeControl(void *pResultUserData, IResultHandler *pResultHandler)
bool ClearPeersAudioAutoVolumeControl(void* pUserData = nullptr, ResultCallback pCallback = nullptr)
-
IResultHandler
class →using ResultCallback = void(*)(void* pUserData, bool bSuccess)
1-to-1 callGroup call -
ISubscribeSubgroupResultHandler
class →using SubscribeResult = void(*)(SubgroupPtr pSubgroup, bool bSuccess, ESubgroupSubscribeFailReason eReason, void* pUserData)
Group call -
IUnsubscribeSubgroupResultHandler
class →using UnsubscribeResult = void(*)(SubgroupPtr pSubgroup, bool bSuccess, ESubgroupUnsubscribeFailReason eReason, void* pUserData)
Group call -
PeerControl
class Group call이전 버전 PlanetKit 5.5 bool StartScreenShare(const wchar_t* szSubgroupName, void* pUserData, IResultHandler* pResultHandler)
bool StartScreenShare(const WStringOptional& strSubgroupName, void* pUserData = nullptr, ResultCallback pCallback = nullptr)
bool StopScreenShare(void* pUserData, IResultHandler* pResultHandler)
bool StopScreenShare(void* pUserData = nullptr, ResultCallback pCallback = nullptr)
-
PeerInfo
class →Peer
class Group call이전 버전 PlanetKit 5.5 const char* PeerId()
UserIdPtr GetUserID()
const char* ServiceId()
UserIdPtr GetUserID()
-
SManagerInitParam
struct →Configuration
class 1-to-1 callGroup call이전 버전 PlanetKit 5.5 char* szBasePath
const WString& GetBasePath()
char* szDbPath
const WString& GetDatabasePath()
int nLogLevel
void SetLogLevel(ELogLevel eLogLevel)
ELogLevel GetLogLevel()
bEnableFileLog
void EnableLogOutput(bool bEnable)
bool IsLogOutputEnabled()
-
SCallInitData
struct →CallStartMessage
class 1-to-1 call이전 버전 PlanetKit 5.5 bool bPreperation
bool IsInPreparation()
char data
static CallStartMessagePtr Create(const WString& strMessage)
const WStringOptional& GetMessage()
-
SCallVerifiedParam
struct →CallVerifiedParam
class 1-to-1 call이전 버전 PlanetKit 5.5 SCallInitData sCalleeInitData
CallStartMessagePtr GetPeerStartMessage()
-
ConnectParam
class →MakeCallParam
class 1-to-1 call이전 버전 PlanetKit 5.5 void SetStid(const char *szStid)
void SetAppServerData(const WString& strAppServerData)
const char* GetStid()
const WString& GetAppServerData()
-
ConnectParam
class →ConferenceParam
class Group call이전 버전 PlanetKit 5.5 void SetStid(const char *szStid)
void SetAppServerData(const WString& strAppServerData)
const char* GetStid()
const WString& GetAppServerData()
-
SubGroup
class Group call이전 버전 PlanetKit 5.5 bool MakeRecvDataSession(int nStreamId, IDataSessionReceiver *pIDataSessionReceiver, NULLABLE void *pResultUserData, NULLABLE IDataSessionHander *pResultHandler, void *pExceptionUserData, IDataSessionExceptionHandler *pExceptionHandler)
bool MakeInboundDataSession(int nStreamId, NULLABLE void *pResultUserData, IInboundDataSessionHandler* pDataSessionHandler)
bool MakeSendDataSession(int nStreamId, EDataSessionType eType, NULLABLE void *pResultUserData, NULLABLE IDataSessionHander* pResultHandler, void *pExceptionUserData, IDataSessionExceptionHandler *pExceptionHandler)
bool MakeOutboundDataSession(int nStreamId, EDataSessionType eType, NULLABLE void* pResultUserData, IOutboundDataSessionHandler* pDataSessionHandler)
-
IDataSessionHander
class →IInboundDataSessionHandler
,IOutboundDataSessionHandler
class 1-to-1 callGroup call
추가
AutoPtr
class 1-to-1 callGroup 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->()
Optional
class 1-to-1 callGroup callbool HasValue() const
const T* operator->() const
T* operator->()
const T& operator*() const
T& operator*()
Optional<T>& operator=(const Optional<T>& src)
Optional<T>& operator=(const T& src)
T& Value()
const T& Value() const
Array
class 1-to-1 callGroup callconst T* Buffer() const
T* Buffer()
void Resize(size_t size)
void SetAt(size_t idx, const T& rhs)
size_t Size() const
T& At(size_t idx) const
T& operator[](size_t idx) const
WString
class 1-to-1 callGroup calloperator const wchar_t*() const
const wchar_t* c_str() const
size_t Size() const
WString& Append(const wchar_t* rhs)
bool operator==(const wchar_t* rhs) const
bool operator==(const WString& rhs) const
bool operator!=(const WString& rhs) const
const wchar_t operator[] (int idx)
WString& operator=(const wchar_t* src)
WString& operator=(const WString& src)
WString& operator+=(const wchar_t* rhs)
WString& operator+=(const WString& rhs)
WString Substring(const unsigned int unStart, const unsigned unLength = 0) const
CallConnectedParam
class 1-to-1 callCallStartMessagePtr GetPeerStartMessage()
bool ShouldFinishPreparation()
bool IsInPreparation()
bool IsVideoSendHardwareCodecEnabled()
bool IsSupportDataSession()
bool IsSupportVideoShareMode()
CallVerifiedParam
class 1-to-1 callCallStartMessagePtr GetPeerStartMessage()
bool IsPeerUsePreparation()
CallDisconnectedParam
class 1-to-1 callbool IsDisconnectedByRemote()
EDisconnectReason GetReason()
const WString& GetUserReleaseCode()
EDisconnectSource GetDisconnectSource()
ConferenceDisconnectedParam
class Group callbool IsDisconnectedByRemote()
EDisconnectReason GetReason()
EDisconnectSource GetDisconnectSource()
const WString& GetUserReleaseCode()
ConferencePeerScreenShareUpdatedParam
class Group callPeerPtr GetPeer()
SubgroupPtr GetSubgroup()
EScreenShareState ScreenShareState()
VerifyCallParam
class 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()
ConferenceParam
class 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)
Peer
class 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()
PeerControl
class 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)
IPeerControlEvent
class 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)
Configuration
class 1-to-1 callGroup callConfigurationPtr Create(const WString& strBasePath, const WString& strDatabasePath)
void SetLogSizeLimit(ELogSizeLimit eLogSizeLimit)
ELogSizeLimit GetLogSizeLimit()
CCParam
class 1-to-1 callconst WString& GetPeerID()
const WString& GetPeerServiceID()
EMediaType GetMediaType()
PlanetKitManager
class 1-to-1 callCCParamPtr CreateCCParam(const char* strCCParam)
bool SendShortDataToAllPeers(const WString& strType, void* pData, unsigned int nSize, void* pUserData = nullptr, ResultCallback pCallback = nullptr)
PlanetKitCall
class 1-to-1 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)
EDataSessionFailReason
enum 1-to-1 callGroup callPLNK_DATA_SESS_FAIL_REASON_NONE
PLNK_DATA_SESS_FAIL_REASON_INTERNAL
PLNK_DATA_SESS_FAIL_REASON_UNSUPPORTED
PLNK_DATA_SESS_FAIL_REASON_NOT_INCOMING
PLNK_DATA_SESS_FAIL_REASON_ALREADY_EXIST
PLNK_DATA_SESS_FAIL_REASON_INVALID_ID
PLNK_DATA_SESS_FAIL_REASON_INVALID_TYPE
Subgroup
class Group callbool GetInboundDataSession(int nStreamId, InboundDataSessionPtr* pResult)
bool GetOutboundDataSession(int nStreamId, OutboundDataSessionPtr* pResult)
IInboundDataSessionHandler
class 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)
IOutboundDataSessionHandler
class 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)
InboundDataSession
class 1-to-1 callGroup callDataSessionStreamIdT GetStreamId()
IInboundDataSessionHandler* GetReceiver()
OutboundDataSession
class 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)
EVideoControlResult
enum 1-to-1 callGroup callEVideoControlResult_PreviewAlreadyExist
EVideoControlResult_CreateRenderFail
EVideoControlResult_CameraIsAlreadyInUseByAnotherApplication
EVideoControlResult_PreviewHandleIsInvalid
EVideoControlResult_PreviewReceiverIsInvalid
EInitialMyVideoState
enum 1-to-1 callGroup callPLNK_INITIAL_MY_VIDEO_STATE_RESUME
PLNK_INITIAL_MY_VIDEO_STATE_PAUSE
ECameraControlResult
enum 1-to-1 callGroup callPLNK_CAMERA_CONTROL_RESULT_NONE
PLNK_CAMERA_CONTROL_RESULT_FAILED_TO_CREATE_CAMERA_DEVICE
PLNK_CAMERA_CONTROL_RESULT_SELECTED_CAMERA_IS_REMOVED
PLNK_CAMERA_CONTROL_RESULT_NO_CAMERA_SELECTED
CameraController
class 1-to-1 callGroup 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)
PlanetKitConference
class 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()
ScreenShareController
class 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)
EVideoMirrorType
enum 1-to-1 callGroup callPLNK_MIRROR_TYPE_AUTO = 0
PLNK_MIRROR_TYPE_MIRRORED = 1
PLNK_MIRROR_TYPE_UNMIRRORED = 2
VideoRender
class 1-to-1 callGroup callvoid SetMirrorType(EVideoMirrorType eMirrorType)
EVideoMirrorType GetMirrorType()
void SetRotation(EVideoRotation eRotation)
EVideoRotation GetRotation()
CameraInfo
class 1-to-1 callGroup callEVideoRotation GetRotation() const
void SetRotation(EVideoRotation eRotation)
AudioDescriptionInfo
struct 1-to-1 callGroup callbool bEnableAudioDescription
unsigned int unAudioDescriptionInterval
IMyMediaStatusEvent
class 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)
MyMediaStatus
class Group callbool Register(IMyMediaStatusEvent* pListener)
bool Unregister()
WStringOptional GetVideoSubgroupName()
bool GetVideoStatus(OUT VideoStatus* pResultStatus)
WStringOptional GetScreenShareSubgroupName()
EScreenShareState GetScreenShareState()
bool IsAudioMuted()
ConferenceConnectedParam
class 1-to-1 callbool IsSupportVideoShareMode()
StatisticsScreenShareSend
class 1-to-1 callGroup callStatisticsNetwork* Network()
StatisticsVideo* Video()
StatisticsScreenShareRecv
class 1-to-1 callGroup callconst WStringOptional& GetSubgroupName()
UserIdPtr GetPeerID()
StatisticsNetwork* Network()
StatisticsVideo* Video()
EStartFailReason
enum 1-to-1 callGroup callPLNK_START_FAIL_REASON_TOO_LONG_APP_SERVER_DATA
PLNK_START_FAIL_REASON_NOT_INITIALIZED
EDisconnectReason
enum 1-to-1 callGroup callPLNK_DISCONNECT_REASON_INTERNAL_ERROR
PLNK_DISCONNECT_REASON_USER_ERROR
PLNK_DISCONNECT_REASON_INTERNAL_KIT_ERROR
PLNK_DISCONNECT_REASON_AUDIO_TX_NO_SRC
PLNK_DISCONNECT_REASON_UNAVAILABLE_NETWORK
PLNK_DISCONNECT_REASON_SYSTEM_DESTROY
PLNK_DISCONNECT_REASON_SYSTEM_SLEEP
PLNK_DISCONNECT_REASON_SYSTEM_LOGOFF
PLNK_DISCONNECT_REASON_SERVICE_ACCESS_TOKEN_ERROR
PLNK_DISCONNECT_REASON_APP_SERVER_DATA_ERROR
PLNK_DISCONNECT_REASON_MAX_CALL_TIME_EXCEEDED
PLNK_DISCONNECT_REASON_SERVICE_TOO_MANY_REQUESTS
PLNK_DISCONNECT_REASON_DESKTOP_SCREEN_LOCKED
ERecordOnCloudDeactivateReason
enum 1-to-1 callPLNK_RECORD_ON_CLOUD_DEACTIVATE_REASON_INTERNAL
PLNK_RECORD_ON_CLOUD_DEACTIVATE_REASON_ACTIVATION_FAILED
PLNK_RECORD_ON_CLOUD_DEACTIVATE_REASON_MAX_RECORDING_DURATION_REACHED
RecordOnCloud
class 1-to-1 callbool IsActivated()
DeactivateReasonOptional GetDeactivatedReason()
MakeCallParam
class 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()
ICallEvent
class 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)
IConferenceEvent
class 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)
EDisconnectSource
enum 1-to-1 callGroup callPLNK_DISCONNECT_SOURCE_UNDEFINED
PLNK_DISCONNECT_SOURCE_CALLEE
PLNK_DISCONNECT_SOURCE_CALLER
PLNK_DISCONNECT_SOURCE_PARTICIPANT
PLNK_DISCONNECT_SOURCE_CLOUD_SERVER
PLNK_DISCONNECT_SOURCE_APP_SERVER
ICallAudioReceiver
class 1-to-1 callvoid OnAudio(const SAudioData * pAudioData)
AudioData
struct 1-to-1 callunsigned int unBufferSize
PlanetKitByte* pBuffer
EAudioSampleType
enum 1-to-1 callPLNK_AUDIO_SAMPLE_TYPE_SIGNED_FLOAT32 = 0
PLNK_AUDIO_SAMPLE_TYPE_SIGNED_SHORT16 = 1
PlanetKitHookedAudio
class 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()
IPlanetKitAudioHook
class 1-to-1 callvoid OnHooked(PlanetKitHookedAudioPtr pHookedAudio)
삭제
SCallConnectedParam
struct 1-to-1 callEMediaType eMediaType
ConferencePeerUpdateParam
class Group callsize_t AddedCount()
size_t RemovedCount()
ConferenceVideoUpdatedParam
class Group callsize_t GetCount()
ConferenceSubGroupUpdateParam
class Group callMakeCallParam
class 1-to-1 callconst char* GetAPIKey()
const char* GetAccessToken()
ConferenceParam
class Group callconst char* GetAPIKey()
const char* GetAccessToken()
EConferenceRoomType ConferenceRoomType()
void SetConferenceRoomType(EConferenceRoomType eRoomType)
EConferenceRoomType
enum Group callEDisconnectReason
enum 1-to-1 callGroup callPLNK_DISCONNECT_REASON_WRONG_ROOM_ATTR
PLNK_DISCONNECT_REASON_AUDIO_TX_NO_SRC_BY_LOCAL
PLNK_DISCONNECT_REASON_AUDIO_TX_NO_SRC_BY_REMOTE
PLNK_DISCONNECT_REASON_INTERNAL_ERROR_BY_LOCAL
PLNK_DISCONNECT_REASON_INTERNAL_ERROR_BY_REMOTE
PLNK_DISCONNECT_REASON_USER_ERROR_BY_LOCAL
PLNK_DISCONNECT_REASON_USER_ERROR_BY_REMOTE
PLNK_DISCONNECT_REASON_INTERNAL_KIT_ERROR_BY_LOCAL
PLNK_DISCONNECT_REASON_INTERNAL_KIT_ERROR_BY_REMOTE
PLNK_DISCONNECT_REASON_BAD_NETWORK_IN_CONFERENCE
PLNK_DISCONNECT_REASON_UNAVAILABLE_NETWORK_IN_CALL
PLNK_DISCONNECT_REASON_SERVICE_APIKEY_ERROR
SManagerInitParam
structbool bEnableStdOutLog
bool bEnableJupLog
SubGroupManager
class Group callconst char *GetMyAudioSubGroupName()
const char *GetMyAudioTaggedSubGroupName()
PlanetKitCall
class 1-to-1 callbool EndCall(EDisconnectReason eCallEndReason)
IDataSessionExceptionHandler
classConferenceJoinParam
class Group callvoid SetDisableAutoDisconnectOnBadNetwork(bool bDisable)
VideoCaptureManager
class 1-to-1 callGroup callVideoCapture
class 1-to-1 callGroup callPlanetKitConference
class Group callbool AudioSendSetHighPriority(bool bHighPriority, void *pResultUserData, IResultHandler *pResultHandler)