无法在 MPMoviePlayer 中播放视频?

Posted

技术标签:

【中文标题】无法在 MPMoviePlayer 中播放视频?【英文标题】:Unable to play the video in 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 视频,请重新编辑此***.com/questions/25743208/… 【参考方案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”

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

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

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

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

【讨论】:

以上是关于无法在 MPMoviePlayer 中播放视频?的主要内容,如果未能解决你的问题,请参考以下文章

搜索文件时 MPMoviePlayer 播放音频但不播放视频

avaudioplayer 干扰 ipad 上的 mpmovieplayer

iPhone开发mpmovieplayer崩溃

IPHONE MPMoviePlayer:在播放视频时可以交互的按钮层下播放视频?

如何知道 youtube 视频何时开始播放以及何时在 ios 的 web 视图中按下 mpmovieplayer 的完成按钮

在没有 UIWebView 或 MPMoviePlayer 的情况下播放 .mov 文件