2011-12-26 45 views
7

Tôi nhận được bộ đệm khung một từ tệp video bằng cách sử dụng AVAssetReader và thực hiện một số thao tác trên khung và sau đó lưu khung mới vào tệp tạm thời bằng cách sử dụng AVAssetWritter.Làm thế nào tôi có đường dẫn tệp tạm thời nơi tất cả khung mới đang lưu từng cái một. Có cách nào để phát video tại các khung thời gian liên tục được thêm vào tệp tạm thời không ??Phát video bằng AVPlayer

đây là mã để chơi video từ con đường tạm (nơi khung được liên tục bổ sung thêm)

- (void)loadAssetFromFile { 

    AVURLAsset *asset = [AVURLAsset URLAssetWithURL:[NSURL fileURLWithPath:[(mMediaReader.mCameraRecorder) tempVideoFilePath ]] options:nil]; 
    NSString *tracksKey = @"tracks"; 

    [asset loadValuesAsynchronouslyForKeys:[NSArray arrayWithObject:tracksKey] completionHandler: 
    ^{ 

     // Completion handler block. 
     dispatch_async(dispatch_get_main_queue(), 
         ^{ 
          NSError *error = nil; 
          AVKeyValueStatus status = [asset statusOfValueForKey:tracksKey error:&error]; 

          if (status == AVKeyValueStatusLoaded) { 
           self.mPlayerItem = [AVPlayerItem playerItemWithAsset:asset]; 
           [mPlayerItem addObserver:self forKeyPath:@"status" 
               options:0 context:&ItemStatusContext]; 
           [[NSNotificationCenter defaultCenter] addObserver:self 
                     selector:@selector(playerItemDidReachEnd:) 
                      name:AVPlayerItemDidPlayToEndTimeNotification 
                      object:mPlayerItem]; 
           self.mPlayer = [AVPlayer playerWithPlayerItem:mPlayerItem]; 
           [mPlayerView setPlayer:mPlayer]; 
           [self play:nil]; 
          } 
          else { 
           // You should deal with the error appropriately. 
           NSLog(@"The asset's tracks were not loaded:\n%@", [error localizedDescription]); 
          } 
         }); 
    }]; 
} 

- (IBAction)play:sender { 
    [mPlayer play]; 
} 

Và mã bên trong khối không bao giờ chạy.

+0

tìm kiếm đề xuất của bạn ?? – iOSPawan

+0

vẫn đang tìm giải pháp cho số – iOSPawan

+0

Dường như 'loadValuesAsynchronouslyForKeys: completionHandler:' là một phương thức trên 'AVMetaDataItem', không phải' AVURLAsset' hoặc 'AVAsset'. Bạn có thể xác nhận rằng đối tượng 'NSURL' không phải là' nil' không? – sho

Trả lời

4

Chia video trong nhiều video phụ đã hoạt động cho tôi.

Điều tôi đã làm thay vì lưu toàn bộ video trong một đường dẫn tạm thời. Tôi đã chia video đó thành nhiều video phụ và sau đó thay thế AVPlayerItem thuộc tính của AVPlayer tương ứng.

Hiện tại, chức năng hoạt động giống như phát trực tuyến video. :)

+0

nghe như một giải pháp rất tốt – Magnus

1

Bạn cũng có thể chuyển đổi CMSampleBuffer mà AVAssetReader trả về thành CGImage và sau đó là UIImage và hiển thị trong UIImageView, để hiển thị khung khi chúng được kéo ra khỏi tệp video gốc.

Có mã ví dụ bên trong số AVFoundation Programming Guide cho biết cách thực hiện chuyển đổi này.

Các vấn đề liên quan