【问题标题】:Avplayer not playing video in ios 8.0Avplayer 不在 ios 8.0 中播放视频
【发布时间】:2017-02-23 14:53:09
【问题描述】:

我已经以编程方式实现了 avplayer。

@interface showAskUsVideo ()
{
    AVURLAsset *asset;
    AVPlayerItem *item;
}   
@property (strong, nonatomic) AVPlayer *player;

-(void)viewWillAppear:(BOOL)animated
{
    [self playVideo];
}

-(void)playVideo {
         [playerViewController.view setFrame:CGRectMake(37, 80 ,495,220)];
         asset = [AVURLAsset assetWithURL: url];
         item = [AVPlayerItem playerItemWithAsset: asset];
         _player = [[AVPlayer alloc] initWithPlayerItem: item];
         playerViewController.showsPlaybackControls = NO;
        playerViewController.player = _player;

        [item addObserver:self forKeyPath:@"playbackLikelyToKeepUp" options:NSKeyValueObservingOptionInitial | NSKeyValueObservingOptionNew context:nil];

       [_player addObserver:self forKeyPath:@"rate" options:0 context:nil];

       [self.view addSubview:playerViewController.view];
}

但是当我选择部署目标 10.0 时,它工作正常。但对于 iOS 8.0 到 9.3,屏幕上只能看到 PlaybackControls 而不是视频。

我的代码需要改变什么?

【问题讨论】:

    标签: ios objective-c avplayer avplayerviewcontroller


    【解决方案1】:

    playerViewController 是视图控制器层次结构的一部分吗?如果没有,那就可以解释了。尝试将其添加为视图控制器的子视图控制器:

    [self addChildViewController:playerViewController];
    [self.view addSubview:playerViewController.view];
    

    【讨论】:

    • 我正在以编程方式添加 playerViewController.... 我也尝试 [self addChildViewController:playerViewController];但它仍然没有显示视频
    【解决方案2】:

    试试这样:添加到 .m

    @property (nonatomic, retain)AVPlayer *player;

    @property (weak, nonatomic) IBOutlet AVPlayerClass *playerView;

    (playerView 是你想要显示的视图)

    NSURL *url = [[NSBundle mainBundle]URLForResource:@"video_name" withExtension:@"mp4"];
    _player = [AVPlayer playerWithURL:url];
    
    
    playerLayer = [AVPlayerLayer playerLayerWithPlayer:_player];
    playerLayer.frame = _playerView.bounds;
    
    playerLayer.videoGravity = AVLayerVideoGravityResizeAspectFill;
    
    [_playerView.layer insertSublayer:playerLayer atIndex:0];
    
    _player.actionAtItemEnd = AVPlayerActionAtItemEndNone;
    [[NSNotificationCenter defaultCenter] addObserver:self
                                             selector:@selector(playerItemDidReachEnd:)
                                                 name:AVPlayerItemDidPlayToEndTimeNotification
                                               object:[_player currentItem]];
    [_player play];
    
    
    
    -(void)playerItemDidReachEnd:(NSNotification *)notification{
    
    AVPlayerItem *p = [notification object];
    [p seekToTime:kCMTimeZero];
    
    }
    

    【讨论】:

      【解决方案3】:

      如果您为播放器使用ViewController。最佳实践是presentingViewController

      [self presentViewController:playerViewController animated:YES completion:nil];
      

      如果你使用 xib

      PlayerViewController *vc = [[PlayerViewController alloc]
                                initWithNibName:@"PlayerViewController" bundle:nil];
      [self.view addSubview:[vc view]];
      

      【讨论】:

      • 怎么样?我正在使用 xib,所以我正在推动 viewController
      • 而不是[self.view addSubview:playerViewController.view];
      • 我在评论中添加了 xib 的部分
      猜你喜欢
      • 2015-10-16
      • 1970-01-01
      • 1970-01-01
      • 2015-07-26
      • 1970-01-01
      • 1970-01-01
      • 2013-07-02
      • 1970-01-01
      • 2016-06-12
      相关资源
      最近更新 更多