Gerenciar transmissão de jogo
Este artigo mostra como gerenciar a transmissão de jogos para um aplicativo UWP. Os usuários devem iniciar a transmissão usando a interface do usuário do sistema integrada ao Windows, mas a partir do Windows 10, versão 1709, os aplicativos podem iniciar a interface do usuário de transmissão do sistema e receber notificações quando a transmissão é iniciada e interrompida.
Adicionar as extensões da área de trabalho do Windows para a UWP ao seu aplicativo
As APIs para gerenciar a transmissão de aplicativos, encontradas no namespace Windows.Media.AppBroadcasting , não estão incluídas no contrato da API Universal. Para acessar as APIs, você deve adicionar uma referência às Extensões da Área de Trabalho do Windows para a UWP ao seu aplicativo com as etapas a seguir.
- No Visual Studio, no Gerenciador de Soluções, expanda seu projeto UWP e clique com o botão direito do mouse em Referências e selecione Adicionar Referência....
- Expanda o nó Universal do Windows e selecione Extensões.
- Na lista de extensões, marque a caixa de seleção ao lado das Extensões da Área de Trabalho do Windows para a entrada UWP que corresponde ao build de destino do seu projeto. Para os recursos de transmissão do aplicativo, a versão deve ser 1709 ou superior.
- Clique em OK.
Inicie a interface do usuário do sistema para permitir que o usuário inicie a transmissão
Há vários motivos pelos quais seu aplicativo pode não ser capaz de transmitir no momento, incluindo se o dispositivo atual não atender aos requisitos de hardware para transmissão ou se outro aplicativo estiver transmitindo no momento. Antes de iniciar a interface do usuário do sistema, você pode verificar se seu aplicativo pode transmitir no momento. Primeiro, verifique se as APIs de transmissão estão disponíveis no dispositivo atual. As APIs não estão disponíveis em dispositivos que executam uma versão do sistema operacional anterior ao Windows 10, versão 1709. Em vez de verificar se há uma versão específica do sistema operacional, use o método ApiInformation.IsApiContractPresent para consultar o Windows.Media.AppBroadcasting.AppBroadcastingContract versão 1.0. Se esse contrato estiver presente, as APIs de transmissão estarão disponíveis no dispositivo.
Em seguida, obtenha uma instância da classe AppBroadcastingUI chamando o método de fábrica GetDefault no PC, em que há um único usuário conectado por vez. No Xbox, onde vários usuários podem estar conectados, chame GetForUser . Em seguida, chame GetStatus para obter o status de transmissão do seu aplicativo.
A propriedade CanStartBroadcast da classe AppBroadcastingStatus informa se o aplicativo pode iniciar a transmissão no momento. Caso contrário, você pode verificar a propriedade Detalhes para determinar o motivo pelo qual a transmissão não está disponível. Dependendo do motivo, você pode exibir o status para o usuário ou mostrar instruções para habilitar a transmissão.
// 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;
}
Solicite que a interface do usuário de transmissão do aplicativo seja mostrada pelo sistema chamando ShowBroadcastUI.
Observação
O método ShowBroadcastUI representa uma solicitação que pode não ser bem-sucedida, dependendo do estado atual do sistema. Seu aplicativo não deve presumir que a transmissão começou depois de chamar esse método. Use o evento IsCurrentAppBroadcastingChanged para ser notificado quando a transmissão for iniciada ou interrompida.
broadcastingUI->ShowBroadcastUI();
Receba notificações quando a transmissão começar e parar
Registre-se para receber notificações quando o usuário usar a interface do usuário do sistema para iniciar ou parar de transmitir seu aplicativo inicializando uma instância da classe AppBroadcastingMonitor e registrando um manipulador para o evento IsCurrentAppBroadcastingChanged. Conforme discutido na seção anterior, certifique-se de usar o ApiInformation.IsApiContractPresent em algum momento para verificar se as APIs de transmissão estão presentes no dispositivo antes de tentar usá-las.
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);
}
No manipulador do evento IsCurrentAppBroadcastingChanged , talvez você queira atualizar a interface do usuário do aplicativo para refletir o estado de transmissão atual.
void App::OnIsCurrentAppBroadcastingChanged(AppBroadcastingMonitor^ sender, Platform::Object^ args)
{
if (sender->IsCurrentAppBroadcasting)
{
UpdateStatusText("App started broadcasting.");
}
else
{
UpdateStatusText("App stopped broadcasting.");
}
}
Tópicos relacionados