Простое видео в webView и потребление памяти - PullRequest
5 голосов
/ 12 января 2012

при воспроизведении видео в веб-просмотре и просмотре инструментов - я вижу высокий уровень использования памяти при воспроизведении. (Всего около 23 МБ)

Когда я покидаю представление (оно находится в представлении UINavigation), вся память очищается, как и должно быть. (с использованием ARC)

ВАЖНО : Я загружаю видео с диска и не загружаю его с сервера!

Вопрос: Есть ли способ уменьшить память при воспроизведении видео?

NSURLCache *sharedCache = [[NSURLCache alloc] initWithMemoryCapacity:0 diskCapacity:0 diskPath:nil]; 
[NSURLCache setSharedURLCache:sharedCache]; 
//

NSURLRequest *request = [[NSURLRequest alloc] initWithURL: videoURL cachePolicy: NSURLRequestReloadIgnoringLocalAndRemoteCacheData timeoutInterval: 10.0];  
[webView loadRequest: request];  
[webView setOpaque:NO];

enter image description here

1 Ответ

1 голос
/ 18 января 2012

Из вашего кода мне кажется, что вы пытаетесь использовать UIWebView в качестве видеоплеера, не отображая при этом никакого другого HTML-контента.

Несмотря на то, что это вполне возможно, это, как вы заметили, не особенно эффективно - UIWebView загружает весь свой контент в память, поскольку он был создан для отображения веб-страниц.

Лучшим решением было бы использование MediaPlayer платформы Apple, а именно MPMoviePlayerController и / или MPMoviePlayerViewController.

Если вам нужно только воспроизвести полноэкранное видео , вам следует использовать MPMoviePlayerViewController. Используя это просто:

MPMoviePlayerViewController *vc = [[MPMoviePlayerViewController alloc] initWithContentURL:videoURL];
[self presentMoviePlayerViewControllerAnimated:vc];
[vc release];

Это представит модальный контроллер вида, содержащий ваш клип. Если вы хотите настроить любую его часть, вы можете использовать свойство moviePlayer.

Если вы предпочитаете отображать видео в другом представлении , вы должны посмотреть MPMoviePlayerController. Использование этого класса требует больше шаблонов, но также дает вам больше контроля:

MPMoviePlayerController *player = [[MPMoviePlayerController alloc] initWithContentURL:videoURL];
[player prepareToPlay];
player.view.frame = contentView.bounds; //The Player View's Frame must match the Parent View's
// ...
[player play];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...