在我的应用程序中,我从服务器流式传输视频。为此我在Code
下使用了-(void)playingSong:(NSURL*) url{
AVAsset *asset = [AVAsset assetWithURL:url];
duration = asset.duration;
playerItem = [AVPlayerItem playerItemWithAsset:asset];
player = [AVPlayer playerWithPlayerItem:playerItem];
[player play];
}
全部是全局变量
当网络状况良好时播放所有视频,但在网络速度较慢时无法播放大尺寸视频。 意味着它不适合播放大尺寸视频而且播放小视频; 我使用http服务器而不是https;
对于ex:3分钟的视频它正在播放但是对于1小时的视频它没有。 为什么这样?
答案 0 :(得分:2)
好像你必须先下载整个视频才能开始播放。也可能是因为你的服务器不是AVPlayer。
当您使用普通HTTP在网站上投放视频时 - 称为 渐进式下载 - 标题的位置变得非常 重要。标题放在文件的开头或 它位于文件的末尾。如果是后者,你会有 在开始播放之前下载整个内容 - 因为 没有标题,播放器无法开始解码。
如果您的问题是由于视频来源,请查看此guide。
查看此thread并相应地更改您的实施。
答案 1 :(得分:0)
在本地下载视频,然后在avplayer中播放。
DispatchQueue.global(qos: .background).async {
do {
let data = try Data(contentsOf: url)
DispatchQueue.main.async {
// store "data" in document folder
let fileUrl = URL(fileURLWithPath: <#localVideoURL#>)
let asset = AVAsset(url: fileUrl)
let item = AVPlayerItem(asset: asset)
let player = AVPlayer(playerItem: item)
let layer = AVPlayerLayer(player: player)
layer.bounds = self.view.bounds
self.view.layer.addSublayer(layer)
player.play()
}
} catch {
print(error.localizedDescription)
}
}