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:播放按钮通过它

基于 AVPlayer 自定义播放器

基于 AVPlayer 自定义播放器

AVPlayer 无法在 iOS 9 上播放

在 IOS 9 上使用 AVPlayer 和 Swift 反向播放视频

Hls 流 url 不会在 AVPlayer 中播放