@@ -96,12 +96,15 @@ extension LoopingPlayerProtocol {
96
96
player? . pause ( )
97
97
}
98
98
99
+ removeStatusObserver ( )
100
+ unloop ( )
101
+ removeAllFilters ( )
102
+
99
103
// Replace the current item with a new item created from the asset
100
104
let newItem = AVPlayerItem ( asset: asset)
101
- unloop ( )
102
- if !filters. isEmpty{
103
- removeAllFilters ( )
104
- }
105
+
106
+ addStatusObserver ( for: newItem)
107
+
105
108
player? . replaceCurrentItem ( with: newItem)
106
109
107
110
// Seek to the beginning of the item if you want to start from the start
@@ -168,14 +171,22 @@ extension LoopingPlayerProtocol {
168
171
/// - item: The player item to observe.
169
172
/// - player: The player to observe.
170
173
func setupObservers( for item: AVPlayerItem , player: AVQueuePlayer ) {
171
- statusObserver = item. observe ( \. status, options: [ . new] ) { [ weak self] item, _ in
172
- self ? . handlePlayerItemStatusChange ( item)
173
- }
174
-
174
+ addStatusObserver ( for: item)
175
175
errorObserver = player. observe ( \. error, options: [ . new] ) { [ weak self] player, _ in
176
176
self ? . handlePlayerError ( player)
177
177
}
178
178
}
179
+
180
+ func removeStatusObserver( ) {
181
+ statusObserver? . invalidate ( )
182
+ statusObserver = nil
183
+ }
184
+
185
+ func addStatusObserver( for item: AVPlayerItem ) {
186
+ statusObserver = item. observe ( \. status, options: [ . new] ) { [ weak self] item, _ in
187
+ self ? . handlePlayerItemStatusChange ( item)
188
+ }
189
+ }
179
190
180
191
/// Responds to changes in the status of an AVPlayerItem.
181
192
///
0 commit comments