Skip to main content
Version: 7.0

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 single strPlanetKitSystemDirectory parameter instead of separate parameters for base path and database path.
  • Instead of multiple setter methods for logging configuration (SetLogLevel, SetLogSizeLimit, and EnableLogOutput), two EnableLog() 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
  • Configuration class 1-to-1 callGroup call

    PreviousPlanetKit 7.0.0
    ConfigurationPtr Create(const WString& strBasePath, const WString& strDatabasePath)ConfigurationPtr Create(const WString& strPlanetKitSystemDirectory)
Added
  • Configuration class 1-to-1 callGroup call
    • void 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
  • Configuration class 1-to-1 callGroup call
    • void SetLogLevel(ELogLevel eLogLevel)
    • void SetLogSizeLimit(ELogSizeLimit eLogSizeLimit)
    • void EnableLogOutput(bool bEnable)
    • const WString& GetBasePath()
    • const WString& GetDatabasePath()
    • ELogLevel GetLogLevel()
    • ELogSizeLimit GetLogSizeLimit()
    • bool IsLogOutputEnabled()
  • ELogLevel enum 1-to-1 callGroup call
    • PLNK_LOG_SILENT
  • ELogSizeLimit enum 1-to-1 callGroup call
    • PLNK_LOG_SIZE_LIMIT_UNLIMITED

Migration

  • Replace the strBasePath parameter used when creating Configuration with strPlanetKitSystemDirectory.
  • The strDatabasePath parameter is now used as the strLogDirectory parameter in the EnableLog API 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
  • CustomCamera class 1-to-1 callGroup call

    • void OnStart()
    • void OnStop()
  • CameraController class 1-to-1 callGroup call

    • bool 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 nDisabledReason parameter to IPeerControlEvent::OnScreenShareUpdated.
    • Added GetDisabledReason() to ConferencePeerScreenShareUpdatedParam that is a parameter of IConferenceEvent::OnPeerScreenShareUpdated.
  • This provides detailed information about why screen share stopped, helping applications provide better user feedback and handle different termination scenarios appropriately.

API

Changed
  • IPeerControlEvent class Group call

    PreviousPlanetKit 7.0.0
    void OnScreenShareUpdated(PeerControlPtr pPeerControl, SubgroupPtr pSubgroup, EScreenShareState eState)void OnScreenShareUpdated(PeerControlPtr pPeerControl, SubgroupPtr pSubgroup, EScreenShareState eState, IntOptional nDisabledReason)
Added
  • PlanetKitConference class Group call
    • bool StopMyScreenShare(int nUserReason, void* pUserData = nullptr, ResultCallback pCallback = nullptr)
  • ConferencePeerScreenShareUpdatedParam class Group call
    • IntOptional 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_TOLERANCE mode 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
  • EPlanetKitAutoGainControl enum class 1-to-1 callGroup call
    • PLNK_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
  • EConnectToken enum 1-to-1 callGroup call
    • API_KEY
    • ACCESS_TOKEN
  • MakeCallParam class 1-to-1 call
    • MakeCallParamPtr CreateWithAPIKey(UserIdPtr pMyID, UserIdPtr pPeerID, const WString& strKey)
    • const WString& APIKey()
    • EConnectToken ConnectToken()
  • ConferenceParam class Group call
    • ConferenceParamPtr 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
  • PlanetKitConference class Group call
    • bool 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, and ConferenceParam.
  • These configuration APIs have been removed as these settings are configured through Planet Cloud.

API

Removed
  • MakeCallParam class 1-to-1 call
    • int GetAudioInputNoSrcTimeOutSec()
    • int GetVideoInputNoSrcTimeOutSec()
    • void SetAudioInputNoSrcTimeOutSec(unsigned int nAudioInputNoSrcTimeOutSec)
    • void SetVideoInputNoSrcTimeOutSec(unsigned int nVideoInputNoSrcTimeOutSec)
  • VerifyCallParam class 1-to-1 call
    • int GetAudioInputNoSrcTimeOutSec()
    • int GetVideoInputNoSrcTimeOutSec()
    • void SetAudioInputNoSrcTimeOutSec(unsigned int nAudioInputNoSrcTimeOutSec)
    • void SetVideoInputNoSrcTimeOutSec(unsigned int nVideoInputNoSrcTimeOutSec)
  • ConferenceParam class Group call
    • int 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 ESendShortDataFailReason enum provides specific error codes to help developers identify and handle different failure scenarios more effectively.
  • Replaced the generic ResultCallback with the specialized SendShortDataResultHandler that includes detailed failure information.
  • This enhancement enables better error handling, debugging, and user feedback for applications using short data transmission features.

API

Changed
  • PlanetKitCall class 1-to-1 call

    PreviousPlanetKit 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)
  • PlanetKitConference class Group call

    PreviousPlanetKit 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)
  • ESendShortDataFailReason enum 1-to-1 callGroup call
    • PLNK_SEND_SHORT_DATA_FAIL_REASON_NONE = 0
    • PLNK_SEND_SHORT_DATA_FAIL_REASON_INVALID_PARAMETER
    • PLNK_SEND_SHORT_DATA_FAIL_REASON_TOO_LONG_DATA_TYPE
    • PLNK_SEND_SHORT_DATA_FAIL_REASON_TOO_LONG_DATA
    • PLNK_SEND_SHORT_DATA_FAIL_REASON_TOO_FREQUENT
    • PLNK_SEND_SHORT_DATA_FAIL_REASON_TIMEOUT

Fix typo

Fixed APIs that violated naming conventions or contained typos.

API

Changed
  • SendVoiceProcessor class 1-to-1 callGroup call

    PreviousPlanetKit 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)
  • CallVerifiedParam class 1-to-1 call

    PreviousPlanetKit 7.0.0
    bool IsPeerUsePreparation()bool IsPeerUseResponderPreparation()
  • ECapturerMediaType enum 1-to-1 callGroup call

    PreviousPlanetKit 7.0.0
    PLNK_CAPTURER_TYPE_UnknownPLNK_CAPTURER_TYPE_UNKNOWN
    PLNK_CAPTURER_TYPE_v210PLNK_CAPTURER_TYPE_V210
    PLNK_CAPTURER_TYPE_v216PLNK_CAPTURER_TYPE_V216
    PLNK_CAPTURER_TYPE_v410PLNK_CAPTURER_TYPE_V410
    PLNK_CAPTURER_TYPE_Base_HDCPPLNK_CAPTURER_TYPE_BASE_HDCP
  • MakeCallParam class 1-to-1 call

    PreviousPlanetKit 7.0.0
    void SetPreparation(bool bPreparation)void SetUseResponderPreparation(bool bUseResponderPreparation)
    bool IsPreparation()bool UseResponderPreparation()
  • Enum name changes

    PreviousPlanetKit 7.0.0Note
    EPlanetkitNoiseSuppressorModeEPlanetKitNoiseSuppressorMode1-to-1 call, Group call