2011-10-19 44 views
5

任何人都可以提出一種方法,通過它可以在iOS中實現完全平滑無縫的視頻剪輯循環?我已經嘗試了兩種方法,兩種方法都產生一個小小的停頓當視頻循環iOS中流暢的視頻循環

1)AVPlayerLayer與playerItemDidReachEnd通知掀起seekToTime:kCMTimeZero

我更喜歡使用AVPlayerLayer(其他原因),但這種方法會在循環之間產生明顯的停頓。

2)的MPMoviePlayerController與setRepeatMode:MPMovieRepeatModeOne

這導致較小的停頓,但它仍然是不完美的。

我不確定該從哪裏出發。任何人都可以提出靈魂嗎?

+0

哇,沒有反應。我想這在iOS中絕對不是一件容易的事情。我正在研究一個涉及兩個交替AVPlayers的解決方法,但這只是一個解決方法。仍然希望有一種方法可以順利地循環一個剪輯。 – one09jason

+0

運氣好嗎?我現在也正在處理這個問題。我得到循環之間的跳轉以及5-6循環後視頻永久凍結。 – brandon

+0

我也遇到過使用setRepeatMode:MPMovieRepeatModeOne在多個循環後出現凍結的問題 –

回答

3

我可以同意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); 
} 

固定在iOS 5的非循環的問題對我來說太。

2

我剛剛得到這個工作對我的iPad 3運行iOS 5.1.1,基地SDK的iOS 5.1

當設置電影播放器​​,設定重複模式MPMovieRepeatModeNone 然後添加通知

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

然後設置你選擇當電影播放完畢

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

蘋果做了一些大的變化如何MPMoviePlaye rController處理加載電影文件時,他們從iOS 4更改爲iOS 5,所以我不知道這種方法將工作時,他們釋放iOS 6

0

我調查了原始海報報道的相同問題(打破無縫性的循環中的小暫停)。通過運氣,我有另一個視頻樣本,沒有這種行爲,並找到了解釋/不同後來才發現:

聲軌。

我懷疑是一個非常慢的聲音初始化(路由?)。

刪除聲軌對我來說是最簡單的方法(不需要的聲音),但我將不得不進一步挖掘(音頻混音選項和測試已張貼在這個線程解決方案)。

埃裏克

-1

爲了避免缺口視頻時,倒帶,使用的組成的同一資產的多個副本行之有效我。

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

鏈接斷開,也建議解決方案無法實現真正​​的無縫循環。 – MoDJ