如何将音频输出发送到 Apple TV?

Posted

技术标签:

【中文标题】如何将音频输出发送到 Apple TV?【英文标题】:How to send audio output to Apple TV? 【发布时间】:2016-04-20 06:00:16 【问题描述】:

我想添加一个按钮来将音频输出发送到 Apple TV。我使用下面的代码,但它不起作用。你能帮我做错吗?

首先我将 AVAudiosession 类别更改为 AVAudioSessionCategorySoloAmbient(为了搜索连接的 iOS 7 和 8 蓝牙设备,我必须这样做。)

AVAudioSession *audioSession = [AVAudioSession sharedInstance];
[audioSession setCategory:AVAudioSessionCategorySoloAmbient error:&err];

然后我用这个方法将音频切换到Apple TV

- (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];

尽管 iphone 连接到 Apple TV,但输入的大小为 1。我不明白为什么 size 不等于 2。

【问题讨论】:

【参考方案1】:

您使用 AirPlay 发送音频,请访问此链接 https://spin.atomicobject.com/2012/04/23/ios-mirroring-and-programmatic-airplay-selection/

【讨论】:

谢谢,但我需要一个关于我的代码的建议,它可以处理蓝牙、earPeace、iphone、iphone 扬声器,但为什么不能播放。

以上是关于如何将音频输出发送到 Apple TV?的主要内容,如果未能解决你的问题,请参考以下文章

如何将 4K HDR 视频流式传输到 Apple TV 4K?

如何将音频流从输出设备发送到输入设备?

从IOS设备播放音频/视频内容到Apple TV的起点[关闭]

如何在将音频缓冲区发送到扬声器之前获取它们?

在 UWP 应用中使用 AudioGraph 将音频输出发送到两台设备

Airplay:从 MPMoviePlayerController 播放电影只会导致音频流式传输到 Apple tv