2011-01-21 72 views
0

我的應用程序已經結束了95%,並且我有一個非常討厭的錯誤,我真的需要一些幫助。 我有表流視圖列表>我選擇電影,它加載>我已覆蓋與停止,暫停,音量和滾動視圖與流切換流前一次播放時。 當我開始應用程序時,一切正常,所有流都可以正常工作。 但是,當我點擊停止按鈕,當前流停止和mpmovieplayer關閉,我再次從表開始。停止按鈕的代碼是這樣(我的子類mpmovieplayer):MpMoviePlayer在停止事件後加載音頻

- (void) StopAndDismiss: (NSNotification *) notification 
{ 
    [mp stop]; // is MPMoviePlayerController object 
    [self dismissModalViewControllerAnimated:YES]; 
} 

然後,我選擇從表中的一些數據流,並且過程是相同的節目的MPMoviePlayerController,負載電影代碼:

-(void) ChannelFromMainChannelPicker: (NSNotification *)note 
{ 
    NSString *stringFromNote = (NSString *)[note object]; 

    NSString *title = [[NSString alloc] initWithFormat:@"%@", stringFromNote]; 

    cPlayer = [[CustomMoviePlayerController alloc] initWithUrlPath:title]; 
    [self presentModalViewController:cPlayer animated:NO]; 

    [cPlayer readyPlayer:stringFromNote]; 

    [title release]; 
} 
- (void)readyPlayer:(NSString *)p_url 
{ 
    if(mp != nil) 
    {   
     NSString *title = [[NSString alloc] initWithFormat:@"%@", p_url]; 
     NSURL *n = [[NSURL alloc]initWithString:title]; 

     [mp setContentURL:n]; 

     mp.initialPlaybackTime = -1.0; 

     [title release]; 
     [n release]; 

     [mp play];  
    } 
    else 
    { 
     mp = [[MPMoviePlayerController alloc] initWithContentURL:movieUrlPath]; 

     //[mp setAllowsWirelessPlayback:YES]; 

     if ([mp respondsToSelector:@selector(loadState)]) 
     { 
      // Set movie player layout 
      [mp setControlStyle:MPMovieControlStyleNone]; 
      [mp setFullscreen:YES]; 

      // May help to reduce latency 
      [mp prepareToPlay]; 

      // Register that the load state changed (movie is ready) 
      [[NSNotificationCenter defaultCenter] addObserver:self 
                selector:@selector(moviePlayerLoadStateChanged:) 
                 name:MPMoviePlayerLoadStateDidChangeNotification 
                 object:nil]; 

      [[NSNotificationCenter defaultCenter] addObserver:self 
                selector:@selector(SwitchToAnotherStreamUrl:) 
                 name:@"notiSwitchToAnotherStreamUrl" 
                 object:nil]; 

      [[NSNotificationCenter defaultCenter] addObserver:self 
                selector:@selector(moviePlayerPlaybackStateDidChange:) 
                 name:MPMoviePlayerPlaybackStateDidChangeNotification 
                 object:nil]; 

      [[NSNotificationCenter defaultCenter] addObserver:self 
                selector:@selector(PauseStream:) 
                 name:@"notiPauseStream" 
                 object:nil]; 

      [[NSNotificationCenter defaultCenter] addObserver:self 
                selector:@selector(StopAndDismiss:) 
                 name:@"notiStopAndDismiss" 
                 object:nil];  
     }  
    } 

    // Register to receive a notification when the movie has finished playing. 
    [[NSNotificationCenter defaultCenter] addObserver:self 
              selector:@selector(moviePlayBackDidFinish:) 
               name:MPMoviePlayerPlaybackDidFinishNotification 
               object:nil]; 
} 

但是,當我現在從覆蓋流列表改變爲其他流,只有音頻有效,但沒有視頻(只是黑屏)。但我再次加載相同的流,它加載正常。但每當我按STOP按鈕後開始流式播放時,每當我第一次加載音頻時,就需要再次調用它才能工作。 在我的自定義視頻播放器我重載這個方法,也許這裏是一些問題:

- (void) moviePlayerPlaybackStateDidChange: (NSNotification *) notification 
{ 
    if(mp.playbackState == MPMoviePlaybackStateStopped) 
    { 
     NSLog(@"Loading so display activity indicator"); 
     [[NSNotificationCenter defaultCenter] postNotificationName:@"notiShowLoader" object:nil]; 

    } 
    else if (mp.playbackState == MPMoviePlaybackStatePlaying) 
    { 
     NSLog(@"Done with loading, hide activity indicator"); 
     [[NSNotificationCenter defaultCenter] postNotificationName:@"notiHideLoader" object:nil];  

     [[NSNotificationCenter defaultCenter] postNotificationName:@"notiBringCPToFront" object:nil]; 
    } 
    else if (mp.playbackState == MPMoviePlaybackStatePaused) 
    { 
     NSLog(@"Movie is paused"); 
    } 
} 

