ios - AVPlayer - 使用单独的音频 URL 播放网络视频,无需先下载文件

标签 ios swift video tvos

我目前正在尝试使用 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/

相关文章:

ios - 在 Swift 中测试 pushViewController

ios - Swift 字符串作为 UIColor 对象

ios - 应用程序因多个视频而崩溃

ios - 按钮内图像下方的 Storyboard 定位文本

iphone - iOS显示取决于位置和时间的通知

ios - 在 iPhone 上显示 UISplitViewController 的详细 View Controller

ios - swift 3 : How to assign variable of different option types without multiple if let statements?

swift - 更新数组中的对象

android - 使用 FFMpeg for android 解码视频

c# - 使用 directshow 仅显示视频的一小部分