2014-09-10 78 views
5

我在ViewController中有一个View,我想添加一个移动播放器控制器。但到目前为止,我只能看到黑屏。 我在模拟器上运行它,并使用我在Safari中测试的苹果开发流,它工作。MPMoviePlayerController只显示黑屏 - Swift

videoView通过IBOutlet添加到控制器。我正在使用Xcode 6 beta 7.

这是所有在UIViewController中。 videoView 320×320(全球)的

声明:

@IBOutlet var videoView: UIView! 

的MPMoviePlayerController(全球)声明:

var videoPlayer : MPMoviePlayerController = MPMoviePlayerController() 

添加录像机来查看:

  videoURLWithPath = "http://devimages.apple.com/iphone/samples/bipbop/bipbopall.m3u8" 
      let videoURL = NSURL(fileURLWithPath: videoURLWithPath) 
      videoPlayer.movieSourceType = MPMovieSourceType.Streaming; 
      videoPlayer.contentURL = videoURL 
      videoPlayer.view.frame = videoView.bounds 

      videoView.addSubview(videoPlayer.view) 
      videoPlayer.controlStyle = MPMovieControlStyle.Embedded 

      videoPlayer.prepareToPlay() 
      videoPlayer.play() 

故事板:

Storyboard

模拟器:

enter image description here

更新:

我也试着这样做。超级简单。而且我仍然得到相同的结果。帧大小是这样设置的,以便我可以看到玩家实际上已被添加。

  let streamURL = NSURL(string: "http://www.thumbafon.com/code_examples/video/segment_example/prog_index.m3u8") 
      var streamPlayer = MPMoviePlayerController(contentURL: streamURL) 
      streamPlayer.view.frame = CGRect(x: 10, y: 10, width: 200, height: 200) 
      streamPlayer.controlStyle = MPMovieControlStyle.Embedded 
      videoView.addSubview(streamPlayer.view) 
      streamPlayer.play() 
+0

我们会需要比这更多的信息,即你​​如何声明和初始化你的播放器,你的播放器视图和开发流的实现等等。更多的代码将会有所帮助。 – Unheilig 2014-09-10 20:46:41

+0

@Unheilig宣言和init添加。玩家视图只是一个添加到故事板的320x320视图,添加了声明。开发流源自苹果,这是一个基本的HLS流。 – bzmw 2014-09-10 20:52:00

回答

4

我最终放弃了MPMoviePlayerController并选择使用AVFoundation来代替。

工作例如:

全局声明:

var player : AVPlayer? = nil 
var playerLayer : AVPlayerLayer? = nil 
var asset : AVAsset? = nil 
var playerItem: AVPlayerItem? = nil 

里面viewDidLoad中:

  let videoURLWithPath = "http://devimages.apple.com/iphone/samples/bipbop/bipbopall.m3u8" 
      let videoURL = NSURL(string: videoURLWithPath) 

      asset = AVAsset.assetWithURL(videoURL) as? AVAsset 
      playerItem = AVPlayerItem(asset: asset) 

      player = AVPlayer(playerItem: self.playerItem) 

      playerLayer = AVPlayerLayer(player: self.player) 
      playerLayer!.frame = videoView.frame 
      videoView.layer.addSublayer(self.playerLayer) 

      player!.play() 
+0

我可以将此添加到任何视图和视频在我的网址将播放?我如何将它设置为背景?谢谢 – kareem 2015-04-09 05:10:09

+0

@BZMWillemsen我得到'使用未解析的标识符videoView,你在哪里声明它?我已经尝试了很多东西,我还不得不拆开3个变量 – Gerwin 2016-02-03 14:06:10

+0

@Gerwin将您自己的videoView(UIView)分别添加到控制器中。 UIView将会覆盖你的播放器。 – Batu 2016-03-06 20:17:50

1

而不是使用MPMoviePlayerController,这完美的作品对我来说:

// import MediaPlayer 

var moviePlayer : MPMoviePlayerViewController? 

@IBAction func playVideo() { 

    let path = NSBundle.mainBundle().pathForResource("ra3", ofType:"mp4") 
    let url = NSURL.fileURLWithPath(path!) 

    let videoURL = url 
    moviePlayer = MPMoviePlayerViewController(contentURL: videoURL) 

    if let player = moviePlayer { 
     player.view.frame = self.view.bounds 
     self.presentViewController(moviePlayer!, animated: true, completion: nil) 
    } 
    else { 
     NSLog("no player") 
    } 
}