无法在 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:在播放视频时可以交互的按钮层下播放视频?
如何知道 youtube 视频何时开始播放以及何时在 ios 的 web 视图中按下 mpmovieplayer 的完成按钮