首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >iOS背景视频循环GIF UIWebview或VideoPlayer

iOS背景视频循环GIF UIWebview或VideoPlayer
EN

Stack Overflow用户
提问于 2016-09-17 18:31:25
回答 1查看 159关注 0票数 0

我需要写一个应用程序,其中有一个视图的背景不同的短视频循环。这些循环通常应该有10-30秒的长度。我想知道在性能和内存经济性方面哪个更好(循环应该在应用程序商店下载时与应用程序捆绑在一起)

a)使用UIWebview作为循环视频的动画.gif的背景b)使用一些VideoPlayerView (AVPlayer)作为类似M4V文件的背景c)一些我还没有考虑过的替代方案

也会有音频,但是音频不会链接到视频

EN

回答 1

Stack Overflow用户

发布于 2016-09-17 18:35:57

代码语言:javascript
复制
- (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];
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39545767

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档