我想添加一個按鈕將音頻輸出發送到Applle TV。我使用下面的代碼,但它不起作用。你能幫助我做錯什麼嗎?如何將音頻輸出發送到Apple TV?
首先我改變AVAudioSession類別是AVAudioSessionCategorySoloAmbient(用於針對iOS 7和8搜索所連接的藍牙設備,我必須這樣做。)
AVAudioSession *audioSession = [AVAudioSession sharedInstance];
[audioSession setCategory:AVAudioSessionCategorySoloAmbient error:&err];
然後我用這個方法用於切換音頻蘋果電視
- (BOOL)switchAirPlay:(BOOL)onOrOff
{
NSError* audioError = nil;
BOOL changeResult = NO;
if (onOrOff) {
self.bipAudioSessionManagerDeviceCurrent = Device_AppleTV;
AVAudioSessionPortDescription* airplayPort = [self airplayAudioDevice];
changeResult = [[AVAudioSession sharedInstance] setPreferredInput:airplayPort error:&audioError];
} else {
AVAudioSessionPortDescription* airplayPort = [self airplayAudioDevice];
changeResult = [[AVAudioSession sharedInstance] setPreferredInput:airplayPort error:&audioError];
}
if (audioError) {
DDLogError(@"Apple TV error, audioSession: %@ %zd %@", [audioError domain], [audioError code], [[audioError userInfo] description]);
}
if (!changeResult) {
DDLogError(@"Apple TV error, audioSession: %@ %zd %@", [audioError domain], [audioError code], [[audioError userInfo] description]);
}
return changeResult;
}
- (AVAudioSessionPortDescription*)airplayAudioDevice {
NSArray* builtinRoutes = @[AVAudioSessionPortAirPlay];
return [self audioDeviceFromTypes:builtinRoutes];
}
- (AVAudioSessionPortDescription*)audioDeviceFromTypes:(NSArray*)types {
NSArray* routes = [[AVAudioSession sharedInstance] availableInputs];
for (AVAudioSessionPortDescription* route in routes) {
if ([types containsObject:route.portType]) {
return route;
}
}
return nil;
}
編輯1:
根據https://developer.apple.com/library/ios/documentation/Audio/Conceptual/AudioSessionProgrammingGuide/AudioSessionBasics/AudioSessionBasics.html的AVAudioSessionCategoryAmbient類支持AirPlay的文檔。
編輯2:
NSArray *inputs = [[AVAudioSession sharedInstance] availableInputs];
的輸入大小爲1,雖然iPhone連接到他的Apple TV。我不明白爲什麼大小不等於2
感謝送你聲音,但我需要一個建議給我的代碼,它處理藍牙,earPeace,iphone ,iphone的揚聲器,但爲什麼不空氣播放。 – ondermerol