我想从一个网址获取一个视频,并在点击按钮的视图中播放它。
我有一个moviePlayer,它播放一个来自URL的视频。一切看起来不错,但当我点击后或下一个按钮(即改变viewController),视频继续播放(因为我仍然能够听到新屏幕上的音频。
因此,我想在viewDidDismiss上添加moviePlayer.Stop()。它在第一次视图更改时运行良好,但是当我回到moviePlayer视图并单击next时,我在moviePlayer.Stop() (因为电影已经停止)找到了一个零错误。有人能帮我明白怎么做吗?
导入UIKit导入MediaPlayer
类InformationViewController: UIViewController {
@IBOutlet var thumbnailImage: UIImageView!
@IBOutlet var videoPlayerView: UIView!
@IBOutlet var controlBtn: UIButton!
var moviePlayer:MPMoviePlayerController!
var url:NSURL = NSURL(string: "http://jplayer.org/video/m4v/Big_Buck_Bunny_Trailer.m4v")!
override func viewDidLoad() {
super.viewDidLoad()
}
func videoThumbnailIsAvailable(notification: NSNotification){
if let player = moviePlayer{
println("Thumbnail is available")
NSNotificationCenter.defaultCenter().addObserver(self,
selector: "videoThumbnailIsAvailable:",
name: MPMoviePlayerThumbnailImageRequestDidFinishNotification,
object: nil)
/* Capture the frame at the third second into the movie */
let thirdSecondThumbnail = 3.0
/* We can ask to capture as many frames as we
want. But for now, we are just asking to capture one frame
Ask the movie player to capture this frame for us */
moviePlayer.requestThumbnailImagesAtTimes([thirdSecondThumbnail],
timeOption: .NearestKeyFrame)
/* Now get the thumbnail out of the user info dictionary */
let thumbnail =
notification.userInfo![MPMoviePlayerThumbnailImageKey] as? UIImage
if let imageR = thumbnail{
/* We got the thumbnail image. You can now use it here */
println("Thumbnail image = \(imageR)")
//println(UIImage(data: imageR))
thumbnailImage.image = imageR
}
}
}
@IBAction func controlBtn(sender: AnyObject) {
controlBtn.alpha = 0
moviePlayer = MPMoviePlayerController(contentURL: url)
let frameWidth = self.videoPlayerView.frame.size.width
let frameHeight = self.videoPlayerView.frame.size.height
//moviePlayer.view.frame = CGRect(x: 24, y: 18, width: frameWidth, height: frameHeight)
self.videoPlayerView.addSubview(moviePlayer.view)
// Send button backword
self.videoPlayerView.sendSubviewToBack(moviePlayer.view)
moviePlayer.fullscreen = false
moviePlayer.controlStyle = MPMovieControlStyle.Embedded
// Pure Visual Format Language style (http://stackoverflow.com/questions/26180822/swift-adding-constraints-programmatically)
(moviePlayer.view).setTranslatesAutoresizingMaskIntoConstraints(false)
let views = ["view": videoPlayerView, "videoView": moviePlayer.view]
var constH = NSLayoutConstraint.constraintsWithVisualFormat("H:[view]-(<=0)-[videoView(\(frameWidth))]", options: .AlignAllCenterY, metrics: nil, views: views)
view.addConstraints(constH)
var constW = NSLayoutConstraint.constraintsWithVisualFormat("V:[view]-(<=0)-[videoView(\(frameHeight))]", options: .AlignAllCenterX, metrics: nil, views: views)
view.addConstraints(constW)
}
override func viewDidDisappear(animated: Bool) {
moviePlayer.stop()
}
}任何帮助都将不胜感激。谢谢。
发布于 2015-06-06 20:57:47
从代码中看,您的moviePlayer属性似乎是在调用controlBtn(sender)操作时才定义的,因此,如果您在不首先按该按钮的情况下从该视图控制器导航,那么当视图控制器消失时,moviePlayer将是nil。
override func viewDidDisappear(animated: Bool) {
super.viewDidDisappear(animated) ///< Don't for get this BTW!
if let player = self.moviePlayer {
player.stop()
}
}此外,您的moviePlayer属性应该是可选的,而不是隐式未包装的可选的。这就是选项赛的意义所在--它们能阻止你犯这些错误,也不会发生像你所经历的那样的崩溃。
var moviePlayer: MPMoviePlayerController?https://stackoverflow.com/questions/30687380
复制相似问题