Aracılığıyla paylaş


Oyun yayınlarını yönetme

Bu makalede, bir UWP uygulaması için oyun yayınlarını yönetme hakkında bilgi verilmektedir. Kullanıcıların windows'da yerleşik olarak bulunan sistem kullanıcı arabirimini kullanarak yayın başlatması gerekir, ancak Windows 10, sürüm 1709'dan başlayarak uygulamalar sistem yayın kullanıcı arabirimini başlatabilir ve yayın başladığında ve durduğunda bildirim alabilir.

UWP için Windows Masaüstü Uzantılarını uygulamanıza ekleme

Windows.Media.AppBroadcasting ad alanında bulunan uygulama yayınını yönetme API'leri Evrensel API sözleşmesine dahil değildir. API'lere erişmek için aşağıdaki adımları izleyerek uygulamanıza UWP için Windows Masaüstü Uzantıları'na bir başvuru eklemeniz gerekir.

  1. Visual Studio'da, Çözüm Gezginiiçindeki UWP projenizi genişletin, ardından Başvurular kısmına sağ tıklayın ve Başvuru Ekle...seçeneğini seçin.
  2. Evrensel Windows düğümünü genişletin ve Uzantılaröğesini seçin.
  3. Uzantı listesinde, projenizin hedef derlemesi ile eşleşen UWP girişi için Windows Masaüstü Uzantıları'nın yanındaki onay kutusunu işaretleyin. Uygulama yayını özellikleri için sürüm 1709 veya üzeri olmalıdır.
  4. Tamam'a tıklayın.

Kullanıcının yayını başlatmasına izin vermek için sistem kullanıcı arabirimini başlatın

Geçerli cihazın yayın için donanım gereksinimlerini karşılamaması veya başka bir uygulamanın yayında olması da dahil olmak üzere uygulamanızın şu anda yayın yapamamasının çeşitli nedenleri vardır. Sistem kullanıcı arabirimini başlatmadan önce uygulamanızın şu anda yayın yapabiliyor olup olmadığını kontrol edebilirsiniz. İlk olarak yayın API'lerinin geçerli cihazda kullanılabilir olup olmadığını denetleyin. API'ler, Windows 10, sürüm 1709'dan önceki bir işletim sistemi sürümünü çalıştıran cihazlarda kullanılamaz. Belirli bir işletim sistemi sürümünü denetlemek yerine Windows.Media.AppBroadcasting.AppBroadcastingContract sürüm 1.0'ı sorgulamak için ApiInformation.IsApiContractPresent yöntemini kullanın. Bu sözleşme varsa yayın API'leri cihazda kullanılabilir.

Ardından, pc'de GetDefault fabrika yöntemini çağırarak AppBroadcastingUI sınıfının bir örneğini alın. Burada aynı anda tek bir kullanıcı oturum açtı. Xbox'ta, birden çok kullanıcının oturum açabildiği durumlarda, bunun yerine GetForUser kullanın. Ardından uygulamanızın yayın durumunu almak için GetStatus arayın.

AppBroadcastingStatus sınıfının CanStartBroadcast özelliği, uygulamanın şu anda yayın yapmaya başlayıp başlayamayacağını bildirir. Yoksa, yayının kullanılamama nedenini belirlemek için Ayrıntıları özelliğini de kontrol edebilirsiniz. Nedene bağlı olarak, kullanıcıya durumu görüntülemek veya yayını etkinleştirme yönergelerini göstermek isteyebilirsiniz.

// 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;
}

Uygulama yayını kullanıcı arabiriminin ShowBroadcastUIçağrılarak sistem tarafından gösterilmesini isteyin.

Uyarı

ShowBroadcastUI yöntemi, sistemin geçerli durumuna bağlı olarak başarılı olmayan bir isteği temsil eder. Uygulamanız, bu yöntem çağrıldıktan sonra yayının başladığını varsaymamalıdır. Yayın başladığında veya durduğunda bildirim almak için IsCurrentAppBroadcastingChanged olayını kullanın.

broadcastingUI->ShowBroadcastUI();

Yayın başlatılırken ve durdurulurken bildirim alma

Kullanıcının sistem kullanıcı arabirimini kullanarak uygulamanızı yayınlamayı başlatması veya durdurması durumunda bildirim almak için AppBroadcastingMonitor sınıfının bir örneğini başlatın ve IsCurrentAppBroadcastingChanged olayı için bir işleyici kaydederek kaydolun. Önceki bölümde açıklandığı gibi, bir noktada ApiInformation.IsApiContractPresent kullanarak yayımlama API'lerinin kullanmayı denemeden önce cihazda mevcut olduğunu doğrulayın.

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);
}

IsCurrentAppBroadcastingChanged olayının işleyicisinde, uygulamanızın kullanıcı arabirimini geçerli yayın durumunu yansıtacak şekilde güncelleştirmek isteyebilirsiniz.

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