Release notes
This page provides the release notes of PlanetKit 7.0 for Windows.
PlanetKit 7.0
Release date: 2026-04-24
Unify logging path and level configuration
Unified and simplified the logging and path configuration APIs in Configuration.
- The
Create()method now accepts a singlestrPlanetKitSystemDirectoryparameter instead of separate parameters for base path and database path. - Instead of multiple setter methods for logging configuration (
SetLogLevel,SetLogSizeLimit, andEnableLogOutput), twoEnableLog()methods for size-limited logging and size-unlimited logging have been added. - This change clarifies the distinction between the paths used for configuration files and log files in PlanetKit.
API
Changed
-
Configurationclass 1-to-1 callGroup callPrevious PlanetKit 7.0.0 ConfigurationPtr Create(const WString& strBasePath, const WString& strDatabasePath)ConfigurationPtr Create(const WString& strPlanetKitSystemDirectory)
Added
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()
Removed
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
Migration
- Replace the
strBasePathparameter used when creatingConfigurationwithstrPlanetKitSystemDirectory. - The
strDatabasePathparameter is now used as thestrLogDirectoryparameter in theEnableLogAPI when enabling PlanetKit logging.
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);
}
Add a custom video source feature
Users can replace their video with a custom video source. For more information, see Custom video source.
API
Added
-
CustomCameraclass 1-to-1 callGroup callvoid OnStart()void OnStop()
-
CameraControllerclass 1-to-1 callGroup callbool ChangeCamera(CustomCameraPtr pCustomCamera)
Example code
Implement a custom video source by inheriting the CustomCamera class. When video starts, CustomCamera::OnStart() callback is called, and when it stops, CustomCamera::OnStop() callback is called.
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;
};
Use the ChangeCamera API of the CameraController class to set an instance of your implemented CustomCamera class.
If you want to switch to a camera provided by PlanetKit, call 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>();
}
Add a reason for stopping screen share in group calls
- Added APIs to get the reason why screen share was stopped in group calls.
- Added
nDisabledReasonparameter toIPeerControlEvent::OnScreenShareUpdated. - Added
GetDisabledReason()toConferencePeerScreenShareUpdatedParamthat is a parameter ofIConferenceEvent::OnPeerScreenShareUpdated.
- Added
- This provides detailed information about why screen share stopped, helping applications provide better user feedback and handle different termination scenarios appropriately.
API
Changed
-
IPeerControlEventclass Group callPrevious PlanetKit 7.0.0 void OnScreenShareUpdated(PeerControlPtr pPeerControl, SubgroupPtr pSubgroup, EScreenShareState eState)void OnScreenShareUpdated(PeerControlPtr pPeerControl, SubgroupPtr pSubgroup, EScreenShareState eState, IntOptional nDisabledReason)
Added
PlanetKitConferenceclass Group callbool StopMyScreenShare(int nUserReason, void* pUserData = nullptr, ResultCallback pCallback = nullptr)
ConferencePeerScreenShareUpdatedParamclass Group callIntOptional GetDisabledReason()
Add auto gain control mode for translators
Added a new mode (PLNK_AUTO_GAIN_CONTROL_TYPE_HARDWARE_ECHO_TOLERANCE) to resolve issues encountered with the default PLNK_AUTO_GAIN_CONTROL_TYPE_HARDWARE.
- In translation rooms, translators typically speak while simultaneously listening to another participant. In this scenario, auto gain control does not increase the microphone volume even when it is low, because the situation is detected as an echo environment due to double talk (overlapping speech). This behavior causes an issue where the translator's microphone volume cannot be increased when it is below a certain level.
- To address this, we added a
PLNK_AUTO_GAIN_CONTROL_TYPE_HARDWARE_ECHO_TOLERANCEmode that allows the microphone volume to be increased even in such echo environments, which ensures the translator's voice can be delivered clearly even during overlapping speech.
Example code
Set the PLNK_AUTO_GAIN_CONTROL_TYPE_HARDWARE_ECHO_TOLERANCE mode if the user's role is translator.
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
Added
EPlanetKitAutoGainControlenum class 1-to-1 callGroup callPLNK_AUTO_GAIN_CONTROL_TYPE_HARDWARE_ECHO_TOLERANCE = 3
Remove deprecated APIs using an API key
The functionality to start a call using an API key has been removed.
API
Removed
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()
Remove deprecated APIs for requesting a peer's video or screen share
The functionality to start participant video and screen share from the PlanetKitConference class has been removed. Instead, use the StartVideo() and StartScreenShare() methods provided by the PeerControl class.
API
Removed
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)
Remove unsupported APIs for configuration
- Removed APIs related to audio/video input "No Source" timeout configuration from
MakeCallParam,VerifyCallParam, andConferenceParam. - These configuration APIs have been removed as these settings are configured through Planet Cloud.
API
Removed
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)
Add detailed error reporting for short data transmission
Added comprehensive failure reason reporting for SendShortData operations in both 1-to-1 and group calls.
- The new
ESendShortDataFailReasonenum provides specific error codes to help developers identify and handle different failure scenarios more effectively. - Replaced the generic
ResultCallbackwith the specializedSendShortDataResultHandlerthat includes detailed failure information. - This enhancement enables better error handling, debugging, and user feedback for applications using short data transmission features.
API
Changed
-
PlanetKitCallclass 1-to-1 callPrevious 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 callPrevious 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)
Added
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
Fix typo
Fixed APIs that violated naming conventions or contained typos.
API
Changed
-
SendVoiceProcessorclass 1-to-1 callGroup callPrevious 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 callPrevious PlanetKit 7.0.0 bool IsPeerUsePreparation()bool IsPeerUseResponderPreparation() -
ECapturerMediaTypeenum 1-to-1 callGroup callPrevious 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 callPrevious PlanetKit 7.0.0 void SetPreparation(bool bPreparation)void SetUseResponderPreparation(bool bUseResponderPreparation)bool IsPreparation()bool UseResponderPreparation() -
Enum name changes
Previous PlanetKit 7.0.0 Note EPlanetkitNoiseSuppressorModeEPlanetKitNoiseSuppressorMode1-to-1 call, Group call