4

サーバーからビデオをダウンロードして保存し、で再生しようとしていますAVPlayer。私がこれまでに持っているのは:

  1. AFNetworking私はビデオデータをダウンロードするために使用し、リソースNSData内に保存していますNSDictionary
  2. TargetOverlayViewリソースコンテンツ(画像、テキスト、オーディオの再生、...ビデオ-できればすぐに)を表示するものを作成します
  3. ビデオを表示することになると、私はメソッドを書きました:

    (void)playVideo:(NSData*)video{
        NSLog(@"TargetOverlayView: playVideo");
        if (!video) {
            NSLog(@"TargetOV: nothing to play");
            [vPlayerLayer removeFromSuperlayer];
            vPlayerLayer = nil;
            vPlayer = nil;
            return;
        }
        //save nsdata into file
        NSLog(@"{SAVE} saving video data into file...");
        NSFileManager *fileManager = [NSFileManager defaultManager];            
        NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);             
        NSString *documentsDirectory = [paths objectAtIndex:0]; 
        NSString *filePath = [documentsDirectory stringByAppendingPathComponent:[NSString stringWithFormat:@"video.3gp"]];
        [fileManager createFileAtPath:filePath contents:video attributes:nil];
        AVPlayerItem *playerItem = [AVPlayerItem playerItemWithURL:[NSURL URLWithString:@"http://devimages.apple.com/iphone/samples/bipbop/bipbopall.m3u8"]];
        vPlayer = [[AVPlayer alloc] initWithPlayerItem:playerItem];//[AVPlayer playerWithPlayerItem:playerItem];
        vPlayerLayer = [[AVPlayerLayer alloc] init];//[AVPlayerLayer playerLayerWithPlayer:vPlayer];
        vPlayerLayer.player = vPlayer;
        [vPlayerLayer setFrame:self.frame];
        [vPlayerLayer setBackgroundColor:[[UIColor purpleColor] CGColor]];
        [self.layer addSublayer:vPlayerLayer];
        [vPlayer addObserver:self forKeyPath:@"status" options:0 context:NULL];
    }
    

オブザーバーも追加したので、いつプレイするかがわかります。

- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context {
if ([keyPath isEqualToString:@"status"]) {
    if (vPlayer.status == AVPlayerStatusReadyToPlay) {
        NSLog(@"video ready!");
        [vPlayer play];
    } else if (vPlayer.status == AVPlayerStatusFailed) {
        NSLog(@"vide faield: %@", [vPlayer.error localizedDescription]);
    }
}

}

サーバーからmp4と3gpのビデオをダウンロードして再生できればいいのですが、これを指定した場合に限ります。ダウンロードした3gpデータをから再生できませんfilepath(3gpまたは他の形式を再生することは可能ですか?)。ダウンロードした動画を再生する方法はありますか?ストリーミングは必要ありません(少なくとも今はroghtではありません)。すべての助けに感謝します。

編集:私はファイルを作ることについてのそのビットを次のように変更しました:

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *docDir = [paths objectAtIndex:0];
NSString *filePath = [docDir stringByAppendingPathComponent:@"video.mp4"];
[video writeToFile:filePath atomically:YES];

まだ機能していません...

EDIT2:サーバーでこのファイルへのリンクを入力しました-その後は機能しました(mp4でのみ機能します)が、リソースへのリンクだけでなく、データをダウンロードしてそこからビデオを再生する必要があります...

4

0 に答える 0