PS 有沒有辦法,我可以檢查被加載音頻和視頻不,不管怎樣迫使它重新載入播放器什麼辦法?

我添加NSlog檢查播放狀態。而也有一些是有線的,我叫STOP下次我儘量發揮它的流調用多次:

0 MPMoviePlaybackStateStopped, 
1 MPMoviePlaybackStatePlaying, 
2 MPMoviePlaybackStatePaused, 
3 MPMoviePlaybackStateInterrupted, 
4 MPMoviePlaybackStateSeekingForward, 
5 MPMoviePlaybackStateSeekingBackward 


first time from table view 
2011-01-21 13:46:04.865[3561:207] CURRENT PLAYBACK STATE ID = 1 

second time from overlay 
2011-01-21 13:46:30.338[3561:207] CURRENT PLAYBACK STATE ID = 0 
2011-01-21 13:46:30.461[3561:207] CURRENT PLAYBACK STATE ID = 1 

STOP button press 
2011-01-21 13:47:14.797[3561:207] CURRENT PLAYBACK STATE ID = 0 

from table view 
2011-01-21 13:47:31.123[3561:207] CURRENT PLAYBACK STATE ID = 0 
2011-01-21 13:47:31.123[3561:207] CURRENT PLAYBACK STATE ID = 1 

from overlay again (ONLY AUDIO) 
2011-01-21 13:47:50.001[3561:207] CURRENT PLAYBACK STATE ID = 0 
2011-01-21 13:47:50.001[3561:207] CURRENT PLAYBACK STATE ID = 0 
2011-01-21 13:47:50.119[3561:207] CURRENT PLAYBACK STATE ID = 0 
2011-01-21 13:47:50.119[3561:207] CURRENT PLAYBACK STATE ID = 1 
2011-01-21 13:47:50.148[3561:207] CURRENT PLAYBACK STATE ID = 0 
2011-01-21 13:47:50.148[3561:207] CURRENT PLAYBACK STATE ID = 0 
2011-01-21 13:47:50.149[3561:207] CURRENT PLAYBACK STATE ID = 0 
2011-01-21 13:47:50.149[3561:207] CURRENT PLAYBACK STATE ID = 0 
2011-01-21 13:47:50.150[3561:207] CURRENT PLAYBACK STATE ID = 1 
2011-01-21 13:47:50.150[3561:207] CURRENT PLAYBACK STATE ID = 0 

third time (now works and audio and video) 
2011-01-21 13:48:21.752[3561:207] CURRENT PLAYBACK STATE ID = 0 
2011-01-21 13:48:21.752[3561:207] CURRENT PLAYBACK STATE ID = 0 
2011-01-21 13:48:21.852[3561:207] CURRENT PLAYBACK STATE ID = 1 
2011-01-21 13:48:21.852[3561:207] CURRENT PLAYBACK STATE ID = 0 
2011-01-21 13:48:21.855[3561:207] CURRENT PLAYBACK STATE ID = 0 
2011-01-21 13:48:21.855[3561:207] CURRENT PLAYBACK STATE ID = 0 
2011-01-21 13:48:21.856[3561:207] CURRENT PLAYBACK STATE ID = 0 
2011-01-21 13:48:21.856[3561:207] CURRENT PLAYBACK STATE ID = 0 
2011-01-21 13:48:21.858[3561:207] CURRENT PLAYBACK STATE ID = 0 
2011-01-21 13:48:21.858[3561:207] CURRENT PLAYBACK STATE ID = 1 

STOP second time 
2011-01-21 13:49:39.046[3561:207] CURRENT PLAYBACK STATE ID = 0 
2011-01-21 13:49:39.046[3561:207] CURRENT PLAYBACK STATE ID = 0 

again load from table 
2011-01-21 13:50:00.155[3561:207] CURRENT PLAYBACK STATE ID = 0 
2011-01-21 13:50:00.155[3561:207] CURRENT PLAYBACK STATE ID = 0 
2011-01-21 13:50:00.155[3561:207] CURRENT PLAYBACK STATE ID = 1 

