릴리스 노트
Windows용 PlanetKit 7.0의 릴리스 노트입니다.
PlanetKit 7.0
릴리스 일자: 2026-04-24
로깅 경로 및 수준 설정 통합
Configuration의 로깅 및 경로 설정 API를 통합해 단순화했습니다.
- 이제
Create()메서드는 베이스 경로와 데이터베이스 경로를 따로 받는 대신strPlanetKitSystemDirectory파라미터 하나를 받습니다. - 로깅 설정 시 사용하던 여러 개의 세터 메서드(
SetLogLevel,SetLogSizeLimit,EnableLogOutput)를 삭제했고, 대신 크기 제한 로깅 및 크기 무제한 로깅을 위한 두 개의EnableLog()메서드를 추가했습니다. - 이 변경으로 PlanetKit에서 설정 파일 경로와 로그 파일 경로의 구분이 더욱 명확해졌습니다.
API
변경
-
Configurationclass 1-to-1 callGroup call이전 버전 PlanetKit 7.0.0 ConfigurationPtr Create(const WString& strBasePath, const WString& strDatabasePath)ConfigurationPtr Create(const WString& strPlanetKitSystemDirectory)
추가
Configurationclass 1-to-1 callGroup callvoid EnableLog(const WString& strLogDirectory, ELogLevel eLogLevel = ELogLevel::PLNK_LOG_SIMPLE, ELogSizeLimit eLogSizeLimit = ELogSizeLimit::PLNK_LOG_SIZE_LIMIT_LARGE)void EnableLog(const WString& strLogDirectory, WStringOptional strLogFileName, ELogLevel eLogLevel = ELogLevel::PLNK_LOG_SIMPLE)const WString& GetPlanetKitSystemDirectory()
삭제
Configurationclass 1-to-1 callGroup callvoid SetLogLevel(ELogLevel eLogLevel)void SetLogSizeLimit(ELogSizeLimit eLogSizeLimit)void EnableLogOutput(bool bEnable)const WString& GetBasePath()const WString& GetDatabasePath()ELogLevel GetLogLevel()ELogSizeLimit GetLogSizeLimit()bool IsLogOutputEnabled()
ELogLevelenum 1-to-1 callGroup callPLNK_LOG_SILENT
ELogSizeLimitenum 1-to-1 callGroup callPLNK_LOG_SIZE_LIMIT_UNLIMITED
마이그레이션
Configuration생성 시 사용하던strBasePath파라미터를strPlanetKitSystemDirectory로 변경하세요.strDatabasePath파라미터는 이제 PlanetKit 로깅을 활성화할 때EnableLogAPI의strLogDirectory파라미터로 사용됩니다.
void InitializePlanetKit() {
auto pConfiguration = PlanetKit::Configuration::Create(L"specific_planetkit_directory");
// Call to enable logging
pConfiguration->EnableLog(L"planetkit_log_directory");
PlanetKit::PlanetKitManager::Initialize(pConfiguration);
}
커스텀 비디오 소스 기능 추가
사용자는 자신의 비디오를 커스텀 비디오 소스로 대체할 수 있습니다. 자세한 내용은 커스텀 비디오 소스를 참고하세요.
API
추가
-
CustomCameraclass 1-to-1 callGroup callvoid OnStart()void OnStop()
-
CameraControllerclass 1-to-1 callGroup callbool ChangeCamera(CustomCameraPtr pCustomCamera)
예제 코드
CustomCamera 클래스를 상속해 커스텀 비디오 소스를 구현하세요. 비디오가 시작되면 CustomCamera::OnStart() 콜백이 호출되고, 중지되면 CustomCamera::OnStop() 콜백이 호출됩니다.
class YourCustomCamera : public PlanetKit::CustomCamera {
public:
void OnStart() override {
// start custom video source thread
m_videoThread = std::thread(& CustomVideoSource::VideoThreadProc, this);
}
void OnStop() override {
// stop custom video source thread
m_bRunning = false;
if (m_videoThread.joinable()) {
m_videoThread.join();
}
}
void VideoThreadProc() {
m_bRunning = true;
const auto frameInterval = std::chrono::milliseconds(66); // ~15fps (1000ms / 15 = 66.67ms)
while(m_bRunning) {
// read from file
PlanetKit::SVideoFrame sVideoFrame;
// Tickcount as microseconds
sVideoFrame.llTick = std::chrono::duration_cast<std::chrono::microseconds>(std::chrono::steady_clock::now().time_since_epoch()).count();
this->WriteFrameData(sVideoFrame);
// Maintain 15fps timing
std::this_thread::sleep_for(frameInterval);
}
}
private:
std::thread m_videoThread;
std::atomic<bool> m_bRunning = false;
};
구현한 CustomCamera 클래스의 인스턴스를 설정하려면 CameraController 클래스의 ChangeCamera API를 사용하세요.
PlanetKit이 제공하는 카메라로 전환하려면 EVideoControlResult CameraController::ChangeCamera(CameraInfoPtr pCameraInfo)를 호출하세요.
class YourCameraManager {
// Custom Video Source
void ChangeCustomVideoSource() {
PlanetKit::CameraControllerPtr pCameraController = PlanetKit::PlanetKitManager()::GetInstance()->GetCameraController();
pCameraController->ChangeCamera(m_pYourCustomCamera);
}
// Change Camera Device
void ChangeCamera() {
PlanetKit::CameraControllerPtr pCameraController = PlanetKit::PlanetKitManager()::GetInstance()->GetCameraController();
PlanetKit::CameraInfoArray aCameraInfos;
pCameraController->GetCapturerInfo(aCameraInfos);
pCameraController->ChangeCamera(aCameraInfos.GetAt(0));
}
// Deselect Camera
void DeselectCamera() {
PlanetKit::CameraControllerPtr pCameraController = PlanetKit::PlanetKitManager()::GetInstance()->GetCameraController();
pCameraController->ChangeCamera(nullptr);
}
private:
PlanetKit::CustomCameraPtr m_pYourCustomCamera = PlanetKit::MakeAutoPtr<YourCustomCamera>();
}
그룹 통화에서 화면 공유 중지 이유 추가
- 그룹 통화에서 화면 공유가 중지된 이유를 확인할 수 있는 API를 추가했습니다.
IPeerControlEvent::OnScreenShareUpdated에nDisabledReason파라미터를 추가했습니다.IConferenceEvent::OnPeerScreenShareUpdated의 파라미터인ConferencePeerScreenShareUpdatedParam에GetDisabledReason()를 추가했습니다.
- 이제 애플리케이션에서 사용자에게 화면 공유가 왜 중지됐는지 더 자세한 정보를 제공할 수 있고, 다양한 종료 상황을 적절히 처리하는 데 참고할 수 있습니다.
API
변경
-
IPeerControlEventclass Group call이전 버전 PlanetKit 7.0.0 void OnScreenShareUpdated(PeerControlPtr pPeerControl, SubgroupPtr pSubgroup, EScreenShareState eState)void OnScreenShareUpdated(PeerControlPtr pPeerControl, SubgroupPtr pSubgroup, EScreenShareState eState, IntOptional nDisabledReason)
추가
PlanetKitConferenceclass Group callbool StopMyScreenShare(int nUserReason, void* pUserData = nullptr, ResultCallback pCallback = nullptr)
ConferencePeerScreenShareUpdatedParamclass Group callIntOptional GetDisabledReason()
통역사를 위한 음량 조절 필터 모드 추가
음량 조절 필터 기본 모드인 PLNK_AUTO_GAIN_CONTROL_TYPE_HARDWARE에서 발생하는 문제를 해결하기 위해 새로운 모드(PLNK_AUTO_GAIN_CONTROL_TYPE_HARDWARE_ECHO_TOLERANCE)를 추가했습니다.
- 통역 방에서 통역사는 일반적으로 다른 참가자가 말하는 것을 들으면서 동시에 말합니다. 이와 같이 동시에 말하는(double talk) 상황은 에코 환경으로 감지되기 때문에 마이크 볼륨이 낮아도 음량 조절 필터(auto gain control)가 볼륨을 증가시키지 않습니다. 이 때문에 통역사의 마이크 볼륨이 특정 레벨 이하인 경우 볼륨이 증가되지 않는 문제가 있었습니다.
- 이 문제를 해결하기 위해 에코 환경에서도 마이크 볼륨을 증가시킬 수 있는
PLNK_AUTO_GAIN_CONTROL_TYPE_HARDWARE_ECHO_TOLERANCE모드를 추가했습니다. 이 모드를 사용하면 동시에 말하는 상황에서도 통역사의 목소리가 명확하게 전달됩니다.
예제 코드
사용자의 역할이 통역사인 경우 PLNK_AUTO_GAIN_CONTROL_TYPE_HARDWARE_ECHO_TOLERANCE 모드를 설정하세요.
class YourConference {
public:
void SetAutoGainControlModeForTranslator() {
PlanetKit::SendVoiceProcessorPtr voiceProcessor = m_pConference->GetSendVoiceProcessor();
voiceProcessor->SetAutoGainControl(
PLNK_AUTO_GAIN_CONTROL_TYPE_HARDWARE_ECHO_TOLERANCE,
nullptr,
[](void* pUserData, bool bSuccess) {
std::wcout << L"AGC configured with result: " << bSuccess << std::endl;
}
);
}
private:
PlanetKit::PlanetKitConferencePtr m_pConference;
};
API
추가
EPlanetKitAutoGainControlenum class 1-to-1 callGroup callPLNK_AUTO_GAIN_CONTROL_TYPE_HARDWARE_ECHO_TOLERANCE = 3
API 키를 사용하는 deprecated API 제거
API 키를 사용해 통화를 시작하는 기능을 제거했습니다.
API
삭제
EConnectTokenenum 1-to-1 callGroup callAPI_KEYACCESS_TOKEN
MakeCallParamclass 1-to-1 callMakeCallParamPtr CreateWithAPIKey(UserIdPtr pMyID, UserIdPtr pPeerID, const WString& strKey)const WString& APIKey()EConnectToken ConnectToken()
ConferenceParamclass Group callConferenceParamPtr CreateWithAPIKey(UserIdPtr pMyID, const WString& strRoomID, const WString& strRoomServiceID, const WString& strAPIKey)const WString& GetAPIKey()EConnectToken ConnectToken()
피어의 비디오 또는 화면 공유 요청을 위한 deprecated API 제거
PlanetKitConference 클래스에서 참여자의 비디오 및 화면 공유를 시작하는 기능을 제거했습니다. 이제 PeerControl 클래스에서 제공하는 StartVideo() 및 StartScreenShare() 메서드를 사용하세요.
API
삭제
PlanetKitConferenceclass Group callbool RequestPeerVideo(UserIdPtr pPeerId, const WStringOptional& strSubgroupName, EVideoResolution eVideoResolution)bool RequestPeerVideo(UserIdPtr pPeerId, const WStringOptional& strSubgroupName, EVideoResolution eVideoResolution, void* pUserData, RequestPeerVideoResultCallback pCallback)bool RequestPeerVideo(UserIdPtr pPeerId, const WStringOptional& strSubgroupName, EVideoResolution eVideoResolution, void* pUserData, RequestPeerVideoResolutionCallback pCallback)bool StopPeerVideo(UserIdPtr pPeerId, const WStringOptional& strSubgroupName, void* pUserData = nullptr, RequestPeerVideoResultCallback pCallback = nullptr)bool RequestPeerScreenShare(UserIdPtr pPeerId, const WStringOptional& strSubgroupName, void* pUserData, RequestPeerVideoResultCallback pCallback)bool StopPeerScreenShare(UserIdPtr pPeerId, const WStringOptional& strSubgroupName, void* pUserData, RequestPeerVideoResultCallback pCallback)
설정용 미지원 API 제거
- 오디오/비디오 입력 소스가 없을 때 통화를 종료하는 타임아웃 설정 관련 API를
MakeCallParam,VerifyCallParam,ConferenceParam에서 제거했습니다. - 해당 값은 Planet Cloud를 통해 설정되므로, 이와 관련된 설정 API를 제거했습니다.
API
삭제
MakeCallParamclass 1-to-1 callint GetAudioInputNoSrcTimeOutSec()int GetVideoInputNoSrcTimeOutSec()void SetAudioInputNoSrcTimeOutSec(unsigned int nAudioInputNoSrcTimeOutSec)void SetVideoInputNoSrcTimeOutSec(unsigned int nVideoInputNoSrcTimeOutSec)
VerifyCallParamclass 1-to-1 callint GetAudioInputNoSrcTimeOutSec()int GetVideoInputNoSrcTimeOutSec()void SetAudioInputNoSrcTimeOutSec(unsigned int nAudioInputNoSrcTimeOutSec)void SetVideoInputNoSrcTimeOutSec(unsigned int nVideoInputNoSrcTimeOutSec)
ConferenceParamclass Group callint GetAudioInputNoSrcTimeOutSec()int GetVideoInputNoSrcTimeOutSec()void SetAudioInputNoSrcTimeOutSec(unsigned int nAudioInputNoSrcTimeOutSec)void SetVideoInputNoSrcTimeOutSec(unsigned int nVideoInputNoSrcTimeOutSec)
짧은 데이터 전송에 상세 오류 보고 기능 추가
1대1 통화와 그룹 통화 모두에서 SendShortData에 포괄적인 실패 이유 보고 기능을 추가했습니다.
- 새로운
ESendShortDataFailReasonenum은 개발자가 다양한 실패 시나리오를 더 효과적으로 식별하고 처리할 수 있도록 구체적인 오류 코드를 제공합니다. - 기존의 범용
ResultCallback을 상세 실패 정보를 포함하는 전용SendShortDataResultHandler로 대체했습니다. - 짧은 데이터 전송 기능을 사용할 때 이 기능을 이용해 오류 처리, 디버깅, 정보 제공 기능을 개선할 수 있습니다.
API
변경
-
PlanetKitCallclass 1-to-1 call이전 버전 PlanetKit 7.0.0 bool SendShortData(const WString &strType, void *pData, unsigned int nSize, void *pUserData=nullptr, ResultCallback pCallback=nullptr)bool SendShortData(const WString &strType, void *pData, unsigned int nSize, void *pUserData=nullptr, SendShortDataResultHandler pHandler=nullptr) -
PlanetKitConferenceclass Group call이전 버전 PlanetKit 7.0.0 bool SendShortData(const WString &strType, void *pData, unsigned int nSize, UserIdPtr pPeerId, void *pUserData=nullptr, ResultCallback pCallback=nullptr)bool SendShortData(const WString &strType, void *pData, unsigned int nSize, UserIdPtr pPeerId, void *pUserData=nullptr, SendShortDataResultHandler pHandler=nullptr)bool SendShortDataToAllPeers(const WString &strType, void *pData, unsigned int nSize, void *pUserData=nullptr, ResultCallback pCallback=nullptr)bool SendShortDataToAllPeers(const WString &strType, void *pData, unsigned int nSize, void *pUserData=nullptr, SendShortDataResultHandler pHandler=nullptr)
추가
SendShortDataResultHandler = void(*)(void* pUserData, bool bSuccess, ESendShortDataFailReason eFailReason)ESendShortDataFailReasonenum 1-to-1 callGroup callPLNK_SEND_SHORT_DATA_FAIL_REASON_NONE = 0PLNK_SEND_SHORT_DATA_FAIL_REASON_INVALID_PARAMETERPLNK_SEND_SHORT_DATA_FAIL_REASON_TOO_LONG_DATA_TYPEPLNK_SEND_SHORT_DATA_FAIL_REASON_TOO_LONG_DATAPLNK_SEND_SHORT_DATA_FAIL_REASON_TOO_FREQUENTPLNK_SEND_SHORT_DATA_FAIL_REASON_TIMEOUT
오타 수정
네이밍 규칙과 맞지 않거나 오타가 있던 API를 수정했습니다.
API
변경
-
SendVoiceProcessorclass 1-to-1 callGroup call이전 버전 PlanetKit 7.0.0 EPlanetkitNoiseSuppressorMode GetNoiseSuppressorMode()EPlanetKitNoiseSuppressorMode GetNoiseSuppressorMode()bool SetNoiseSuppressor(EPlanetkitNoiseSuppressorMode ePlanetkitNoiseSuppressorMode=EPlanetkitNoiseSuppressorMode::PLNK_NOISE_SUPPRESSOR_MODE_ENABLE, void *pUserData=nullptr, ResultCallback pCallback=nullptr)bool SetNoiseSuppressor(EPlanetKitNoiseSuppressorMode ePlanetKitNoiseSuppressorMode=EPlanetKitNoiseSuppressorMode::PLNK_NOISE_SUPPRESSOR_MODE_ENABLE, void *pUserData=nullptr, ResultCallback pCallback=nullptr) -
CallVerifiedParamclass 1-to-1 call이전 버전 PlanetKit 7.0.0 bool IsPeerUsePreparation()bool IsPeerUseResponderPreparation() -
ECapturerMediaTypeenum 1-to-1 callGroup call이전 버전 PlanetKit 7.0.0 PLNK_CAPTURER_TYPE_UnknownPLNK_CAPTURER_TYPE_UNKNOWNPLNK_CAPTURER_TYPE_v210PLNK_CAPTURER_TYPE_V210PLNK_CAPTURER_TYPE_v216PLNK_CAPTURER_TYPE_V216PLNK_CAPTURER_TYPE_v410PLNK_CAPTURER_TYPE_V410PLNK_CAPTURER_TYPE_Base_HDCPPLNK_CAPTURER_TYPE_BASE_HDCP -
MakeCallParamclass 1-to-1 call이전 버전 PlanetKit 7.0.0 void SetPreparation(bool bPreparation)void SetUseResponderPreparation(bool bUseResponderPreparation)bool IsPreparation()bool UseResponderPreparation() -
Enum 이름 변경
이전 버전 PlanetKit 7.0.0 참고 EPlanetkitNoiseSuppressorModeEPlanetKitNoiseSuppressorMode1대1 통화, 그룹 통화