Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone MpMoviePlayer在停止事件后加载音频_Iphone_Objective C_Mpmovieplayercontroller - Fatal编程技术网

Iphone MpMoviePlayer在停止事件后加载音频

Iphone MpMoviePlayer在停止事件后加载音频,iphone,objective-c,mpmovieplayercontroller,Iphone,Objective C,Mpmovieplayercontroller,我的应用程序已经超过95%,我有一个非常严重的错误,我真的需要一些帮助。 我有一个带有流url列表的表视图>我选择电影并加载>我有一个带有停止、暂停、音量和滚动视图的覆盖,可以在上一个流播放时切换流。 当我启动应用程序时,一切正常,所有流都正常。 但当我点击停止按钮时,当前流停止,mpmovieplayer关闭,我从一开始就再次进入表视图。停止按钮代码如下(I子类mpmovieplayer): 然后我从表中选择一些流,过程与show mpmovieplayercontroller相同,加载电影的

我的应用程序已经超过95%,我有一个非常严重的错误,我真的需要一些帮助。 我有一个带有流url列表的表视图>我选择电影并加载>我有一个带有停止、暂停、音量和滚动视图的覆盖,可以在上一个流播放时切换流。 当我启动应用程序时,一切正常,所有流都正常。 但当我点击停止按钮时,当前流停止,mpmovieplayer关闭,我从一开始就再次进入表视图。停止按钮代码如下(I子类mpmovieplayer):

然后我从表中选择一些流,过程与show 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]; 
}
但当我现在从覆盖流列表切换到其他流时,只有音频工作,而没有视频(只有黑屏)。但我再次加载相同的流,它正常加载。但当我第一次按下停止按钮后启动流时,加载的只是音频,我需要第二次调用它才能工作。 在我的自定义电影播放器中,我重载了此方法,可能存在一些问题:

- (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 next streams时,我尝试播放它多次调用:

 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

好的,初学者错误,我不知道当我关闭我的自定义电影播放器时,我需要删除所有的观察者。这就解决了问题:

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

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

    [[NSNotificationCenter defaultCenter] removeObserver:self];