AVPlayer 不会在 iOS9 中播放来自 url 的视频
Posted
技术标签:
【中文标题】AVPlayer 不会在 iOS9 中播放来自 url 的视频【英文标题】:AVPlayer wont play video from url in iOS9 【发布时间】:2015-09-30 11:43:29 【问题描述】:我正在尝试将 AVPlayer 嵌入 UIView 并从 url 播放 mp4 视频文件。问题是我只收到一个黑色空白视图(见截图)
在以前的 ios 版本中它对我有用,但自从升级到 iOS9 后我遇到了这个问题。
我的 .h 文件如下所示:
@interface ViewController : UIViewController
@property (strong, nonatomic) IBOutlet UIView *viewPlayerContainer;
而在我的实现文件中,我有以下内容:
@import AVFoundation;
@import AVKit;
@interface ViewController ()
@end
@implementation ViewController
- (void)viewDidLoad
[super viewDidLoad];
AVPlayerViewController *playerViewController = [[AVPlayerViewController alloc] init];
NSURL *url = [NSURL URLWithString:@"http://techslides.com/demos/sample-videos/small.mp4"];
AVURLAsset *asset = [AVURLAsset assetWithURL: url];
AVPlayerItem *item = [AVPlayerItem playerItemWithAsset: asset];
AVPlayer * player = [[AVPlayer alloc] initWithPlayerItem: item];
[playerViewController.view setFrame:CGRectMake(0, 0, _viewPlayerContainer.bounds.size.width, _viewPlayerContainer.bounds.size.width)];
playerViewController.showsPlaybackControls = NO;
[_viewPlayerContainer addSubview:playerViewController.view];
[player play];
我错过了什么吗?
提前致谢!
【问题讨论】:
可能是应用传输安全。尝试通过https:
加载视频和/或查看***.com/questions/30731785/…
我已经尝试过了,但没有成功
调试器中记录了任何内容?
好吧,您没有将 playerViewController 的播放器设置为您定义的播放器。另外,我认为这是不可能的,似乎 playerViewControllers 仅在您像任何其他视图控制器一样呈现 viewController 时才有效
嘿,你有没有找到任何解决方案,因为我也遇到同样的问题,视图只是空白:(。
【参考方案1】:
@implementation ViewController
AVPlayerViewController *playerViewController;
- (void)viewDidLoad
[super viewDidLoad];
playerViewController = [[AVPlayerViewController alloc] init];
- (IBAction)playVideo:(id)sender
NSURL *url = [NSURL URLWithString:@"http://techslides.com/demos/sample-videos/small.mp4"];
AVURLAsset *asset = [AVURLAsset assetWithURL: url];
AVPlayerItem *item = [AVPlayerItem playerItemWithAsset: asset];
AVPlayer * player = [[AVPlayer alloc] initWithPlayerItem: item];
playerViewController.player = player;
[playerViewController.view setFrame:CGRectMake(0, 0, self.view.bounds.size.width, self.view.bounds.size.width)];
playerViewController.showsPlaybackControls = YES;
[self.view addSubview:playerViewController.view];
[player play];
【讨论】:
【参考方案2】:视频不播放的原因只是tls
版本太旧,如果HTTP
请看App Transport Security
【讨论】:
我已经尝试将必要的密钥添加到我的 info.plist 但没有成功【参考方案3】:你的代码中缺少这行代码
playerViewController.player = player;
【讨论】:
【参考方案4】:将 AVPlayerViewController 作为呈现它的视图控制器的属性,然后在 viewDidLoad 中分配它。
【讨论】:
【参考方案5】:如果你想从一个 url 播放视频,那么你不需要使用 AVURLAsset。当您有多个视频或网址时,您应该使用 AVURLAsset。 (但两种方式都有效)
参考:https://developer.apple.com/library/ios/documentation/AVFoundation/Reference/AVAsset_Class/index.html#//apple_ref/occ/cl/AVAsset
如果您有一个 url,以下方法可以正常工作。
NSURL *url = [NSURL URLWithString:@“<your_url_here>”];
AVPlayer *player = [[AVPlayer alloc] initWithURL: url];
AVPlayerViewController *controller = [[AVPlayerViewController alloc]init];
controller.player = player;
controller.delegate = self;// if you want to use delegates...
controller.showsPlaybackControls=YES;
controller.view.frame = self.view.frame;
[self.view addSubview:controller.view];
[player play];
【讨论】:
以上是关于AVPlayer 不会在 iOS9 中播放来自 url 的视频的主要内容,如果未能解决你的问题,请参考以下文章
Swift AVPlayer 不会播放 MP4:播放按钮通过它