Skip to content

Commit 8d066aa

Browse files
committed
Update AbstractPlayer.swift
1 parent f3cbfa2 commit 8d066aa

File tree

1 file changed

+30
-30
lines changed

1 file changed

+30
-30
lines changed

Sources/swiftui-loop-videoplayer/protocol/player/AbstractPlayer.swift

Lines changed: 30 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -181,6 +181,35 @@ extension AbstractPlayer{
181181
player?.insert(item, after: nil)
182182
}
183183

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+
184213
/// Sets up an observer for the status of the provided `AVPlayerItem`.
185214
///
186215
/// This method observes changes in the status of `newItem` and triggers the provided callback
@@ -199,7 +228,7 @@ extension AbstractPlayer{
199228
return
200229
}
201230

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
203232
print(item.status.rawValue, "status")
204233
guard item.status == .readyToPlay || item.status == .failed else {
205234
return
@@ -212,35 +241,6 @@ extension AbstractPlayer{
212241
}
213242
}
214243
}
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-
}
244244

245245
/// Seeks the video to a specific time in the timeline.
246246
/// This method adjusts the playback position to the specified time with precise accuracy.

0 commit comments

Comments
 (0)