from overlay 
2011-01-21 13:50:27.211[3561:207] CURRENT PLAYBACK STATE ID = 0 
2011-01-21 13:50:27.211[3561:207] CURRENT PLAYBACK STATE ID = 0 
2011-01-21 13:50:27.211[3561:207] CURRENT PLAYBACK STATE ID = 0 
2011-01-21 13:50:27.325[3561:207] CURRENT PLAYBACK STATE ID = 1 
2011-01-21 13:50:27.326[3561:207] CURRENT PLAYBACK STATE ID = 0 
2011-01-21 13:50:27.326[3561:207] CURRENT PLAYBACK STATE ID = 0 
2011-01-21 13:50:27.333[3561:207] CURRENT PLAYBACK STATE ID = 0 
2011-01-21 13:50:27.333[3561:207] CURRENT PLAYBACK STATE ID = 0 
2011-01-21 13:50:27.333[3561:207] CURRENT PLAYBACK STATE ID = 0 
2011-01-21 13:50:27.334[3561:207] CURRENT PLAYBACK STATE ID = 0 
2011-01-21 13:50:27.335[3561:207] CURRENT PLAYBACK STATE ID = 0 
2011-01-21 13:50:27.335[3561:207] CURRENT PLAYBACK STATE ID = 0 
2011-01-21 13:50:27.336[3561:207] CURRENT PLAYBACK STATE ID = 0 
2011-01-21 13:50:27.336[3561:207] CURRENT PLAYBACK STATE ID = 1 
2011-01-21 13:50:27.337[3561:207] CURRENT PLAYBACK STATE ID = 0 
2011-01-21 13:50:27.339[3561:207] CURRENT PLAYBACK STATE ID = 0 
2011-01-21 13:50:27.339[3561:207] CURRENT PLAYBACK STATE ID = 0 
2011-01-21 13:50:27.339[3561:207] CURRENT PLAYBACK STATE ID = 0 
2011-01-21 13:50:27.340[3561:207] CURRENT PLAYBACK STATE ID = 0 
2011-01-21 13:50:27.340[3561:207] CURRENT PLAYBACK STATE ID = 0 
2011-01-21 13:50:27.340[3561:207] CURRENT PLAYBACK STATE ID = 0 
2011-01-21 13:50:27.341[3561:207] CURRENT PLAYBACK STATE ID = 0 
2011-01-21 13:50:27.341[3561:207] CURRENT PLAYBACK STATE ID = 0 
2011-01-21 13:50:27.342[3561:207] CURRENT PLAYBACK STATE ID = 1 

again from overlay (only audio) 

2011-01-21 13:56:56.198[3561:207] CURRENT PLAYBACK STATE ID = 0 
2011-01-21 13:56:56.198[3561:207] CURRENT PLAYBACK STATE ID = 0 
2011-01-21 13:56:56.198[3561:207] CURRENT PLAYBACK STATE ID = 0 
2011-01-21 13:56:56.335[3561:207] CURRENT PLAYBACK STATE ID = 0 
2011-01-21 13:56:56.335[3561:207] CURRENT PLAYBACK STATE ID = 0 
2011-01-21 13:56:56.335[3561:207] CURRENT PLAYBACK STATE ID = 1 
2011-01-21 13:56:56.338[3561:207] CURRENT PLAYBACK STATE ID = 0 
2011-01-21 13:56:56.338[3561:207] CURRENT PLAYBACK STATE ID = 0 
2011-01-21 13:56:56.338[3561:207] CURRENT PLAYBACK STATE ID = 0 
2011-01-21 13:56:56.339[3561:207] CURRENT PLAYBACK STATE ID = 0 
2011-01-21 13:56:56.339[3561:207] CURRENT PLAYBACK STATE ID = 0 
2011-01-21 13:56:56.340[3561:207] CURRENT PLAYBACK STATE ID = 0 
2011-01-21 13:56:56.341[3561:207] CURRENT PLAYBACK STATE ID = 1 
2011-01-21 13:56:56.341[3561:207] CURRENT PLAYBACK STATE ID = 0 
2011-01-21 13:56:56.341[3561:207] CURRENT PLAYBACK STATE ID = 0 
2011-01-21 13:56:56.359[3561:207] CURRENT PLAYBACK STATE ID = 0 
2011-01-21 13:56:56.359[3561:207] CURRENT PLAYBACK STATE ID = 0 
2011-01-21 13:56:56.359[3561:207] CURRENT PLAYBACK STATE ID = 0 
2011-01-21 13:56:56.360[3561:207] CURRENT PLAYBACK STATE ID = 0 
2011-01-21 13:56:56.360[3561:207] CURRENT PLAYBACK STATE ID = 0 
2011-01-21 13:56:56.360[3561:207] CURRENT PLAYBACK STATE ID = 0 
2011-01-21 13:56:56.361[3561:207] CURRENT PLAYBACK STATE ID = 0 
2011-01-21 13:56:56.361[3561:207] CURRENT PLAYBACK STATE ID = 1 
2011-01-21 13:56:56.361[3561:207] CURRENT PLAYBACK STATE ID = 0 

