【发布时间】:2018-04-25 11:09:51
【问题描述】:
我正在尝试使用 HLS 进行直播,但出现错误:
错误:可选(“操作无法完成”),错误: 可选(错误域=AVFoundationErrorDomain 代码=-11800 "媒体 格式 - 样本描述无效(例如,尺寸无效)” UserInfo={NSUnderlyingError=0x60000005b510 {错误 域=NSOSStatusErrorDomain 代码=-12714 "(null)"}, NSLocalizedFailureReason=发生未知错误 (-12714), NSDebugDescription=媒体格式 - 示例描述无效(例如 大小无效),NSLocalizedDescription=该操作无法进行 完成}) 2018-04-25 12:14:51.608117+0200 morethen2[11681:374192] 任务 . 以错误结束 - 代码:-999
我无法共享流的链接,它是私人的。
代码如下:
class ViewController: UIViewController {
var player = AVPlayer()
override func viewDidLoad() {
super.viewDidLoad()
let url = URL(string: "https:can-t-share-it/LIVE-008900021A-LIP-0-channelNo2_360p/manifest.m3u8")!
let asset = AVURLAsset(url: url)
let playerItem = AVPlayerItem(asset: asset)
player = AVPlayer(url: url)
let layer = AVPlayerLayer(player: player)
layer.frame = view.layer.frame
view.layer.addSublayer(layer)
self.player.addObserver(self, forKeyPath: #keyPath(AVPlayer.status), options: [.new, .initial], context: nil)
self.player.addObserver(self, forKeyPath: #keyPath(AVPlayer.currentItem.status), options:[.new, .initial], context: nil)
// Watch notifications
let center = NotificationCenter.default
center.addObserver(self, selector:"newErrorLogEntry:", name: .AVPlayerItemNewErrorLogEntry, object: player.currentItem)
center.addObserver(self, selector:"failedToPlayToEndTime:", name: .AVPlayerItemFailedToPlayToEndTime, object: player.currentItem)
player.play()
// Do any additional setup after loading the view, typically from a nib.
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
@IBAction func dismiss(_ sender: Any) {
UIApplication.shared.keyWindow?.rootViewController?.dismiss(animated: true, completion: nil)
}
// Observe If AVPlayerItem.status Changed to Fail
override func observeValue(forKeyPath keyPath: String?, of object: Any?, change: [NSKeyValueChangeKey: Any]?, context: UnsafeMutableRawPointer?) {
if let player = object as? AVPlayer, keyPath == #keyPath(AVPlayer.currentItem.status) {
let newStatus: AVPlayerItemStatus
if let newStatusAsNumber = change?[NSKeyValueChangeKey.newKey] as? NSNumber {
newStatus = AVPlayerItemStatus(rawValue: newStatusAsNumber.intValue)!
} else {
newStatus = .unknown
}
if newStatus == .failed {
NSLog("Error: \(String(describing: player.currentItem?.error?.localizedDescription)), error: \(String(describing: player.currentItem?.error))")
}
}
}
// Getting error from Notification payload
func newErrorLogEntry(_ notification: Notification) {
guard let object = notification.object, let playerItem = object as? AVPlayerItem else {
return
}
guard let errorLog: AVPlayerItemErrorLog = playerItem.errorLog() else {
return
}
NSLog("Error: \(errorLog)")
}
func failedToPlayToEndTime(_ notification: Notification) {
let error = notification.userInfo!["AVPlayerItemFailedToPlayToEndTimeErrorKey"]
NSLog("error: \(error)")
} }
同样的流也适用于 Android 应用和网络
【问题讨论】:
-
这是服务器问题检查这个答案stackoverflow.com/questions/49663296/…
标签: ios swift stream avplayer http-live-streaming