Có lẽ bạn đã nhận thấy một trong những xu hướng mới nhất trong ứng dụng iOS: Sử dụng video làm hình nền - chủ yếu tại màn hình đăng nhập hoặc "khởi chạy lần đầu". Hôm qua tôi đã cố gắng bắt chước điều này với một dự án thử nghiệm rất đơn giản (chỉ một bộ điều khiển xem) và tôi hài lòng với kết quả ngoại trừ hiệu suất . Khi dùng thử trong Trình mô phỏng iOS (trên iPhone mô phỏng 6), việc sử dụng CPU dao động giữa 70-110%. Điều này có vẻ rất không hợp lý cho một màn hình đăng nhập đơn giản.Phương pháp hiệu quả nhất cho video dưới dạng nền trong iOS
Đây là những gì nó trông giống như trong hành động: http://oi57.tinypic.com/nqqntv.jpg
Câu hỏi đặt ra là sau đó: Có cách nào CPU hiệu quả hơn để đạt được điều này? Các ứng dụng như Vine, Spotify và Instagram hoạt động như thế nào?
Trước khi bạn trả lời; phương pháp tôi sử dụng là một đoạn video Full-HD phát lại sử dụng 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];
}
Tất nhiên các cạnh của video có thể đã được cắt để giải quyết sẽ là một cái gì đó hơn dọc theo dòng nói 700x1080 thay vì 1920x1080 nhưng điều đó có tạo nên sự khác biệt lớn về hiệu suất không? Hoặc tôi có nên nén video với một định dạng và cài đặt nhất định để đạt được hiệu suất tối ưu không? Có lẽ có một cách tiếp cận hoàn toàn thay thế cho điều này?
Trên thực tế tôi đã cố gắng sử dụng GIF như đã mô tả trong bài viết này: https://medium.com/swift-programming/ios-make-an-awesome-video-background-view-objective-c-swift-318e1d71d0a2
Vấn đề với đó là:
- Tạo ảnh GIF ra khỏi video mất rất nhiều thời gian và công sức
- tôi thấy không có giảm đáng kể sử dụng CPU khi tôi thử nó
- Hỗ trợ nhiều kích thước màn hình là một cơn đau tổng cộng với cách tiếp cận này (ít nhất là khi tôi đã thử - với Autolayout và Kích cỡ lớp kích hoạt - Tôi không thể có được GIF để co quy mô rrectly giữa các thiết bị)
- Chất lượng video kém
Kích thước tập tin cho gif là cao hơn so với video cũng. Tôi cũng thích một giải pháp. –
Đồng nghiệp này có một phương pháp thú vị: https://medium.com/swift-programming/ios-make-an-awesome-video-background-view-objective-c-swift-318e1d71d0a2 –
Đọc câu hỏi trước khi bạn đăng, tôi đã thử rằng @DavidDelMonte –