繁体   English   中英

Avplayer无法在iOS 8.0中播放视频

[英]Avplayer not playing video in ios 8.0

我已经以编程方式实现了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而不是视频。

我的代码需要更改什么?

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

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

尝试这样:添加到.m

@property(非原子的,保留)AVPlayer * player;

@属性(弱,非原子)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];

}

如果您为播放器使用ViewController 最佳做法是presentingViewController

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

如果您使用XIB

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM