@@ -181,6 +181,35 @@ extension AbstractPlayer{
181
181
player? . insert ( item, after: nil )
182
182
}
183
183
184
+ /// Creates an `AVPlayerItem` with optional subtitle merging.
185
+ /// - Parameters:
186
+ /// - asset: The main video asset.
187
+ /// - settings: A `VideoSettings` object containing subtitle configuration.
188
+ /// - Returns: A new `AVPlayerItem` configured with the merged or original asset.
189
+ func createPlayerItem( with settings: VideoSettings ) -> AVPlayerItem ? {
190
+
191
+ guard let asset = assetFor ( settings) else {
192
+ delegate? . didReceiveError ( . sourceNotFound( settings. name) )
193
+ return nil
194
+ }
195
+
196
+ if let subtitleAsset = subtitlesAssetFor ( settings) ,
197
+ let mergedAsset = mergeAssetWithSubtitles ( videoAsset: asset, subtitleAsset: subtitleAsset) {
198
+ // Create and return a new `AVPlayerItem` using the merged asset
199
+ return AVPlayerItem ( asset: mergedAsset)
200
+ } else {
201
+ // Create and return a new `AVPlayerItem` using the original asset
202
+ return AVPlayerItem ( asset: asset)
203
+ }
204
+ }
205
+
206
+ /// Clear status observer
207
+ func clearStatusObserver( ) {
208
+ guard statusObserver != nil else { return }
209
+ statusObserver? . invalidate ( )
210
+ statusObserver = nil
211
+ }
212
+
184
213
/// Sets up an observer for the status of the provided `AVPlayerItem`.
185
214
///
186
215
/// This method observes changes in the status of `newItem` and triggers the provided callback
@@ -199,7 +228,7 @@ extension AbstractPlayer{
199
228
return
200
229
}
201
230
202
- statusObserver = item. observe ( \. status, options: [ . new, . initial] ) { [ weak self] item, change in
231
+ statusObserver = item. observe ( \. status, options: [ . new, . initial, . old ] ) { [ weak self] item, change in
203
232
print ( item. status. rawValue, " status " )
204
233
guard item. status == . readyToPlay || item. status == . failed else {
205
234
return
@@ -212,35 +241,6 @@ extension AbstractPlayer{
212
241
}
213
242
}
214
243
}
215
-
216
- /// Clear status observer
217
- func clearStatusObserver( ) {
218
- guard statusObserver != nil else { return }
219
- statusObserver? . invalidate ( )
220
- statusObserver = nil
221
- }
222
-
223
- /// Creates an `AVPlayerItem` with optional subtitle merging.
224
- /// - Parameters:
225
- /// - asset: The main video asset.
226
- /// - settings: A `VideoSettings` object containing subtitle configuration.
227
- /// - Returns: A new `AVPlayerItem` configured with the merged or original asset.
228
- func createPlayerItem( with settings: VideoSettings ) -> AVPlayerItem ? {
229
-
230
- guard let asset = assetFor ( settings) else {
231
- delegate? . didReceiveError ( . sourceNotFound( settings. name) )
232
- return nil
233
- }
234
-
235
- if let subtitleAsset = subtitlesAssetFor ( settings) ,
236
- let mergedAsset = mergeAssetWithSubtitles ( videoAsset: asset, subtitleAsset: subtitleAsset) {
237
- // Create and return a new `AVPlayerItem` using the merged asset
238
- return AVPlayerItem ( asset: mergedAsset)
239
- } else {
240
- // Create and return a new `AVPlayerItem` using the original asset
241
- return AVPlayerItem ( asset: asset)
242
- }
243
- }
244
244
245
245
/// Seeks the video to a specific time in the timeline.
246
246
/// This method adjusts the playback position to the specified time with precise accuracy.
0 commit comments