【问题标题】:AVPlayer wont play video from url in iOS9AVPlayer 不会在 iOS9 中播放来自 url 的视频
【发布时间】: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: 加载视频和/或查看stackoverflow.com/questions/30731785/…
  • 我已经尝试过了,但没有成功
  • 调试器中记录了任何内容?
  • 好吧,您没有将 playerViewController 的播放器设置为您定义的播放器。另外,我认为这是不可能的,似乎 playerViewControllers 仅在您像任何其他视图控制器一样呈现 viewController 时才有效
  • 嘿,你有没有找到任何解决方案,因为我也遇到同样的问题,视图只是空白:(。

标签: ios xcode avplayer


【解决方案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];
        

        【讨论】:

          猜你喜欢
          • 2020-06-27
          • 1970-01-01
          • 2016-06-12
          • 2021-04-21
          • 1970-01-01
          • 2016-10-02
          • 1970-01-01
          • 2017-02-23
          • 2013-07-02
          相关资源
          最近更新 更多