MPMoviePlayerController 仅显示黑屏 - Swift

Posted

技术标签:

【中文标题】MPMoviePlayerController 仅显示黑屏 - Swift【英文标题】:MPMoviePlayerController shows only black screen - Swift 【发布时间】:2014-09-10 20:21:35 【问题描述】:

我在 ViewController 中有一个视图,我想向它添加一个移动播放器控制器。但到目前为止,我只得到一个黑屏。 我在模拟器上运行它,并使用我在 Safari 中测试过的苹果开发流,它可以工作。

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

这一切都在 UIViewController 中。

videoView 320x320(全局)声明:

    @IBOutlet var videoView: UIView!

MPMoviePlayerController 的声明(全局):

    var videoPlayer : MPMoviePlayerController = MPMoviePlayerController()

添加 videoPlayer 到视图:

            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()

故事板:

模拟器:

更新:

我也尝试过这样做。超级简单。我仍然得到相同的结果。帧大小是这样设置的,这样我就可以看到播放器实际上已经添加了。

            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()

【问题讨论】:

我们需要更多的信息,即你​​如何声明和初始化你的播放器,你的播放器视图和开发流的实现等等。更多的代码会很有帮助。 @Unheilig 声明和初始化已添加。玩家视图只是添加到故事板的 320x320 视图,添加了声明。开发流取自苹果,它是一个基本的 HLS 流。 【参考方案1】:

我最终放弃了 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()

【讨论】:

我可以将它添加到任何视图中并且我的网址中的视频会播放吗?我如何将其设置为背景?谢谢 @BZMWillemsen 我收到“使用未解析的标识符 videoView,你在哪里声明它?我已经尝试了很多东西,我还必须解开 3 个变量 @Gerwin 将您自己的 videoView (UIView) 单独添加到您的控制器中。该 UIView 将覆盖您的播放器。【参考方案2】:

而不是使用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")
    

【讨论】:

以上是关于MPMoviePlayerController 仅显示黑屏 - Swift的主要内容,如果未能解决你的问题,请参考以下文章

MPMoviePlayerController 仅显示黑屏 - Swift

如何在隐藏控件时仅捕获 MPMoviePlayerController 视图上的单击/点击?

设置 MPMoviePlayerController 的方向

MPMoviePlayerController 全屏方向问题

奇怪的 MPMoviePlayerController 视图旋转/动画...

是否有 MPMoviePlayerController 视图的开源 AVFoundation 实现? [关闭]