same icon again (works) 
2011-01-21 13:57:31.115[3561:207] CURRENT PLAYBACK STATE ID = 1 
2011-01-21 13:57:31.115[3561:207] CURRENT PLAYBACK STATE ID = 0 
2011-01-21 13:57:31.115[3561:207] CURRENT PLAYBACK STATE ID = 0 
2011-01-21 13:57:31.118[3561:207] CURRENT PLAYBACK STATE ID = 0 
2011-01-21 13:57:31.118[3561:207] CURRENT PLAYBACK STATE ID = 0 
2011-01-21 13:57:31.118[3561:207] CURRENT PLAYBACK STATE ID = 0 
2011-01-21 13:57:31.119[3561:207] CURRENT PLAYBACK STATE ID = 0 
2011-01-21 13:57:31.119[3561:207] CURRENT PLAYBACK STATE ID = 0 
2011-01-21 13:57:31.119[3561:207] CURRENT PLAYBACK STATE ID = 0 
2011-01-21 13:57:31.120[3561:207] CURRENT PLAYBACK STATE ID = 0 
2011-01-21 13:57:31.120[3561:207] CURRENT PLAYBACK STATE ID = 1 
2011-01-21 13:57:31.121[3561:207] CURRENT PLAYBACK STATE ID = 0 
2011-01-21 13:57:31.131[3561:207] CURRENT PLAYBACK STATE ID = 0 
2011-01-21 13:57:31.131[3561:207] CURRENT PLAYBACK STATE ID = 0 
2011-01-21 13:57:31.131[3561:207] CURRENT PLAYBACK STATE ID = 0 
2011-01-21 13:57:31.132[3561:207] CURRENT PLAYBACK STATE ID = 0 
2011-01-21 13:57:31.132[3561:207] CURRENT PLAYBACK STATE ID = 0 
2011-01-21 13:57:31.132[3561:207] CURRENT PLAYBACK STATE ID = 0 
2011-01-21 13:57:31.133[3561:207] CURRENT PLAYBACK STATE ID = 0 
2011-01-21 13:57:31.134[3561:207] CURRENT PLAYBACK STATE ID = 0 
2011-01-21 13:57:31.134[3561:207] CURRENT PLAYBACK STATE ID = 1 

STOP again 
2011-01-21 13:58:17.318[3561:207] CURRENT PLAYBACK STATE ID = 0 
2011-01-21 13:58:17.318[3561:207] CURRENT PLAYBACK STATE ID = 0 
2011-01-21 13:58:17.318[3561:207] CURRENT PLAYBACK STATE ID = 0 

play from table 
2011-01-21 13:58:36.085[3561:207] CURRENT PLAYBACK STATE ID = 0 
2011-01-21 13:58:36.085[3561:207] CURRENT PLAYBACK STATE ID = 0 
2011-01-21 13:58:36.085[3561:207] CURRENT PLAYBACK STATE ID = 0 
2011-01-21 13:58:36.085[3561:207] CURRENT PLAYBACK STATE ID = 1 

STOP 
2011-01-21 13:58:53.599[3561:207] CURRENT PLAYBACK STATE ID = 0 
2011-01-21 13:58:53.599[3561:207] CURRENT PLAYBACK STATE ID = 0 
2011-01-21 13:58:53.599[3561:207] CURRENT PLAYBACK STATE ID = 0 
2011-01-21 13:58:53.600[3561:207] CURRENT PLAYBACK STATE ID = 0 

PLAY from table again 
2011-01-21 13:58:57.236[3561:207] CURRENT PLAYBACK STATE ID = 0 
2011-01-21 13:58:57.236[3561:207] CURRENT PLAYBACK STATE ID = 0 
2011-01-21 13:58:57.236[3561:207] CURRENT PLAYBACK STATE ID = 0 
2011-01-21 13:58:57.236[3561:207] CURRENT PLAYBACK STATE ID = 0 
2011-01-21 13:58:57.236[3561:207] CURRENT PLAYBACK STATE ID = 1 

回答

1

好初學者的錯誤,我不知道,我需要當我關閉我的自定義刪除所有觀察者電影播放器​​。這個解決的問題:

[mp stop]; 
    [mp.view removeFromSuperview];  
    [self dismissModalViewControllerAnimated:YES]; 

    [[NSNotificationCenter defaultCenter] removeObserver:self];