Partager via


Gérer la diffusion d’un jeu

Cet article explique comment gérer la diffusion de jeux pour une application UWP. Les utilisateurs doivent lancer la diffusion à l’aide de l’interface utilisateur système intégrée à Windows, mais à compter de Windows 10, version 1709, les applications peuvent lancer l’interface utilisateur de diffusion du système et recevoir des notifications lors du démarrage et de l’arrêt de la diffusion.

Ajouter les extensions de bureau Windows pour UWP à votre application

Les API de gestion de la diffusion d’applications, figurant dans l’espace de noms Windows.Media.AppBroadcasting , ne sont pas incluses dans le contrat d’API universelle. Pour accéder aux API, vous devez ajouter une référence aux extensions de bureau Windows pour L’UWP à votre application en procédant comme suit.

  1. Dans Visual Studio, dans Explorateur de solutions, développez votre projet UWP et cliquez avec le bouton droit sur Références, puis sélectionnez Ajouter une référence....
  2. Développez le nœud Windows universel et sélectionnez Extensions.
  3. Dans la liste des extensions, cochez la case en regard des extensions de bureau Windows pour l’entrée UWP qui correspond à la build cible de votre projet. Pour les fonctionnalités de diffusion d’application, la version doit être 1709 ou ultérieure.
  4. Cliquez sur OK.

Lancer l’interface utilisateur système pour permettre à l’utilisateur de lancer la diffusion

Il existe plusieurs raisons pour lesquelles votre application peut ne pas être en mesure de diffuser, notamment si l’appareil actuel ne répond pas à la configuration matérielle requise pour la diffusion ou si une autre application est actuellement diffusée. Avant de lancer l’interface utilisateur système, vous pouvez vérifier si votre application est actuellement en mesure de diffuser. Tout d’abord, vérifiez si les API de diffusion sont disponibles sur l’appareil actuel. Les API ne sont pas disponibles sur les appareils exécutant une version du système d’exploitation antérieure à Windows 10, version 1709. Au lieu de rechercher une version spécifique du système d’exploitation, utilisez la méthode ApiInformation.IsApiContractPresent pour rechercher windows.Media.AppBroadcasting.AppBroadcastingContract version 1.0. Si ce contrat est présent, les API de diffusion sont disponibles sur l’appareil.

Ensuite, obtenez une instance de la classe AppBroadcastingUI en appelant la méthode de fabrique GetDefault sur PC, où il existe un seul utilisateur connecté à la fois. Sur Xbox, où plusieurs utilisateurs peuvent être connectés, appelez GetForUser à la place. Appelez ensuite GetStatus pour obtenir l’état de diffusion de votre application.

La propriété CanStartBroadcast de la classe AppBroadcastingStatus vous indique si l’application peut actuellement démarrer la diffusion. Si ce n’est pas le cas, vous pouvez vérifier la propriété Details pour déterminer la raison pour laquelle la diffusion n’est pas disponible. Selon la raison, vous souhaiterez peut-être afficher l’état à l’utilisateur ou afficher des instructions pour activer la diffusion.

// Verify that the edition supports the AppBroadcasting APIs
if (!Windows::Foundation::Metadata::ApiInformation::IsApiContractPresent(
    "Windows.Media.AppBroadcasting.AppBroadcastingContract", 1, 0))
{
    return;
}

// On PC, call GetDefault because there is a single user signed in.
// On Xbox, call GetForUser instead because multiple users can be signed in.
AppBroadcastingUI^ broadcastingUI = AppBroadcastingUI::GetDefault();
AppBroadcastingStatus^ broadcastingStatus = broadcastingUI->GetStatus();

if (!broadcastingStatus->CanStartBroadcast)
{
    AppBroadcastingStatusDetails^ details = broadcastingStatus->Details;

    if (details->IsAnyAppBroadcasting)
    {
        UpdateStatusText("Another app is currently broadcasting.");
        return;
    }

    if (details->IsCaptureResourceUnavailable)
    {
        UpdateStatusText("The capture resource is currently unavailable.");
        return;
    }

    if (details->IsGameStreamInProgress)
    {
        UpdateStatusText("A game stream is currently in progress.");
        return;
    }

    if (details->IsGpuConstrained)
    {
        // Typically, this means that the GPU software does not include an H264 encoder
        UpdateStatusText("The GPU does not support broadcasting.");
        return;
    }

    // Broadcasting can only be started when the application's window is the active window.
    if (details->IsAppInactive)
    {
        UpdateStatusText("The app window to be broadcast is not active.");
        return;
    }

    if (details->IsBlockedForApp)
    {
        UpdateStatusText("Broadcasting is blocked for this app.");
        return;
    }

    if (details->IsDisabledByUser)
    {
        UpdateStatusText("The user has disabled GameBar in Windows Settings.");
        return;
    }

    if (details->IsDisabledBySystem)
    {
        UpdateStatusText("Broadcasting is disabled by the system.");
        return;
    }
    return;
}

Demandez que l’interface utilisateur de diffusion de l’application soit affichée par le système en appelant ShowBroadcastUI.

Remarque

La méthode ShowBroadcastUI représente une requête qui peut ne pas réussir, en fonction de l’état actuel du système. Votre application ne doit pas supposer que la diffusion a commencé après avoir appelé cette méthode. Utilisez l’événement IsCurrentAppBroadcastingChanged pour être averti lors du démarrage ou de l’arrêt de la diffusion.

broadcastingUI->ShowBroadcastUI();

Recevoir des notifications lors du démarrage et de l’arrêt de la diffusion

Inscrivez-vous pour recevoir des notifications lorsque l’utilisateur utilise l’interface utilisateur système pour démarrer ou arrêter la diffusion de votre application en initialisant une instance de classe AppBroadcastingMonitor et en inscrivant un gestionnaire pour l’événement IsCurrentAppBroadcastingChanged. Comme indiqué dans la section précédente, veillez à utiliser ApiInformation.IsApiContractPresent à un moment donné pour vérifier que les API de diffusion sont présentes sur l’appareil avant de tenter de les utiliser.

if (Windows::Foundation::Metadata::ApiInformation::IsApiContractPresent(
    "Windows.Media.AppBroadcasting.AppBroadcastingContract", 1, 0))
{
    m_appBroadcastMonitor = ref new AppBroadcastingMonitor();

    m_appBroadcastMonitor->IsCurrentAppBroadcastingChanged +=
        ref new TypedEventHandler<AppBroadcastingMonitor^, Platform::Object^>(this, &App::OnIsCurrentAppBroadcastingChanged);
}

Dans le gestionnaire de l’événement IsCurrentAppBroadcastingChanged , vous pouvez mettre à jour l’interface utilisateur de votre application pour refléter l’état de diffusion actuel.

void App::OnIsCurrentAppBroadcastingChanged(AppBroadcastingMonitor^ sender, Platform::Object^ args)
{
    if (sender->IsCurrentAppBroadcasting)
    {
        UpdateStatusText("App started broadcasting.");
    }
    else
    {
        UpdateStatusText("App stopped broadcasting.");
    }
}