我的應用程序已經結束了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