简体   繁体   English

Avplayer无法在iOS 8.0中播放视频

[英]Avplayer not playing video in ios 8.0

I have implemented avplayer programatically. 我已经以编程方式实现了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];
}

But when I select deployment target 10.0 then its working fine. 但是,当我选择部署目标10.0时,它可以正常工作。 But for iOS 8.0 to 9.3 only PlaybackControls is seen on screen not video. 但是,对于iOS 8.0到9.3,只能在屏幕上看到PlaybackControls而不是视频。

What need to change in my code? 我的代码需要更改什么?

Is playerViewController part of the view controller hierarchy? playerViewController是否是视图控制器层次结构的一部分? If not, that could explain it. 如果没有,那可以解释一下。 Try adding it as a child view controller of your view controller: 尝试将其添加为视图控制器的子视图控制器:

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

Try like that: Add to .m 尝试这样:添加到.m

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

@property (weak, nonatomic) IBOutlet AVPlayerClass *playerView; @属性(弱,非原子)IBOutlet AVPlayerClass * playerView;

(playerView is your view where you want to show it) (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];

}

If you using a ViewController for your player. 如果您为播放器使用ViewController The best practice is presentingViewController 最佳做法是presentingViewController

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

if you using xib 如果您使用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