Возможно, вы заметили одну из последних тенденций в iOS-приложениях: использование видео в качестве фона - в основном на экранах входа или "первого запуска". Вчера я попытался подражать этому с помощью очень простого тестового проекта (только одного контроллера представления), и я доволен результатами, за исключением производительности. При тестировании в iOS Simulator (на моделированном iPhone 6) использование ЦП колеблется между 70-110%. Это кажется очень необоснованным для простого экрана входа в систему.
Вот как это выглядит в действии: http://oi57.tinypic.com/nqqntv.jpg
Вопрос заключается в следующем: есть ли более эффективный для CPU способ достичь этого? Как это делают такие приложения, как Vine, Spotify и Instagram?
Прежде чем ответить; метод, который я использовал, - это воспроизведение полного HD-видео с помощью MPMoviePlayerController:
- (void)viewDidLoad {
[super viewDidLoad];
// find movie file
NSString *moviePath = [[NSBundle mainBundle] pathForResource:@"arenaVideo" ofType:@"mp4"];
NSURL *movieURL = [NSURL fileURLWithPath:moviePath];
// load movie
self.moviePlayer = [[MPMoviePlayerController alloc] initWithContentURL:movieURL];
self.moviePlayer.controlStyle = MPMovieControlStyleNone;
self.moviePlayer.view.frame = self.view.frame;
self.moviePlayer.scalingMode = MPMovieScalingModeAspectFill;
[self.view addSubview:self.moviePlayer.view];
[self.view sendSubviewToBack:self.moviePlayer.view];
[self.moviePlayer play];
// loop movie
[[NSNotificationCenter defaultCenter] addObserver: self
selector: @selector(replayMovie:)
name: MPMoviePlayerPlaybackDidFinishNotification
object: self.moviePlayer];
}
#pragma mark - Helper methods
-(void)replayMovie:(NSNotification *)notification
{
[self.moviePlayer play];
}
Конечно, края видео можно было бы обрезать так, чтобы разрешение было чем-то большим по сравнению с 700x1080 вместо 1920x1080, но могло ли это иметь огромную разницу в производительности? Или мне нужно сжать видео с определенным форматом и настройками для достижения оптимальной производительности? Может быть, существует совершенно альтернативный подход к этому?
На самом деле я попытался использовать GIF, как описано в этой статье: https://medium.com/swift-programming/ios-make-an-awesome-video-background-view-objective-c-swift-318e1d71d0a2
Проблема с этим:
- Создание GIF файлов из видео занимает много времени и усилий.
- Я не видел значительного снижения использования ЦП, когда я его пробовал
- Поддержка нескольких размеров экрана является общей болью при таком подходе (по крайней мере, когда я пытался - с включенными режимами Autolayout и Size), я не мог правильно настроить GIF на всех устройствах.
- Качество видео плохое