我想在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()数组时,那里什么也没有。
这是预期的行为吗?如何完成我的任务?
发布于 2018-02-10 06:21:11
好吧,让我想一下代码是这样的。
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 request对象来替换,如果你想测试,你可以用Swift创建一个单独的View App项目,并在你的ViewController中替换它,然后构建并运行:)
发布于 2018-03-27 21:59:37
问题可能与您的媒体有关。iOS上的AVPlayer不支持直接播放.ts文件。这些必须包含在HLS播放列表中。
https://stackoverflow.com/questions/48707206
复制相似问题