过去几个小时我一直在搞乱这个问题,但我仍然无法找到解决方案。我正在创建一个使用twilio 2连接到用户的应用程序。我可以通过以下方式强制输出音频到扬声器:
UInt32 audioRouteOverride = kAudioSessionOverrideAudioRoute_Speaker;
AudioSessionSetProperty (kAudioSessionProperty_OverrideAudioRoute,sizeof (audioRouteOverride),&audioRouteOverride);
问题是当我使用MPMoviePlayerController从网络播放流时。它接管音频会话并再次强制通过耳机。我仍然可以与用户交谈,但我只能使用耳机(手机)扬声器来听取它们。我试图以很多不同的方式回到扬声器,似乎没有任何工作,显然防止MPMoviePlayerController使用AudioSession的能力已被弃用。关于如何解决这个问题的任何想法?我的代码在这里:
UInt32 sessionCategory = kAudioSessionCategory_PlayAndRecord;
AudioSessionSetProperty(kAudioSessionProperty_AudioCategory, sizeof(sessionCategory), &sessionCategory);
UInt32 audioRouteOverride = kAudioSessionOverrideAudioRoute_Speaker;
AudioSessionSetProperty (kAudioSessionProperty_OverrideAudioRoute,sizeof (audioRouteOverride),&audioRouteOverride);
_streamPlayer = [[MPMoviePlayerController alloc] initWithContentURL:[NSURL URLWithString:fullURL]];
[[_streamPlayer view] setFrame: [self.view bounds]];
[self.view addSubview: [_streamPlayer view]];
[_streamPlayer play];
提前感谢您的帮助。
答案 0 :(得分:0)
答案是设置默认路由而不是覆盖它。您可以使用以下代码设置默认路由:
UInt32 doChangeDefaultRoute = 1;
AudioSessionSetProperty(kAudioSessionProperty_OverrideCategoryDefaultToSpeaker, sizeof(doChangeDefaultRoute), &doChangeDefaultRoute);