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 全屏方向问题