0

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];

}

この場合、ビデオを再生する際の問題は何ですか? どんな答えや提案も貴重です

4

1 に答える 1

0

あなたの方法は、多くの重大なバグにさらされています。

  1. メモリ キャッシュを使用してメディアをキャッシュします。キャッシュがいっぱいになるとどうなりますか? NSCache を使用している場合、アクセスする前にビデオが削除されることがあります。

  2. 一度に再生できるビデオは 1 つだけであることをご存知ですか? ここを読んでください。

  3. あなたがしていることには意味がありません。MPMoviePlayerController を作成し、後でしばらくそのままにしておきます。アプリのリソース使用量をプロファイリングすることをお勧めします。これは最も軽い操作ではないことがわかると思います。これにより、間接的なバグが発生する可能性があります。

私には、あなたはあまり役に立たないことをしようとしているように見えます。質問を編集して、何をしようとしているのかを正確に説明できる場合は、さらに役立つことがあります。そうでなければ、そのままでは、問題は貧弱な設計の実装バグを解決することです。悪い回答 (このようなもの) を受け取り、受け入れず、受け入れ率が低下し、将来の回答が得られなくなります。これがあなたのお役に立てば幸いです。最初は難しいと思いますが、説明してみてください。

  1. あなたの問題は何ですか?(大きな絵)
  2. 何を試しましたか?
  3. 何が悪かったのか?

この質問については、ステップ 1 を見逃しているようです。

于 2012-06-26T07:13:04.137 に答える