2011-10-19 36 views
5

Có ai có thể đề xuất phương pháp mà bạn có thể đạt được vòng lặp hoàn toàn trơn tru và liền mạch của video clip trong iOS không? Tôi đã thử hai phương pháp, cả hai đều tạo ra một tạm dừng nhỏ khi video vòngVòng lặp video mượt mà trong iOS

1) AVPlayerLayer với thông báo playerItemDidReachEnd thiết lập ra seekToTime: kCMTimeZero

Tôi thích sử dụng một AVPlayerLayer (vì lý do khác), nhưng phương pháp này tạo ra một khoảng dừng đáng chú ý khoảng một giây giữa các vòng lặp.

2) MPMoviePlayerController với setRepeatMode: MPMovieRepeatModeOne

Điều này dẫn đến một tạm dừng nhỏ hơn, nhưng nó vẫn không phải là hoàn hảo.

Tôi không chắc chắn nên đi đâu từ đây. Bất cứ ai có thể gợi ý một linh hồn?

+0

Ồ, không có phản hồi. Tôi đoán đây không phải là một điều dễ dàng để làm trong iOS. Tôi đang làm việc trên một workaround có liên quan đến hai AVPlayers xen kẽ, nhưng nó chỉ là, một workaround. Vẫn hy vọng có một cách để lặp một clip đơn giản. – one09jason

+0

Có may mắn không? Tôi đang chạy vào vấn đề này ngay bây giờ là tốt. Tôi nhận được sự bỏ qua giữa các vòng lặp cũng như video bị đóng băng vĩnh viễn sau 5-6 vòng lặp. – brandon

+0

Tôi cũng đang gặp sự cố trong IOS5 với setRepeatMode: MPMovieRepeatModeOne sau một số vòng –

Trả lời

3

Tôi có thể đồng ý với các phát hiện của SamBrodkin.

[[NSNotificationCenter defaultCenter] 
    addObserver: self 
    selector: @selector(myMovieFinishedCallback:) 
    name: MPMoviePlayerPlaybackStateDidChangeNotification 
    object: m_player]; 

-(void) myMovieFinishedCallback: (NSNotification*) aNotification 
{ 
    NSLog(@"myMovieFinishedCallback: %@", aNotification); 
    MPMoviePlayerController *movieController = aNotification.object; 
    NSLog(@"player.playbackState = %d", movieController.playbackState); 
} 

khắc phục sự cố không lặp trên iOS 5 cho tôi quá.

2

Tôi chỉ có làm việc này trên tôi iPad 3 chạy iOS 5.1.1, cơ sở SDK iOS 5.1

Khi thiết lập các trình xem phim, thiết lập các chế độ lặp lại để MPMovieRepeatModeNone sau đó thêm các thông báo

[[NSNotificationCenter defaultCenter] addObserver:self 
              selector:@selector(moviePlayerDidFinish:) 
               name:MPMoviePlayerPlaybackDidFinishNotification 
               object:self.moviePlayer]; 

Sau đó thiết lập chọn của bạn để lọc khi bộ phim kết thúc chơi

- (void)moviePlayerDidFinish:(NSNotification *)note { 
    if (note.object == self.moviePlayer) { 
     NSInteger reason = [[note.userInfo objectForKey:MPMoviePlayerPlaybackDidFinishReasonUserInfoKey] integerValue]; 
     if (reason == MPMovieFinishReasonPlaybackEnded) { 
      [self.moviePlayer play]; 
     } 
    } 
} 

Apple đã thực hiện một số thay đổi lớn để cách MPMoviePlaye rController xử lý tải các tệp phim khi chúng thay đổi từ iOS 4 sang iOS 5, vì vậy tôi không biết liệu phương pháp này có hoạt động khi chúng phát hành iOS 6

1

Để xem ví dụ cho thấy lặp liên tục của video nền (từ hoạt ảnh GIF) và chuyển đổi giữa một cặp hoạt ảnh nhân vật tiền cảnh (có kênh alpha), hãy xem seamless-video-looping-on-ios. Tôi đã cố gắng sử dụng AVPlayer trong quá khứ và phải từ bỏ các giải pháp liên quan đến AVPlayer vì chúng không hoạt động đủ tốt. Xem câu hỏi SO này cũng iphone-smooth-transition-from-one-video-to-another.

0

Tôi đã điều tra cùng một vấn đề như được báo cáo bởi áp phích gốc (tạm dừng nhỏ trong vòng lặp đã phá vỡ sự liền mạch). Nhờ may mắn tôi đã có một mẫu video khác không có hành vi này và chỉ tìm thấy giải thích/khác nhau sau:

Bản âm thanh.

Tôi nghi ngờ có quá trình khởi tạo âm thanh rất chậm (định tuyến?).

Xóa bản âm thanh là giải pháp dễ nhất cho tôi (không cần âm thanh) nhưng tôi sẽ phải đào sâu hơn (tùy chọn trộn âm thanh và kiểm tra giải pháp đã được đăng trong chủ đề này).

Eric

-1

Để tránh khoảng cách khi video được tua lại, sử dụng nhiều bản sao của cùng một nội dung trong bố cục hoạt động tốt cho tôi.

AVURLAsset *tAsset = [AVURLAsset assetWithURL:tURL]; 
CMTimeRange tEditRange = CMTimeRangeMake(CMTimeMake(0, 1), CMTimeMake(tAsset.duration.value, tAsset.duration.timescale)); 
AVMutableComposition *tComposition = [[[AVMutableComposition alloc] init] autorelease]; 
for (int i = 0; i < 100; i++) { // Insert some copies. 
    [tComposition insertTimeRange:tEditRange ofAsset:tAsset atTime:tComposition.duration error:nil]; 
} 
AVPlayerItem *tAVPlayerItem = [[AVPlayerItem alloc] initWithAsset:tComposition]; 
AVPlayer *tAVPlayer = [[AVPlayer alloc] initWithPlayerItem:tAVPlayerItem]; 
+0

Liên kết bị hỏng, cũng đề xuất giải pháp không hoạt động cho looping thực sự liền mạch. – MoDJ

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