AVPlayer 无法正常工作
AVPlayer Not working properly
当我将页面滑动到return时,AVPlayer无法正常工作
-----------------------------------------
#import "TestAVPlayerViewController.h"
#import <AVFoundation/AVFoundation.h>
#import "TestAVPlayer-Swift.h"
@interface TestAVPlayerViewController ()
@property (strong, nonatomic) AVPlayer *player;
@property (strong, nonatomic) AVPlayerItem *playerItem;
@property (strong, nonatomic) AVPlayerLayer * playerLayer;
@end
@implementation TestAVPlayerViewController
- (void)viewDidLoad {
[super viewDidLoad];
[self initUI];
[self isEnableFullScreenReturn];
}
- (void)initUI{
UIScrollView *scrollView = [[UIScrollView alloc] initWithFrame:self.view.bounds];
scrollView.contentSize = CGSizeMake(self.width, self.height * 2);
scrollView.backgroundColor = [UIColor orangeColor];
[self.view addSubview:scrollView];
NSString *playURL = @"http://v.jxvdy.com/sendfile/w5bgP3A8JgiQQo5l0hvoNGE2H16WbN09X-ONHPq3P3C1BISgf7C-qVs6_c8oaw3zKScO78I--b0BGFBRxlpw13sf2e54QA";
AVAsset *asset = [AVURLAsset URLAssetWithURL:[NSURL URLWithString:playURL] options:nil];
_playerItem = [AVPlayerItem playerItemWithAsset:asset];
_player = [[AVPlayer alloc]initWithPlayerItem:self.playerItem];
[[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayback error:nil];
[[AVAudioSession sharedInstance] setActive:YES error:nil];
_playerLayer = [AVPlayerLayer playerLayerWithPlayer:_player];
_playerLayer.frame = CGRectMake(0, 150, 300, 300);
_playerLayer.backgroundColor = [UIColor blackColor].CGColor;
[scrollView.layer insertSublayer:_playerLayer atIndex:1];
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(5 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
[_player play];
});
}
- (CGFloat)width{
return self.view.bounds.size.width;
}
- (CGFloat)height{
return self.view.bounds.size.height;
}
-----------------------------------------
怎么解决这个问题,希望它回来的路上一切顺利。
您只在 viewDidLoad 上播放视频,因此当用户 "back" 进入您的视图后出现视图时,视频将不会开始播放。
尝试将您的 [_player play] 调用放入 viewDidAppear,例如:
- (void)viewWillAppear:(BOOL)animated
{
[self.player play];
}
如果这样做,请记住在 initUI 方法中删除播放调用,因为您不需要告诉播放器播放两次。
当我将页面滑动到return时,AVPlayer无法正常工作
-----------------------------------------
#import "TestAVPlayerViewController.h"
#import <AVFoundation/AVFoundation.h>
#import "TestAVPlayer-Swift.h"
@interface TestAVPlayerViewController ()
@property (strong, nonatomic) AVPlayer *player;
@property (strong, nonatomic) AVPlayerItem *playerItem;
@property (strong, nonatomic) AVPlayerLayer * playerLayer;
@end
@implementation TestAVPlayerViewController
- (void)viewDidLoad {
[super viewDidLoad];
[self initUI];
[self isEnableFullScreenReturn];
}
- (void)initUI{
UIScrollView *scrollView = [[UIScrollView alloc] initWithFrame:self.view.bounds];
scrollView.contentSize = CGSizeMake(self.width, self.height * 2);
scrollView.backgroundColor = [UIColor orangeColor];
[self.view addSubview:scrollView];
NSString *playURL = @"http://v.jxvdy.com/sendfile/w5bgP3A8JgiQQo5l0hvoNGE2H16WbN09X-ONHPq3P3C1BISgf7C-qVs6_c8oaw3zKScO78I--b0BGFBRxlpw13sf2e54QA";
AVAsset *asset = [AVURLAsset URLAssetWithURL:[NSURL URLWithString:playURL] options:nil];
_playerItem = [AVPlayerItem playerItemWithAsset:asset];
_player = [[AVPlayer alloc]initWithPlayerItem:self.playerItem];
[[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayback error:nil];
[[AVAudioSession sharedInstance] setActive:YES error:nil];
_playerLayer = [AVPlayerLayer playerLayerWithPlayer:_player];
_playerLayer.frame = CGRectMake(0, 150, 300, 300);
_playerLayer.backgroundColor = [UIColor blackColor].CGColor;
[scrollView.layer insertSublayer:_playerLayer atIndex:1];
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(5 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
[_player play];
});
}
- (CGFloat)width{
return self.view.bounds.size.width;
}
- (CGFloat)height{
return self.view.bounds.size.height;
}
----------------------------------------- 怎么解决这个问题,希望它回来的路上一切顺利。
您只在 viewDidLoad 上播放视频,因此当用户 "back" 进入您的视图后出现视图时,视频将不会开始播放。
尝试将您的 [_player play] 调用放入 viewDidAppear,例如:
- (void)viewWillAppear:(BOOL)animated
{
[self.player play];
}
如果这样做,请记住在 initUI 方法中删除播放调用,因为您不需要告诉播放器播放两次。