MPMoviePlayer声音在模拟器和ipad设备中工作,但不能在iPhone设备中工作

时间:2012-02-23 06:28:30

标签: iphone objective-c ios5 mpmovieplayercontroller avaudioplayer

我遇到了MPMoviePlayerController的问题,即我正在播放(m3u8格式)MPMoviePlayer中的直播网址,如下所示:

player = [[MPMoviePlayerController alloc] initWithContentURL:audioUrl];
        [[NSNotificationCenter defaultCenter] addObserver:self 
                                                 selector:@selector(loadStateDidChange:) 
                                                     name:MPMoviePlayerLoadStateDidChangeNotification 
                                                   object:player];
        if ([player respondsToSelector:@selector(loadState)]) 
        {
            // Set movie player layout

            [player setMovieSourceType:MPMovieSourceTypeStreaming];
            [player setControlStyle:MPMovieControlModeVolumeOnly];
            [player setFullscreen:YES];
            [player prepareToPlay];
            [player play];

        }
    }

它适用于模拟器和模拟器。带有ios 5版本的iPad设备,但它没有在我拥有的任何iPhone设备中提供音频。

请帮帮我... 提前谢谢。

4 个答案:

答案 0 :(得分:3)

您正在为MPMovieControlMode属性分配一个已弃用的MPMovieControlModeVolumeOnlycontrolStyle),该属性需要MPMovieControlStyle

此外,您的代码缺少将MPMoviePlayerController.view分配给任何超级视图的部分,并且缺少其大小调整。

最后但我猜对你来说最重要的是,我猜你正在尝试的iPhone已经将音量设定为沉默。或者,音频路由可能未设置为扬声器输出。对于后者,请确保您没有在应用程序中的任何其他位置错误地设置音频会话。如有疑问,请尝试摆弄useApplicationAudioSession属性。尝试将其设置为NO,看看是否会改变您的结果。

如果以上都失败了,那么另外一项检查就是在移动版Safari中调用stream-url。如果它具有相同的结果,那么您的代码是正确的,而流不是。那么它将是一个错误编码的音频流。

答案 1 :(得分:3)

simham ...请查看以下内容,以便为我们提供帮助becoZ

  1. 在移动版Safari中调用stream-url。如果它具有相同的结果,那么您的代码是正确的,而流不是。那么它将是一个错误编码的音频流。

  2. 它取决于带宽也低于ref url关于带宽检查一次.... u r ref流URL准备,根据BandWith

  3. 参考网址:

答案 2 :(得分:2)

检查您的iPhone是否处于扬声器模式 -

如果不是使用此设置 -

UInt32 audioRouteOverride = kAudioSessionOverrideAudioRoute_Speaker;
AudioSessionSetProperty (kAudioSessionProperty_OverrideAudioRoute,sizeof (audioRouteOverride),&audioRouteOverride);

答案 3 :(得分:0)

检查iPhone是否处于静音模式。要在静音模式下播放音频,请在 AppDelegate&#39> 应用程序中添加以下代码:didFinishLaunchingWithOptions:

NSError *setCategoryErr = nil;
NSError *activationErr  = nil;
[[AVAudioSession sharedInstance] setCategory: AVAudioSessionCategoryPlayback error:&setCategoryErr];
[[AVAudioSession sharedInstance] setActive:YES error:&activationErr];