【问题标题】:Unable to play the video in MPMoviePlayer?无法在 MPMoviePlayer 中播放视频?
【发布时间】:2018-11-15 16:49:56
【问题描述】:
NSURL *url =[[NSURL alloc]initWithString:@"http://www.youtube.com/watch?v=Jeh40KFFS5Y"];
  MPMoviePlayerController *player1 = [[MPMoviePlayerController alloc] initWithContentURL:url];
        [player1 setContentURL:url];
        [player1 setMovieSourceType:MPMovieSourceTypeFile];
        [[player1 view] setFrame:self.view.bounds];
        player1.scalingMode = MPMovieScalingModeNone;
        player1.repeatMode = MPMovieRepeatModeNone;
        [self.view addSubview: [player1 view]];
        [player1 play];

在 MPMoviePlayer 中播放 url 时出现以下错误:

HTTP (http://) 资源加载,因为它不安全。可以通过应用的 Info.plist 文件配置临时例外。

2018-06-06 11:15:31.891375+0530 视频[1866:137968] 任务 . 以错误结束 - 代码:-1022 2018-06-06 11:15:31.891439+0530 视频 [1866:138011] 任务 . 以错误结束 - 代码:-1022 2018-06-06 11:15:32.269777+0530 vedio[1866:137470] [回放] 用于解决错误错误域=AVFoundationErrorDomain 代码=-11800“操作无法完成”UserInfo={NSLocalizedFailureReason=发生未知错误(-1022), NSLocalizedDescription=操作无法完成,NSUnderlyingError=0x600000449e70 {Error Domain=NSOSStatusErrorDomain Code=-1022 "(null)"}} 2018-06-06 11:15:32.271275+0530 vedio[1866:137470] [回放] ❗️Resolution for item could not resolve error: Error Domain=AVFoundationErrorDomain Code=-11800 "The operation could not be completed" UserInfo={NSLocalizedFailureReason =发生未知错误 (-1022), NSLocalizedDescription=操作无法完成, NSUnderlyingError=0x600000449e70 {Error Domain=NSOSStatusErrorDomain Code=-1022 "(null)"}} 解析错误: (null) 2018-06-06 11:15:32.271423+0530 vedio[1866:137470] [回放] ❗️回放失败并出现错误:错误域=AVFoundationErrorDomain 代码=-11800“操作无法完成”用户信息={NSLocalizedFailureReason=未知发生错误(-1022),NSLocalizedDescription=操作无法完成,NSUnderlyingError=0x600000449e70 {Error Domain=NSOSStatusErrorDomain Code=-1022 "(null)"}},未解决(canResolve:否,allowItemErrorResolution:否) 2018-06-06 11:15:32.301954+0530 视频[1866:137470] [回放] ❗️无法排队任何项目。

【问题讨论】:

  • 您是否尝试过其他视频而不是 youtube?
  • @Mahendra GP 是的,我尝试遇到同样的错误。
  • 检查已编辑的答案。
  • 如果您想播放 youtube 视频,请重新编辑此stackoverflow.com/questions/25743208/…

标签: ios objective-c iphone mpmovieplayer


【解决方案1】:

您未启用应用传输安全协议。所以简单的这段代码对你来说就足够了。打开带有源代码的 info.plist 文件并粘贴我的代码。

<key>NSAppTransportSecurity</key>
<dict>
     <key>NSAllowsArbitraryLoads</key>
<true/>
</dict>

【讨论】:

    【解决方案2】:

    您的视频将无法在您需要的 MPMoviePlayerController 中播放

    一个解决方案是使用

    pod 'YouTubePlayer'
    

    使用 pod 你需要给 youtubeplayerview 和东西,但是一些所有者禁止在另一个应用程序中播放

    所以你需要解决,比如 youtube 是否在 youtube 中播放,否则在浏览器中打开

    func playInYoutube(youtubeURL: String) {
            if let youtubeURL = URL(string: youtubeURL),
                UIApplication.shared.canOpenURL(youtubeURL) {
                // redirect to app
                UIApplication.shared.open(youtubeURL, options: [:], completionHandler: nil)
            } else if let youtubeURL = URL(string: youtubeURL) {
                // redirect through safari
                UIApplication.shared.open(youtubeURL, options: [:], completionHandler: nil)
            }
        }
    

    【讨论】:

      【解决方案3】:

      由于您使用的是不安全的连接(http://),因此您需要在 info.plist 中添加以下内容。

      <key>NSAppTransportSecurity</key>
      <dict>
        <key>NSExceptionDomains</key>
         <dict>
          <key>youtube.com</key>
          <dict>
            <!--Include to allow subdomains-->
            <key>NSIncludesSubdomains</key>
            <true/>
            <!--Include to allow HTTP requests-->
            <key>NSExceptionAllowsInsecureHTTPLoads</key>
            <true/>
          </dict>
        </dict>
      </dict>
      

      或者你可以使用惰性方法。

      <key>NSAppTransportSecurity</key>
      <dict>
          <key>NSAllowsArbitraryLoads</key>
          <true/>
      </dict>
      

      然后尝试播放视频。

      如果问题仍然存在,请尝试使用https:// 而不是http:// 播放视频。

      使用AVPlayer

      NSURL *videoURL = [NSURL URLWithString:@"https://www.youtube.com/watch?v=Jeh40KFFS5Y"];
      AVAsset *avAsset = [AVAsset assetWithURL:videoURL];
      AVPlayerItem *item = [AVPlayerItem playerItemWithAsset:avAsset];
      AVPlayer * avPlayer = [AVPlayer playerWithPlayerItem:item];
      
      AVPlayerLayer *playerLayer = [[AVPlayerLayer alloc] initWithLayer:avPlayer];
      playerLayer.frame = self.view.frame;
      playerLayer.videoGravity = AVLayerVideoGravityResizeAspectFill;
      
      [self.view.layer addSublayer:playerLayer];
      

      【讨论】:

      • 我已经使用了上述所有解决方案,但无法播放视频。你能推荐任何其他可以播放上述视频的播放器吗?
      • 是的,您可以使用 AVPlayer。
      【解决方案4】:

      我使用
      播放了来自 Youtube 的视频 pod "youtube-ios-player-helper", "~> 0.1.4" 效果很好。

      安装此 pod 后,

      导入“YTPlayerView.h”

      1. 拖动一个 UIView 并将自定义类更改为“YTPlayerView”

      2. @property (weak, nonatomic) IBOutlet YTPlayerView *PlayerView; // 创建出口

      在 viewDidload 中你可以编写播放视频的单行代码

      1. [self.PlayerView loadWithVideoId:@"UQxxt6R5VtQ"]; // 你可以从 url 获取 video_id。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-12-06
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多