I have tvOS app and i try to show video from internet. But i have problem with buffering. I simulate situation when my internet connection was lost or slow. In this case time keeps going but video freeze. I have next code:
guard let urlToVideo = stream?.urls.first else { return }
guard let videoUrl = URL(string: urlToVideo) else { return }
let composition = AVMutableComposition()
let videoAsset = AVURLAsset(url: videoUrl)
let videoTrack = composition.addMutableTrack(withMediaType: .video, preferredTrackID: kCMPersistentTrackID_Invalid)
let audioTrack = composition.addMutableTrack(withMediaType: .audio, preferredTrackID: kCMPersistentTrackID_Invalid)
do{
guard videoAsset.tracks(withMediaType: .video).count > 0 else {
return
}
try? videoTrack?.insertTimeRange(CMTimeRangeMake(start: CMTime.zero, duration: videoAsset.duration),
of: videoAsset.tracks(withMediaType: .video)[0],
at: CMTime.zero)
guard videoAsset.tracks(withMediaType: .audio).count > 0 else {
return
}
try? audioTrack?.insertTimeRange(CMTimeRangeMake(start: CMTime.zero, duration: videoAsset.duration),
of: videoAsset.tracks(withMediaType: .audio)[0],
at: CMTime.zero)
}
let item = AVPlayerItem(asset: composition)
player = AVPlayer(playerItem: item)
player?.automaticallyWaitsToMinimizeStalling = true
player?.play()
in this case automaticallyWaitsToMinimizeStalling
dont work, video freeze but time keeps going.
But if i change
let item = AVPlayerItem(asset: composition)
to
let item = AVPlayerItem(asset: videoAsset)
all great, player enable pause, download data, after that continue to play
But i need use AVMutableComposition
because i add external sub next.
please help me, why automaticallyWaitsToMinimizeStalling
dont work in my case with AVMutableComposition
?