2016-09-17 35 views
0

我需要編寫一個應用程序,在視圖背景中有不同的短視頻循環。這些循環通常應該有10-30秒的長度。我想知道什麼會在性能和內存經濟性方面更好(從appstore下載時,應該將應用程序與應用程序捆綁在一起)iOS背景視頻循環GIF UIWebview或VideoPlayer

a)使用UIWebview作爲背景,其中視頻的動畫.gif是循環的 b)利用一些VideoPlayerView(AVPlayer)作爲背景與M4V,如文件 C),我還沒有考慮尚未

也將有音頻有些另類,但是音頻沒有鏈接到視頻

回答

0
- (void)playIntroVideo 
{ 
// NSBundle *bundle = [NSBundle mainBundle]; 
// // NSString *moviePath = iPadDevice ? [bundle pathForResource:@"IntroVideo" ofType:@"mp4"] : [bundle pathForResource:@"IntroVideo_iPhone" ofType:@"mp4"]; 
// NSString *moviePath = [bundle pathForResource:@"IntroVideo" ofType:@"mp4"]; 
// NSURL *movieURL = [NSURL fileURLWithPath:moviePath]; 

CGRect frame = self.movieView.frame; 
frame.origin.x=-200; 
frame.size.width+=200; 

AVAsset *avAsset = [AVAsset assetWithURL:movieURL]; 

AVAssetImageGenerator *gen = [[AVAssetImageGenerator alloc] initWithAsset:avAsset]; 
gen.appliesPreferredTrackTransform = YES; 
CMTime time = CMTimeMakeWithSeconds(0.0, 600); 
NSError *error = nil; 
CMTime actualTime; 

CGImageRef image = [gen copyCGImageAtTime:time actualTime:&actualTime error:&error]; 
UIImage *selectedImage = [[UIImage alloc] initWithCGImage:image]; 
CGImageRelease(image); 

UIImageView *img = [[UIImageView alloc] initWithImage:selectedImage]; 
img.frame = frame; 
[self.movieView addSubview:img]; 

AVPlayerItem *avPlayerItem =[[AVPlayerItem alloc]initWithAsset:avAsset]; 
self.avplayer = [[AVPlayer alloc]initWithPlayerItem:avPlayerItem]; 
avPlayerLayer =[AVPlayerLayer playerLayerWithPlayer:self.avplayer]; 
[avPlayerLayer setVideoGravity:AVLayerVideoGravityResize]; 

if (iPhoneDevice) 
    [avPlayerLayer setVideoGravity:AVLayerVideoGravityResizeAspectFill]; 

[avPlayerLayer setFrame:frame]; 

[self.movieView.layer addSublayer:avPlayerLayer]; 

[self.avplayer seekToTime:kCMTimeZero]; 

// Not affecting background music playing 
NSError *sessionError = nil; 

[[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryAmbient error:&sessionError]; 
[[AVAudioSession sharedInstance] setActive:YES error:&sessionError]; 

// [self.avplayer setVolume:0.0f]; 
[self.avplayer setActionAtItemEnd:AVPlayerActionAtItemEndNone]; 

} 
- (void)viewDidLoad 
{ 
[super viewDidLoad]; 
[self playIntroVideo]; 
} 
- (void)viewWillAppear:(BOOL)animated 
{ 
[super viewWillAppear:animated]; 
[self.avplayer play]; 
} 
- (void)viewWillDisappear:(BOOL)animated 
{ 
[super viewWillDisappear:animated]; 

[self.avplayer pause]; 
// self.avplayer = nil; 

[[NSNotificationCenter defaultCenter] removeObserver:self name:AVPlayerItemDidPlayToEndTimeNotification object:nil]; 
} 

- (void)viewDidAppear:(BOOL)animated 
{ 
[super viewDidAppear:animated]; 
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(playerItemDidReachEnd:) name:AVPlayerItemDidPlayToEndTimeNotification object:[self.avplayer currentItem]]; 

} 

- (void)playerItemDidReachEnd:(NSNotification *)notification 
{ 
AVPlayerItem *p = [notification object]; 
[p seekToTime:kCMTimeZero]; 
}