我正在使用iOS中的视频和图像缓存。我已经实现了图像缓存。现在在同一个缓存中我想存储视频,我还有以下代码用于将图像和视频存储到缓存中:
-(void)cacheFromURL:(Food*)foodForUrl
{
AppDelegate *app=[[UIApplication sharedApplication]delegate];
[app.imageCache setCountLimit:50];
NSURL *imageUrl=[NSURL URLWithString:foodForUrl.image];
NSURL *videoUrl=[NSURL URLWithString:foodForUrl.video];
UIImage* newImage = [cache objectForKey:imageUrl.description];
if( !newImage )
{
NSError *err = nil;
if(imageUrl!=Nil)
{
newImage=[UIImage imageWithData:[NSData dataWithContentsOfURL:imageUrl options:0 error:&err]];
}
if(videoUrl!=Nil)
{
moviePlayer=[[MPMoviePlayerController alloc]initWithContentURL:videoUrl];
[app.imageCache setObject:moviePlayer forKey:videoUrl.description];
NSLog(@"video caching....%@",videoUrl.description);
}
if( newImage )
{
[app.imageCache setObject:newImage forKey:imageUrl.description];
NSLog(@"caching....");
}
else
{
}
}
}
我有以下代码用于从缓存中检索。它适用于图像但不适用于视频:
- (IBAction)playButton:(id)sender
{
AppDelegate *app=[[UIApplication sharedApplication]delegate];
NSURL *url=[[NSURL alloc]initWithString:food.video];
NSLog(@"cached for:%@",url.description);
moviePlayerController=[[MPMoviePlayerController alloc]init];
// moviePlayerController=[[MPMoviePlayerController alloc]initWithContentURL:[NSURL URLWithString:food.video]];
moviePlayerController=[app.imageCache objectForKey:url.description];
moviePlayerController.scalingMode=MPMovieScalingModeAspectFill;
moviePlayerController.view.frame=CGRectMake(320,200, 320,200);
[self.view addSubview:moviePlayerController.view];
[moviePlayerController play];
}
在这种情况下播放视频有什么问题?任何答案和建议都是有价值的
答案 0 :(得分:0)
您的方法对许多严重错误持开放态度。
您使用内存缓存来缓存媒体。如果缓存变满,会发生什么?如果您使用的是NSCache,则可能会在访问之前删除该视频。
您是否知道一次只能播放一个视频?阅读here。
你在做什么都没有意义。您创建一个MPMoviePlayerController,然后将其保留到以后的某个时间。我建议您分析您的应用资源使用情况,我想您会发现这不是最轻的操作。这可能会导致间接错误。
对我来说,你似乎在尝试做一些不太有用的事情。如果您可以编辑问题以解释您要做什么,我们可以提供更多帮助。否则,问题就是要求我们解决设计中的实施错误。你会得到一个糟糕的答案(比如这个),你不会接受,你的接受率会下降,你将无法获得未来的答案。我希望这对你有所帮助,我知道一开始很难,但试着解释一下:
对于这个问题,你似乎错过了第1步。