che*_*ewy 5 memory iphone video objective-c ios
在webview中播放视频并查看乐器时 - 我看到播放时内存使用率很高.(总共大约23 MB)
当我离开视图(它处于UINavigation视图中)时,所有内存都会被清除.(使用ARC)
重要提示:我正在从DISK加载视频而不是从服务器加载它!
问题:播放视频时是否有办法减少内存?
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];
Run Code Online (Sandbox Code Playgroud)
从您的代码看来,您正在尝试使用 UIWebView 作为视频播放器,而不同时在其中显示任何其他 HTML 内容。
尽管这是很有可能的,但正如您所观察到的,它并不是特别有效 - UIWebView 会将其所有内容加载到内存中,因为它是为显示网页而设计的。
更好的解决方案是使用 Apple 的MediaPlayer
框架,即MPMoviePlayerController
and/or MPMoviePlayerViewController
。
如果您只需要播放全屏视频,则应该使用MPMoviePlayerViewController
. 使用它很简单:
MPMoviePlayerViewController *vc = [[MPMoviePlayerViewController alloc] initWithContentURL:videoURL];
[self presentMoviePlayerViewControllerAnimated:vc];
[vc release];
Run Code Online (Sandbox Code Playgroud)
这将呈现一个包含您的剪辑的模态视图控制器。如果您想自定义它的任何部分,您可以使用该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];
Run Code Online (Sandbox Code Playgroud)