iOS 9:使用 AVPlayerViewController Swift。 (划掉播放按钮)
iOS 9: Using AVPlayerViewController Swift. (crossed out play button)
我在 ios 设备和模拟器中播放视频内容时遇到一些问题。
目标:从此处提供的在线资源流式传输视频:
public video streams using hls 使用 AVPlayerViewController
,只是为了了解它的工作原理。
这始终没有引发任何错误,但视图控制器向我展示了这个视图。
我决定退后一步并在本地资源上进行测试,因此我用 quicktime (.m4v) 拍摄了一个简短的屏幕截图并将其直接保存到项目中。这导致了完全相同的行为,没有报告任何错误。
这是代码(AVKit
和 AVFoundation
是导入的):
var playerVC : AVPlayerViewController!
var playerItem : AVPlayerItem!
var player : AVPlayer!
var playerLayer: AVPlayerLayer!
override func viewDidAppear(animated: Bool) {
let bundle = NSBundle.mainBundle()
let path = bundle.pathForResource("testVideos", ofType: "m4v")
let url = NSURL.init(string: path!)
playerItem = AVPlayerItem.init(URL: url!)
player = AVPlayer.init(playerItem: playerItem)
playerVC = AVPlayerViewController.init();
playerVC.player = player;
self.presentViewController(playerVC, animated: true) { () -> Void in
self.playerVC.player?.play()
}
}
构建 IpadMini 4 时看到此警告:<CATransformLayer: 0x136ea1030> - changing property masksToBounds in transform-only layer, will have no effect
Xcode:版本 7.1
定位:iOS 9.0
更新
只是 AVPlayerViewController 的一些讨厌的约束输出。我认为这没有贡献,但它是:
2015-10-28 15:12:02.777 AVKitTest[4441:94545] 无法同时满足约束条件。
可能至少以下列表中的约束之一是您不想要的。
试试这个:
(1)查看每个约束并尝试找出您不期望的;
(2) 找到添加了不需要的约束或约束的代码并修复它。
(注意:如果您看到不理解的 NSAutoresizingMaskLayoutConstraints,请参阅 UIView 属性 translatesAutoresizingMaskIntoConstraints 的文档)
(
"",
"",
"",
"",
"",
"",
"",
“”
)
您似乎没有正确设置 AVPlayerLayer。
查看 AVPlayerLayer 的文档:"Returns an instance of AVPlayerLayer to display the visual output of the specified AVPlayer."
事实证明这很愚蠢,只需要更改:
let url = NSURL.init(string: path!)
playerItem = AVPlayerItem.init(URL: url!)
与:
let url = NSURL.init(fileURLWithPath: path!)
let playerItem = AVPlayerItem.init(URL: url)
我在 ios 设备和模拟器中播放视频内容时遇到一些问题。
目标:从此处提供的在线资源流式传输视频:
public video streams using hls 使用 AVPlayerViewController
,只是为了了解它的工作原理。
这始终没有引发任何错误,但视图控制器向我展示了这个视图。
我决定退后一步并在本地资源上进行测试,因此我用 quicktime (.m4v) 拍摄了一个简短的屏幕截图并将其直接保存到项目中。这导致了完全相同的行为,没有报告任何错误。
这是代码(AVKit
和 AVFoundation
是导入的):
var playerVC : AVPlayerViewController!
var playerItem : AVPlayerItem!
var player : AVPlayer!
var playerLayer: AVPlayerLayer!
override func viewDidAppear(animated: Bool) {
let bundle = NSBundle.mainBundle()
let path = bundle.pathForResource("testVideos", ofType: "m4v")
let url = NSURL.init(string: path!)
playerItem = AVPlayerItem.init(URL: url!)
player = AVPlayer.init(playerItem: playerItem)
playerVC = AVPlayerViewController.init();
playerVC.player = player;
self.presentViewController(playerVC, animated: true) { () -> Void in
self.playerVC.player?.play()
}
}
构建 IpadMini 4 时看到此警告:<CATransformLayer: 0x136ea1030> - changing property masksToBounds in transform-only layer, will have no effect
Xcode:版本 7.1 定位:iOS 9.0
更新 只是 AVPlayerViewController 的一些讨厌的约束输出。我认为这没有贡献,但它是:
2015-10-28 15:12:02.777 AVKitTest[4441:94545] 无法同时满足约束条件。 可能至少以下列表中的约束之一是您不想要的。 试试这个: (1)查看每个约束并尝试找出您不期望的; (2) 找到添加了不需要的约束或约束的代码并修复它。 (注意:如果您看到不理解的 NSAutoresizingMaskLayoutConstraints,请参阅 UIView 属性 translatesAutoresizingMaskIntoConstraints 的文档) ( "", "", "", "", "", "", "", “” )
您似乎没有正确设置 AVPlayerLayer。
查看 AVPlayerLayer 的文档:"Returns an instance of AVPlayerLayer to display the visual output of the specified AVPlayer."
事实证明这很愚蠢,只需要更改:
let url = NSURL.init(string: path!)
playerItem = AVPlayerItem.init(URL: url!)
与:
let url = NSURL.init(fileURLWithPath: path!)
let playerItem = AVPlayerItem.init(URL: url)