如何使用 AVQueuePlayer?
Posted
技术标签:
【中文标题】如何使用 AVQueuePlayer?【英文标题】:How to use AVQueuePlayer? 【发布时间】:2018-02-09 13:41:11 【问题描述】:我想在 ios 上播放来自远程服务器的一组视频文件。我不想使用 HLS 播放列表。
我正在尝试使用 AVQueuePlayer。这是我初始化它的方式:
let url = URL(string: "https://example.com/video.ts")! // 10 second video
let item = AVPlayerItem(url: url)
let player = AVQueuePlayer(items: [item])
player.play()
当我在屏幕上显示此播放器时,使用 AVPlayerLayer 和自定义视图或使用 AVPlayerViewController,它只显示加载图标而没有内容。几秒钟后,当我检查player.items()
数组时,那里什么都没有。
这是预期的行为吗?如何完成我的任务?
【问题讨论】:
【参考方案1】:好吧,让我认为代码是这样的。
import UIKit
import AVFoundation
class ViewController: UIViewController
private var player: AVQueuePlayer?
private var playerLayer: AVPlayerLayer?
override func viewDidLoad()
super.viewDidLoad()
super.view.backgroundColor = UIColor.lightGray
// Video file for demo
let mediaPath = URL(fileURLWithPath:Bundle.main.path(forResource: "ChoppedBipBop", ofType: "m4v")!)
startDemoVideo(videoURL: mediaPath)
public func startDemoVideo(videoURL: URL)
player = AVQueuePlayer()
playerLayer = AVPlayerLayer(player: player)
guard let playerLayer = playerLayer else fatalError("Error creating player layer")
playerLayer.frame = view.layer.bounds
view.layer.addSublayer(playerLayer)
let videoAsset = AVURLAsset(url: videoURL)
videoAsset.loadValuesAsynchronously(forKeys: ["duration", "playable"])
DispatchQueue.main.async
let loopItem = AVPlayerItem(asset: videoAsset)
self.player?.insert(loopItem, after: nil)
self.player?.play()
编辑:我把我所有用于演示的代码我有一个本地文件视频,所以你需要用一个 URL 请求对象替换,如果你想测试你可以做一个单视图使用 Swift 的 App 项目并在您的 ViewController 中替换它,然后构建并运行:)
【讨论】:
尝试新的代码更改 :) 希望对您有所帮助。【参考方案2】:问题可能出在您的媒体上。 iOS 上的AVPlayer
不支持直接播放.ts
文件。这些必须包含在 HLS 播放列表中。
【讨论】:
以上是关于如何使用 AVQueuePlayer?的主要内容,如果未能解决你的问题,请参考以下文章
在 AVQueuePlayer 中播放完最后一项后如何显示工作表视图?
使用带有 AVQueuePlayer 的 Switch 语句?
当 AVQueuePlayer 完成最后一个播放项时如何做某事
AVQueuePlayer 从资产跳转到另一个时令人讨厌的延迟