Search code examples
iosobjective-ciphoneipadairplay

How to check if the device is connected via airplay?


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.

airPlayVideoActive only return YES if the video already started.


Solution

  • 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