Release Notes
This document is a machine-translated draft and is currently undergoing review. Some content may be inaccurate or differ from the original Korean version. For the most precise information, refer to the Korean documentation.
2.3.39
Release Date: 2026-11-03
Fixed
-
Raised minimum supported iOS version (iOS 16 → iOS 17)
- Reason for Change: Support for iOS 27 and Xcode 27 environments
- Scope of Impact: This SDK is no longer supported on environments below iOS 17
- App Changes Required: Must update the minimum deployment target to iOS 17 or higher
-
Updated internal logic for checking screen mirroring and recording status
- Reason for Change: Replaced with alternative APIs (supported on iOS 17+) due to the planned deprecation of existing APIs
- Scope of Impact: None (internal SDK logic change with no external impact)
- App Changes Required: None
2.3.38
Release Date: 2026-09-10
Added Features
- Added new per-content encryption method
- Scope of impact: None
- App changes required: None
Fixed
-
Fixed SDK internal crashes and memory leaks
- Scope of impact: None
- App changes required: None
-
Fixed -8804 error when transitioning downloaded lectures to offline in Native Player
- Reason for Change: Resolved duplicate playback error(-8804) that occurred when transitioning to offline during online playback of downloaded lectures
- Scope of impact: None
- App changes required: None
-
Fixed Keychain Device ID duplication issue during device migration
- Reason for Change: Resolved issue where the Device ID stored in Keychain was identically copied to Device B during data migration from Device A
- Scope of impact: None
- App changes required: None
2.3.37
Release date: 2026-07-21
Fixed
- Fixed frame drop issue when playing at 4x speed on HW/SW player
- Reason for change: Addressed an issue where the screen did not play back smoothly at 4x playback speed
- Scope of impact: None
- App changes required: None
2.3.36
Release date: 2026-06-11
Fixed
- Improved failure handling logic when file path is missing after content download completion
- Reason for change: After content download is complete, if the file save path cannot be retrieved, the download is treated as failed
- Scope of impact: None
- App changes required: None
2.3.35
Release date: 2026-04-14
Added APIs
- Use the server-configured maximum playback speed for content
/// KollusPlayerView.h
/// Max playback Rate
@property (nonatomic, unsafe_unretained, readonly) NSInteger maxPlaybackRate;- Reason for change: Use the server-configured maximum value for content playback speed
- Scope of impact: None
- App changes required: None
2.3.34
Release date: 2026-03-17
Added features
-
Live concurrent viewers count reporting transmission
- Reason for change: To collect detailed statistics on live concurrent viewers
- Scope of impact: None
- App changes required: None
-
Live unauthorized IP playback blocking
- Reason for change: Prevent playback by applying 'IP restriction'
- Scope of impact: None
- App changes required: None
2.3.33
Release date: 2026-01-26
Added APIs
- Block playback after a certain time has passed since content started playing
/// KollusPlayerView.h
/// Playback Limit Duration
@property (nonatomic, unsafe_unretained, readonly) NSInteger nPlaybackLimitDuration;
/// Playback Limit Message
@property (nonatomic, copy) NSString *strPlaybackLimitMessage;- Reason for change: Block playback after a certain time has passed since content started playing
- Scope of impact: None
- App changes required: None
2.3.32
Release date: 2025-12-30
Added features
- Content download event data transmission
- Reason for change: QoE data collection
- Scope of impact: None
- App changes required: None
2.3.31
Release date: 2025-12-10
Added APIs
-
Added chapter class (
Chapter.h)/// Chapter Dictionary
@interface ChapterDict : NSObject
/// Language code for the chapter
@property (nonatomic, retain) NSString* strLanguage;
/// A list of Chapter objects
@property (nonatomic, retain) NSMutableArray* listChapter;
/// Chapter Information Object
@interface Chapter : NSObject
/// Start position of the chapter
@property (nonatomic, unsafe_unretained) NSTimeInterval position;
/// The display title or text content of the chapter
@property (nonatomic, retain) NSString *value;- Reason for change: Enable easy video navigation using chapter information
- Scope of impact: None
- App changes required: None
-
Added chapter information query property
- Added a property to
KollusPlayerView.hto query the chapter list of a video
@property (nonatomic, readonly) NSMutableDictionary* chapterInfo;- Reason for change: Enable easy video navigation using chapter information
- Scope of impact: None
- App changes required: None
- Usage example
- When to call: Chapter information should be referenced after the player's playback preparation is complete (
prepareToPlayWithError) to obtain accurate data.func kollusPlayerView(_ kollusPlayerView: KollusPlayerView!, prepareToPlayWithError error: Error!) - Reference:
func setChapterInfo()if let chapterInfo = playerView.chapterInfo as? [String: ChapterDict] {
if chapterInfo.keys.contains("default_language_code") {
NLog("The value \(String(describing: "default")) exists in the chapter language.")
chapterList = chapterInfo["default_language_code"]?.listChapter as! [Chapter]
} else {
NLog("No default value in chapter language.")
}
NLog("chapterList : \(chapterList)")
for chapter in chapterList {
let value = (Float(chapter.position))/Float(data!.duration)
controlView.sliderView.addChapter(value: value)
}
}
- When to call: Chapter information should be referenced after the player's playback preparation is complete (
- Added a property to
Fixed
- Fixed tv out setting error via playback callback during live playback
- Reason for change: Bug fix
- Scope of impact: None
- App changes required: None
2.3.30
Release date: 2025-11-10
Added APIs
- Added content provider identification information to
KollusPlayerView.h@property (nonatomic) NSString *contentProviderKey;- Reason for change: Utilize data in user behavior analytics action stats
- Scope of impact: None
- App changes required: None
Added features
-
Applied keep-alive when downloading from Kollus Edge
- Reason for change: Reduce time and resources consumed by network connections
- Scope of impact: None
- App changes required: None
-
Added new fields and changed timestamp in network API
- Reason for change: Utilize collected QoE data
- Scope of impact: None
- App changes required: None
-
Added cpk field to action stats API
- Reason for change: Improve data usability in user behavior analytics action stats
- Scope of impact: None
- App changes required: None
2.3.29
Release date: 2025-10-27
Added features
-
Toggle user behavior analytics data transmission on/off (Kollus Player only)
- Reason for change: Not applicable to SDK customers; added a scenario to toggle user behavior analytics data transmission on/off per customer
- Scope of impact: None
- App changes required: None
-
Detailed device type classification in User-Agent
- Reason for change: Distinguish hits by device
- Scope of impact: None
- App changes required: None
-
Fixed issue where customer-configured message in DRM Callback response was not displayed during download request
- Reason for change: When a content download request is made and the DRM Callback response is set to false, the configured message should be displayed
- Scope of impact: None
- App changes required: None
2.3.28
Release date: 2025-08-12
Added features
- Recording prevention during PIP mode playback
- Reason for change: Prevent recording during PIP mode playback
- Scope of impact: None
- App changes required: None
2.3.27
Release date: 2025-08-06
Added features
- Error code and error report when a known black screen occurs during live playback
- Reason for change: Identify black screen occurrences
- Scope of impact: None
- App changes required: None
2.3.26
Release date: 2025-06-24
Added features
- Network quality monitoring
- Reason for change: Collect network quality data
- Scope of impact: None
- App changes required: None
2.3.25
Release date: 2025-06-05
Added APIs
- In "KollusStorage.h"
- /// Set Kollus SDK storage folder: creates a kollus subfolder
@property (nonatomic, copy, readonly) NSString *storagePath; - (BOOL)setKollusPath:(NSString *)path;
- Reason for change: Added API for specifying SDK storage folder
- Scope of impact: None
- App changes required: None
- Usage example
- Use before calling (BOOL)startStorage:(NSError**)error;
storage = KollusStorage()
let dateString = "2025/12/31"
storage.applicationKey = "4172322ee271bxxxxxxxxxxx…..2880b2411"
storage.applicationBundleID = "com.example.KollusPlayer"
let paths = NSSearchPathForDirectoriesInDomains(.libraryDirectory, .userDomainMask, true)
storage.setKollusPath(paths.first)
try storage.start() - This method should only be used in new apps. Otherwise, previously downloaded content will not be accessible.
- Must be used before calling the startStorage function. Uses the Document folder as the default path.
- Use before calling (BOOL)startStorage:(NSError**)error;
- /// Set Kollus SDK storage folder: creates a kollus subfolder
2.3.24
Release date: 2025-05-15
Added APIs
- In "SubTitleInfo.h"
- /// Whether AI Subtitle
@property (nonatomic) BOOL isAISubtitles; - Reason for change: Added API to check whether AI Subtitle is applied
- Scope of impact: None
- App changes required: None
- /// Whether AI Subtitle
2.3.23
Release date: 2025-03-25
Added APIs
- In "KollusPlayerView.h"
- /// Content Provider Name
@property (nonatomic) NSString *contentProviderName; - Reason for change: Provide customer name
- Scope of impact: None
- App changes required: None
- /// Whether background playback is enabled
@property (nonatomic, unsafe_unretained, readonly) BOOL disableBackgroundAudio; - Reason for change: Whether content playback is allowed in the background state
- Scope of impact: None
- App changes required: None
- /// Content Provider Name
2.3.22
Release date: 2025-02-25
Added features
- Enhanced KollusSDK error collection
- Reason for change: To collect errors that occur before player initialization
- Scope of impact: None
- App changes required: None
Fixed
-
Fixed currentPlaybackTime error when switching from background paused state to foreground while using HW Decoder
- Reason for change: Bug fix
- Scope of impact: None
- App changes required: None
-
Fixed app crash when entering background while stopping playback with HW Decoder
- Reason for change: Bug fix
- Scope of impact: None
- App changes required: None
2.3.21
Release date: 2025-02-06
Added features
- Minimum supported OS for iOS Kollus Player SDK: iOS 15.0 and above
- Reason for change: Xcode 16 supports on-device debugging from iOS 15
- Scope of impact: YES (not supported on devices running below iOS 15)
- App changes required: YES (Minimum Deployments must be changed to at least 15.0 in Xcode settings)
Fixed
- Removed Last-modified check in
m3u8header during iOS HLS streaming playback- Reason for change: When streaming HLS on-the-fly, the Last-modified information is not included in the header, causing playback failure
- Scope of impact: None
- App changes required: None
2.3.20
Release date: 2025-01-14
Added APIs
- In "KollusPlayerView.h"
- /// Next episode playback Show Button
@property (nonatomic, unsafe_unretained, readonly) BOOL nextEpisodeShowButton; - Reason for change: Show/hide the [Next Episode] button based on the media_info option even when the auto-play next episode setting is On
- Scope of impact: None (only applicable to customers who require this flag value)
- App changes required: None (only applicable to customers who require this flag value)
- /// Next episode playback Show Button
Deleted APIs
- In "KollusPlayerView.h"
- /// Whether audio watermark is applied
@property (nonatomic, unsafe_unretained, readonly) BOOL isWaterMark; - Reason for change: AWT (Audio watermark) EOL declared & no current users
- Scope of impact: None
- App changes required: None
- /// Whether audio watermark is applied
Added features
-
UI distinction when using debug SDK
- When an app is built using the debug SDK, a UI element is added to notify users. (Displays "Debug" text at the top of the video)
- Reason for change: Prevent the debug SDK from being applied to production apps
- Scope of impact: None
- App changes required: None
-
Apply per-content media info decryption key
- Apply per-content media info encryption key
- Reason for change: Security enhancement
- Scope of impact: None
- App changes required: None
2.3.19
Release date: 2024-12-17
Changed APIs
- In "KollusPlayerLMSDelegate.h"
- @param json JSON object sent as request
@param error Network error (nil: success) - (void)kollusPlayerView:(KollusPlayerView *)kollusPlayerView json:(NSDictionary *)json error:(NSError *)error;
- =>
- @param lmsData lms data information
@param resultJson lms result information - (void)kollusPlayerView:(KollusPlayerView *)kollusPlayerView lmsData:(NSString *)lmsData resultJson:(NSDictionary *)resultJson;
- Reason for change: API changed due to request to add the received URL to LMS data information
- Scope of impact: Yes (app must apply the changed API as build errors will occur)
- App changes required: Yes (app must apply the changed API as build errors will occur)
- @param json JSON object sent as request
Added features
-
Prevent auto-play when setting playback speed
- Paused state → playback speed event → SDK stores the set value, then applies the playback speed value at the time of the Play event
- Reason for change: Prevent the content from playing when playback speed is set in a paused state
- Scope of impact: None
- App changes required: None
-
Skip Pause event while seeking
- When seeking during content playback, if a pause event occurs before the seek is complete, the pause result is inconsistent
- Reason for change: Pause event during seeking may affect the seek operation, so it is ignored
- Scope of impact: None
- App changes required: None
2.3.18
Release date: 2024-11-07
Added APIs
- Added ignoreZero in "KollusPlayerView.h"
- /// Resume is valid even when the resume time value is small
@property (nonatomic, unsafe_unretained, readonly) BOOL ignoreZero; - Returns the value of the ign_z flag passed as a query parameter in the playback URL. (default: false)
- Reason for change: Added at the request of customers who want to resume playback even when the resume time is within a certain duration from the beginning or end (less than 10 seconds for Kollus Player), ignoring the scenario of playing from the start
- Scope of impact: None (only applicable to customers who require this flag value)
- App changes required: None (only applicable to customers who require this flag value)
- /// Resume is valid even when the resume time value is small
Added features
-
Resume valid flag even when resume time value is small
- Returns the value of the ign_z flag passed as a query parameter in the playback URL. (default: false)
- Reason for change: Added at the request of customers who want to resume playback even when the resume time is within a certain duration from the beginning or end (less than 10 seconds for Kollus Player), ignoring the scenario of playing from the start
- Scope of impact: None (only applicable to customers who require this flag value)
- App changes required: None (only applicable to customers who require this flag value)
-
Kollus DRM and content security enhancement
- Reason for change: Kollus security enhancement
- Scope of impact: Kollus customers (V/G encryption version upgrade and DRM encryption/decryption module update)
- App changes required: None
2.3.17
Release date: 2024-09-11
Added features
- Added LMS Callback delivery items (background and foreground timestamp values)
- After change: Added feature to calculate the time a user spends in the background
- Scope of impact: No impact as this is a new API
- App changes required: Not required
2.3.16
Release date: 2024-08-29
Added features
- Applied on-the-fly DRM: Apply Kollus DRM per content
2.3.15
Release date: 2024-08-13
- Applied
PallyConFPSSDK.framework2.3.0: must be replaced in the app - Exception handling for missing newline characters in SRT subtitles
- ERROR_KOLLUS_STORAGE_IS_EMPTY error handling when StorageManager is nil
2.3.14
Release date: 2024-06-25
- Applied
PallyConFPSSDK.framework2.1.0: must be replaced in the app
2.3.13
Release date: 2024-06-19
- Supplemented exception handling for [KollusAVPlayerView checkOutPut] crash
2.3.12
Release date: 2024-05-09
- Improved choppy playback issue with AI Speed on iPhone
2.3.11
Release date: 2024-04-15
- AI Speed content plays according to ios_player_type
- Added AI Speed content information to N-screen
- Added privacy manifest file
/// Player type: hw, sw, native
@property (nonatomic, copy, readonly) NSString *iosPlayerType;
2.3.10
Release date: 2024-03-28
- Exception handling for [KollusProxyPlayerView checkOutPut] crash
- Background sound playback support during H/W Decoder playback
- Applied next episode playback scenario
- Added next episode APIs
/// Next episode playback Show Time
@property (nonatomic, unsafe_unretained, readonly) NSInteger nextEpisodeShowTime;
/// Next episode playback URL
@property (nonatomic, copy, readonly) NSString *nextEpisodeCallbackURL;
/// Next episode playback Params
@property (nonatomic, readonly) NSMutableDictionary *nextEpisodeCallbackParams;
2.3.9
Release date: 2024-03-04
- Added AI Speed playback time in LMS callback: at_playtime
- iOS support: iOS 12 and above
- Fixed issue where subtitles from a previous timing were briefly displayed when seeking multiple times consecutively
2.3.8
Release date: 2024-02-05
- Backup storage to prevent player ID from changing
- AI Speed information is also passed in the Native player
2.3.7
Release date: 2024-01-12
- Fixed abnormal display issue when seeking H.265 video with iOS Player sw decoder setting
- AI Speed feature
- Added section playback parameters
Added AI Speed related APIs
In KollusPlayerView.h/// Whether AI Speed is supported
@property(nonatomic, unsafe_unretained) BOOL AIRateEnable;
/// AI Speed usage setting (YES: AI Speed, NO: normal playback speed)
@param YES(default);
(void) setAIRate:(bool)bAIRate;
/// Repeat Start Time
@property (nonatomic, unsafe_unretained, readonly) NSInteger nRepeatStartTime;
/// Repeat End Time
@property (nonatomic, unsafe_unretained, readonly) NSInteger nRepeatEndTime;