Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit 8d066aa

Browse files
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)

AltStyle によって変換されたページ (->オリジナル) /