【问题标题】:MPmoviePlayer going black after updating to IOS 9 ( swift )更新到 IOS 9 后 MPmoviePlayer 变黑(快速)
【发布时间】:2015-10-13 20:47:09
【问题描述】:

[已解决] 您好,我的应用程序曾经加载和播放视频没有任何问题,当我更新到 ios 9 时出现问题。我试图让每个单元格都有自己的子视图来播放视频。

我的源代码很长,但这是我关心的部分。

在主视图控制器中:

    func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell{
                   let cell: CustomCellTableViewCell = tableView.dequeueReusableCellWithIdentifier("cell", forIndexPath: indexPath) as! CustomCellTableViewCell

                    let videoURL = NSURL(string: Videos[indexPath.row].url!)
                    cell.moviePlayer = MPMoviePlayerController(contentURL: videoURL)
                    cell.moviePlayer.controlStyle = MPMovieControlStyle.None
                    cell.moviePlayer.scalingMode = MPMovieScalingMode.AspectFit
                    cell.moviePlayer.movieSourceType = MPMovieSourceType.File
                    cell.moviePlayer.repeatMode = MPMovieRepeatMode.One
                    cell.moviePlayer.initialPlaybackTime = -1.0
                    cell.moviePlayer.view.frame = cell.movieView.bounds
                    cell.moviePlayer.view.center = CGPointMake(CGRectGetMidX(cell.movieView.bounds), CGRectGetMidY(cell.movieView.bounds))
                    cell.moviePlayer.prepareToPlay()
                    cell.moviePlayer.pause()
                    cell.movieView.addSubview(cell.moviePlayer.view)
return cell
}

在自定义单元格中

import UIKit
import Parse
import Bolts
import MediaPlayer
import AVKit
@available(iOS 8.0, *)
class CustomCellTableViewCell: UITableViewCell {

  @IBOutlet weak var movieView: UIView!
    
    var moviePlayer: MPMoviePlayerController!
   
    var videoURL:NSURL!
    
    override func awakeFromNib() {
        super.awakeFromNib()
        moviePlayer = MPMoviePlayerController(contentURL: videoURL)
      
    }

 override func setSelected(selected: Bool, animated: Bool) {
        super.setSelected(selected, animated: animated)

        // Configure the view for the selected state
    }

}

以前可以完美运行,现在编译没有任何错误,但没有显示视频,而是黑屏。

注意:我还更改了一件事,在构建设置中,我将 Bitcode 设置为 NO,以消除链接器命令失败!

**

我是如何解决的 ---//

所以我所要做的(原始代码不变)就是为所有构建重新启用 Bitcode(除了 debug ) o 摆脱链接器命令。之后,我编辑了我的 info.plist ( 添加 NSAppTransportSecurity [Dictionary] 与一项 NSAllowsArbitraryLoads [布尔] = YES)

这对我有用,现在一切都恢复正常 =)

【问题讨论】:

    标签: ios xcode swift video avplayer


    【解决方案1】:

    From Apple MPMoviePlayerController Docs

    在 iOS 9 中正式弃用 MPMoviePlayerController 类。 (MPMoviePlayerViewController 类也被正式弃用。) 要在 iOS 9 及更高版本中播放视频内容,请改用 AVPictureInPictureController 或 AVPlayerViewController 类来自 AVKit 框架,或来自 WebKit 的 WKWebView 类。

    您需要切换到使用AVPlayerViewController

    Link to AVPlayerViewController Docs

    对于 AVPlayerViewController

    let videoURL = NSURL(string: Videos[indexPath.row].url!)
    let player = AVPlayer(URL: videoURL)
    var playerViewController = AVPlayerViewController()
    playerViewController.player = player
    self.presentViewController(playerViewController, animated: true) {
        playerViewController.player.play()
    }
    

    只有 AVPlayer

    let videoURL = NSURL(string: Videos[indexPath.row].url!)
    let player = AVPlayer(URL: videoURL)
    let playerLayer = AVPlayerLayer(player: player)
    playerLayer.frame = cell.view.bounds
    cell.view.layer.addSublayer(playerLayer)
    player.play()
    

    确保添加import AVKitimport AVFoundation

    【讨论】:

    • 不知道为什么这被否决了。据我所知,没有任何不正确的信息
    • russel,我无法显示任何内容:我想要此代码:moviePlayer = MPMoviePlayerController(contentURL: receivedURL) moviePlayer!.movi​​eSourceType = MPMovieSourceType.Unknown moviePlayer!.view.frame = view。 bounds moviePlayer!.scalingMode = MPMovieScalingMode.AspectFill moviePlayer!.controlStyle = MPMovieControlStyle.None moviePlayer!.shouldAutoplay = true view.addSubview((moviePlayer?.view)!) //moviePlayer!.prepareToPlay() moviePlayer?.setFullscreen(true,动画:真)moviePlayer!.play() 工作
    猜你喜欢
    • 2015-12-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-29
    相关资源
    最近更新 更多