我目前正在尝试使用 AVPlayer
播放视频,它具有单独的视频和音频源,因此我将它们组合成一个 AVPlayerItem
,如下所示:
let videoAsset = AVURLAsset(url: videoURL)
let audioAsset = AVURLAsset(url: audioURL)
let duration = videoAsset.duration
let composition = AVMutableComposition()
let videoTrack = composition.addMutableTrack(withMediaType: AVMediaType.video, preferredTrackID: kCMPersistentTrackID_Invalid)
try? videoTrack?.insertTimeRange(CMTimeRange(start: kCMTimeZero, duration: duration), of: videoAsset.tracks(withMediaType: .video)[0], at: kCMTimeZero)
let audioTrack = composition.addMutableTrack(withMediaType: .audio, preferredTrackID: kCMPersistentTrackID_Invalid)
try? audioTrack?.insertTimeRange(CMTimeRange(start: kCMTimeZero, duration: duration), of: audioAsset.tracks(withMediaType: .audio)[0], at: kCMTimeZero)
let playerItem = AVPlayerItem(asset: composition)
但是,问题是此代码在完成之前通过网络获取了视频和音频的整个源。调用“videoAsset.duration”或 videoTrack.insertTimeRange
都会触发此网络请求。
有没有一种方法可以使用 AVPlayer
一起播放这些单独的视频和音频 URL(MP4 视频和 AAC 音频)而无需先下载整个文件?
我注意到在我的 Mac 上,Quicktime Player 也会在开始播放之前获取源文件。但是,使用 VLC 或 IINA 之类的东西则不会,播放可以立即开始。
谢谢。
最佳答案
这是因为 MP4 格式。您应该考虑使用另一种更稳定的流媒体格式。
关于ios - AVPlayer - 使用单独的音频 URL 播放网络视频,无需先下载文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47953605/