我似乎无法找到有关此主题的任何有用信息。
使用AVAudioPlayer时,应用随机开始通过扬声器(听筒)而不是扬声器播放音频。发生这种情况时,即使是使用耳机直接通过UIWebView播放从YouTube直播的YouTube视频。
有谁知道如何切换输出源?
答案 0 :(得分:2)
即使插入了耳机,也无法通过iPhone扬声器播放音频文件?
但我们可以得到关于何时插入或输出输出设备的通知,因此我们可以做我们的事情。 以下是供您参考的代码。
void audioRouteChangeListenerCallback (void *inUserData, AudioSessionPropertyID inPropertyID, UInt32 inPropertyValueSize, const void *inPropertyValue) {
if (inPropertyID != kAudioSessionProperty_AudioRouteChange) return;
MPMusicPlayerController *controller = (__bridge MPMusicPlayerController *)inUserData;
CFDictionaryRef routeChangeDictionary = inPropertyValue;
CFNumberRef routeChangeReasonRef = CFDictionaryGetValue(routeChangeDictionary, CFSTR (kAudioSession_AudioRouteChangeKey_Reason));
SInt32 routeChangeReason;
CFNumberGetValue (routeChangeReasonRef, kCFNumberSInt32Type, &routeChangeReason);
CFStringRef oldRouteRef = CFDictionaryGetValue(routeChangeDictionary, CFSTR (kAudioSession_AudioRouteChangeKey_OldRoute));
NSString *oldRouteString = (__bridge NSString *)oldRouteRef;
if (routeChangeReason == kAudioSessionRouteChangeReason_OldDeviceUnavailable) {
if ((controller.playbackState == MPMusicPlaybackStatePlaying) &&
(([oldRouteString isEqualToString:@"Headphone"]) ||
([oldRouteString isEqualToString:@"LineOut"])))
{
// Janking out the headphone will stop the audio.
[controller pause];
}
}
答案 1 :(得分:0)
如果您还使用麦克风进行录制,请按照以下方法将输出设备切换回扬声器/耳机而不是听筒(Swift 4):
do {
try AVAudioSession.sharedInstance().setCategory(AVAudioSessionCategoryMulti)
} catch let error {
print("\(error.localizedDescription)")
}
我发现AVAudioSessionCategoryMulti
比AVAudioSessionCategoryPlayAndRecord
的效果更好,因为后者默认输出到听筒而不是扬声器,但是当您启用麦克风时,它也是默认类别。 >