How to check if the device is connected via airplay?

前端 未结 2 513
抹茶落季
抹茶落季 2021-02-01 11:15

I had the problem to check if I am connected to an airplay device and if it is connected via mirroring or streaming. But the check needs to be done before the video started.

相关标签:
2条回答
  • 2021-02-01 11:55

    Swift version:

    var isAudioSessionUsingAirplayOutputRoute: Bool {
    
        let audioSession = AVAudioSession.sharedInstance()
        let currentRoute = audioSession.currentRoute
    
        for outputPort in currentRoute.outputs {
            if outputPort.portType == AVAudioSessionPortAirPlay {
                return true
            }
        }
    
        return false
    }
    

    And checking the screen count:

    if UIScreen.screens.count < 2 {
        //streaming
    } else {
        //mirroring
    }
    
    0 讨论(0)
  • This is my solution

    - (BOOL)isAudioSessionUsingAirplayOutputRoute
    {
        /**
         * I found no other way to check if there is a connection to an airplay device
         * airPlayVideoActive is NO as long as the video hasn't started 
         * and this method is true as soon as the device is connected to an airplay device
         */
        AVAudioSession* audioSession = [AVAudioSession sharedInstance];
        AVAudioSessionRouteDescription* currentRoute = audioSession.currentRoute;
        for (AVAudioSessionPortDescription* outputPort in currentRoute.outputs){
            if ([outputPort.portType isEqualToString:AVAudioSessionPortAirPlay])
                return YES;
        }
        return NO;
    }
    

    To check if the airplay connection is mirroring you just have to check the screens count.

    if ([[UIScreen screens] count] < 2)) {
        //streaming
    }
    else {
        //mirroring
    }
    

    If there is a better solution, let me know

    0 讨论(0)
提交回复
热议问题