Implemente a transmissão ao vivo com ultrabaixa latência do RTS no iOS integrando o ApsaraVideo Player SDK.
Pré-requisito
O CocoaPods deve estar instalado no ambiente de desenvolvimento.
Integrar o SDK
Adicione as dependências do ApsaraVideo Player SDK usando o método pod.
Abra a janela do terminal.
-
Acesse o diretório do projeto e crie um Podfile.
pod init
-
Edite o Podfile para adicionar as dependências da versão mais recente.
player_sdk_version = 'x.x.x' # We recommend using the latest version rts_sdk_version = '7.12.0' # The version number is independent of the Player SDK. V7.12.0 is the latest. # ApsaraVideo Player SDK pod 'AliPlayerSDK_iOS' , player_sdk_version # A bridging layer between the SDK and RTS component (AlivcArtc). Its version must be the same as the SDK version. It must be integrated together with the RTS component. pod 'AliPlayerSDK_iOS_ARTC' , player_sdk_version # The RTS component. pod 'RtsSDK' , rts_sdk_versionImportanteA camada de ponte entre o player e o componente RTS (AlivcArtc) deve usar a mesma versão do SDK do player. Integre-a obrigatoriamente junto com o componente RTS.
Para versões do player, consulte Baixe o SDK. Recomendamos o uso da versão mais recente. O ApsaraVideo Player exige a versão mais recente, sendo a V5.4.5.0 a mínima suportada.
Para perguntas frequentes, consulte FAQ do Player iOS.
-
Instale o SDK. Após executar o comando, um arquivo *.xcworkspace será gerado, confirmando a conclusão da integração do SDK.
pod install
Uso das interfaces do ApsaraVideo Player SDK
Chame as APIs do ApsaraVideo Player SDK para ativar o RTS. Para conhecer outros recursos do SDK, consulte Recursos avançados e Operações de API.
O código de exemplo a seguir serve apenas como referência. Para a implementação completa, consulte o módulo RTS Ultra-Low-Latency Streaming Playback no projeto de exemplo API-Example em Objective-C, que demonstra os principais recursos do ApsaraVideo Player SDK.
Ao usar o pull de stream RTS com o ApsaraVideo Player, não chame pause para pausar uma transmissão ao vivo. Em vez disso, chame stop para interromper a reprodução e, em seguida, chame prepare para retomar.
Não há suporte para busca (arrastar a barra de progresso).
Criar um player
-
Crie um player.
Crie uma instância AliPlayer.
// Create a player instance AliPlayer mAliPlayer = [[AliPlayer alloc] init]; // Create a view container for displaying the playback content and set the player's rendering view UIView playerView = [[UIView alloc] initWithFrame:self.view.bounds]; [self.view addSubview:playerView]; mAliPlayer.playerView = playerView; [mAliPlayer setTraceID:traceId];NotaO player oferece os recursos de Monitoramento da Qualidade de Reprodução, Rastreamento de Ponto Único e Estatísticas de Reprodução de Vídeo. Todos dependem do relatório de logs de instrumentação.
As capacidades disponíveis variam conforme a configuração do parâmetro
setTraceID:Se
setTraceIDfor omitido (padrão), o relatório de logs de instrumentação fica ativado. É possível usar o monitoramento da qualidade de reprodução e as estatísticas de reprodução de vídeo, mas não o rastreamento de ponto único.setTraceIDdefinido com um trace ID: O trace ID deve ser um identificador exclusivo do usuário ou dispositivo, como um ID de usuário ou ID de dispositivo (IMEI ou IDFA). Com um trace ID configurado, o relatório de logs de instrumentação é ativado, permitindo o uso do monitoramento da qualidade de reprodução, rastreamento de ponto único e estatísticas de reprodução de vídeo.setTraceIDdefinido comoDisableAnalytics: Desativa o relatório de logs de instrumentação. Os recursos de monitoramento da qualidade de reprodução, rastreamento de ponto único e estatísticas de reprodução de vídeo ficam indisponíveis.
-
Defina a source de reprodução.
O player suporta quatro sources de reprodução: VidSts, VidAuth, VidMps e UrlSource. Para usar RTS, defina UrlSource com uma URL que utilize o protocolo
artc://.AVPUrlSource *urlSource = [[AVPUrlSource alloc] urlWithString:"artc://<streaming URL>"]; [mAliPlayer setUrlSource:urlSource];NotaPara mais informações sobre como definir a source de reprodução, consulte Recursos Básicos.
-
Configure os parâmetros de reprodução.
Configure os parâmetros de reprodução para otimizar a experiência do RTS.
NotaA partir da versão 6.3.0, o SDK do player suporta configuração automática ideal de baixa latência. Quando a URL de reprodução começa com
artc://e os valores deMaxDelayTime,HighBufferDurationouStartBufferDurationemAVPConfignão forem modificados manualmente, o SDK usará automaticamente os valores 1000, 10 e 10 para a reprodução real.Para personalizar esses parâmetros, use o seguinte exemplo:
//1. Obtain and modify the configuration. AVPConfig *config = mAliPlayer.getConfig; if ([playUrl hasPrefix:@"artc://"]) { // The maximum latency. Unit: milliseconds. In this example, set the value to 1000, which is 1 second. [config setMaxDelayTime:1000]; // The buffer duration for playback startup. [config setStartBufferDuration:10]; // The buffer duration for stuttering recovery. [config setHighBufferDuration:10]; } else { // You can use default configuration or specify custom values. } //2. Apply the configuration. [mAliPlayer setConfig:config]; -
Inicie a reprodução.
// Prepare for playback [mAliPlayer prepare]; // After prepare, you can synchronously call the start operation. Playback automatically starts when the onPrepared callback completes. [mAliPlayer start];
Controlar a reprodução
O ApsaraVideo Player SDK suporta controles comuns de reprodução, como iniciar, parar e buscar.
Iniciar reprodução
Use o método start para iniciar a reprodução do vídeo.
[mAliPlayer start];
Parar reprodução
Use o método stop para parar a reprodução do vídeo. Exemplo:
[mAliPlayer stop];
Destruir o player
É possível destruir o player de forma síncrona ou assíncrona:
// Synchronously destroy the player. The system automatically calls the stop method.
[mAliPlayer destroy];
// Asynchronously destroy the player. The system automatically calls the stop method.
[mAliPlayer destroyAsync];
A destruição síncrona bloqueia a execução até que todos os recursos do player sejam liberados. Para obter resposta mais rápida da UI, use a destruição assíncrona. Observe o seguinte:
Não realize nenhuma operação no objeto do player durante a destruição assíncrona.
Não é necessário parar manualmente a reprodução antes da destruição assíncrona, pois o processo inclui uma etapa automática de parada.
Usar recursos auxiliares
-
Alternador de Log
// Enable logging. [mAliPlayer setEnableLog:YES]; [mAliPlayer setLogCallbackInfo:LOG_LEVEL_TRACE callbackBlock:nil]; // Disable logging. [mAliPlayer setEnableLog:NO]; [mAliPlayer setLogCallbackInfo:LOG_LEVEL_NONE callbackBlock:nil]; -
Fallback de Transmissão Ao Vivo
NotaO downgrade aplica-se apenas a cenários de tempo limite. Se ocorrer um tempo limite e você tiver configurado uma das opções de downgrade abaixo, o player fará o downgrade automaticamente. Caso contrário, ele acionará o callback onError. Erros como HTTP 404, 403 ou desconexão do streamer não acionam o downgrade.
O Downgrade automático de RTS faz a transição de RTS para FLV usando o mesmo domínio. Se os domínios RTS e FLV forem diferentes, configure o Downgrade personalizado de RTS para especificar o domínio FLV de destino.
-
Downgrade automático de RTS (ativado por padrão)
Se nenhum downgrade personalizado estiver configurado, o player retornará automaticamente à URL FLV padrão associada à URL RTS quando o pull de stream RTS falhar. Exemplo:
// 1 indicates on, and 0 indicates off. The default value is on. [AliPlayerGlobalSettings setOption:ALLOW_PRE_RENDER valueInt:1]; -
Downgrade personalizado de RTS
Especifique uma URL de fallback (HLS ou FLV) para a reprodução RTS. Se o pull de stream RTS falhar, o player mudará automaticamente para a URL especificada.
// Specify the downgrade source URL. AVPUrlSource *urlSource = [[AVPUrlSource alloc] urlWithString:downgradeUrl]; // Optional. Configure other settings. AVPConfig *config = [mAliPlayer getConfig]; // Specify the degraded streaming URL. [mAliPlayer enableDowngrade:urlSource config:config];
-
Obter o Trace ID
Cada sessão de reprodução de baixa latência gera um trace ID para solução de problemas. Recupere-o pelo callback de eventos do player.
// Listen to the onPlayerEvent callback and parse the DemuxerTraceID message. - (void)onPlayerEvent:(AliPlayer*)mAliPlayer eventWithString:(AVPEventWithString)eventWithString description:(NSString *)description { switch (eventWithString) { case EVENT_PLAYER_DEMUXER_TRACE_ID: { NSString *traceId = description; } break; default: break; } }