Todos os produtos
Search
Central de documentação

ApsaraVideo VOD:iOS Player FAQ

Última atualização: Jul 16, 2026

Encontre soluções para problemas comuns com o ApsaraVideo Player SDK for iOS, incluindo erros de build no Xcode, falhas de reprodução, comportamento de busca e cache.

Problemas relacionados à licença

Resolva problemas de licença inválida ou expirada em Perguntas frequentes sobre licença.

Problemas comuns entre plataformas

Problemas de desenvolvimento

Ocorrem erros ao empacotar um aplicativo com o Xcode 14 e enviá-lo para revisão na App Store

Erros relacionados a Bitcode

Sintoma: Um erro relacionado a bitcode ocorre ao enviar uma build do Xcode 14 para a App Store:

 ITMS-90482: Invalid Executable - The executable 'xxx.app/Frameworks/alivcffmpeg.framework/alivcffmpeg' contains bitcode.

Solução: Execute o comando xcrun bitcode_strip para remover o bitcode do framework. ${framework_path} é o caminho do binário do framework.

xcrun bitcode_strip ${framework_path} -r -o ${framework_path}

Erros relacionados a cURL

Sintoma: Um erro relacionado a cURL ocorre ao enviar uma build do Xcode 14 para a App Store:

ITMS-90338: Non-public API usage - The app references non-public symbols in Frameworks/AliyunPlayer.framework/AliyunPlayer: _curl_multi_poll, _curl_multi_wakeup. If method names in your source code match the private Apple APIs listed above, altering your method names will help prevent this app from being flagged in future submissions. In addition, note that one or more of the above APIs may be located in a static library that was included with your app. If so, they must be removed. For further information, visit the Technical Support Information at http://developer.apple.com/support/technical/

Solução:

  • Caso seu projeto integre apenas o ApsaraVideo Player SDK (AliPlayerSDK_iOS), atualize o SDK para uma versão posterior à 5.4.9.2.

  • Se o projeto integrar tanto o ApsaraVideo Player SDK (AliPlayerPartSDK_iOS) quanto o SDK de vídeo curto, atualize o ApsaraVideo Player SDK para uma versão posterior à 5.4.9.2, o alivcffmpeg (QuCore-ThirdParty) para a versão 4.3.6 e o SDK de vídeo curto para uma versão posterior à 3,26.

Erros sobre APIs não públicas

Sintoma: Um erro sobre APIs não públicas ocorre ao enviar uma build do Xcode 14 para a App Store. Ao distribuir um aplicativo com o Xcode, uma caixa de diálogo Distribution completed with warnings aparece, indicando um App Store Connect Operation Error. O erro informa que o aplicativo referencia um seletor não público onCompletion: em AliyunMediaDownloader.framework/AliyunMediaDownloader.

Solução: Este é um aviso das builds do Xcode 14 e geralmente não afeta o lançamento se o projeto for compilado com sucesso. Se o aplicativo não puder ser lançado, utilize o Xcode 13.

Erros relacionados a plugins de pós-processamento como mpf_filter.framework e vfi_filter.framework para interpolação de quadros e nitidez

Sintoma: Um erro relacionado a plugins de pós-processamento (mpf_filter.framework, vfi_filter.framework) para interpolação de quadros e nitidez ocorre ao enviar uma build do Xcode 14 para a App Store. Ao distribuir um aplicativo com o Xcode, ocorre um erro Distribution failed with errors, indicando dois erros de validação de ativo (Asset validation failed): o CFBundleIdentifier com.alibaba.AliyunPlayer.mpf_filter de Payload/xxx.app/Frameworks/mpf_filter.framework e o CFBundleIdentifier com.alibaba.AliyunPlayer.vfi_filter de vfi_filter.framework contêm caracteres inválidos (underscores). Os CFBundleIdentifiers podem conter apenas caracteres alfanuméricos, pontos (.) e hifens (-).

Solução:

  • Se o seu projeto não utilizar o plugin mencionado na mensagem de erro, exclua-o. Isso não afeta os recursos do player e reduz o tamanho do pacote.

  • Caso seja obrigatório usar o plugin citado no erro, remova temporariamente o "_" da string de valor no par chave-valor "Bundle identifier" no arquivo Info.plist localizado no caminho do framework e, em seguida, compile e construa o projeto.

  • Atualize para a versão 5.5.2.0 ou superior, onde a nomenclatura foi corrigida.

O que fazer se o erro "Xcode Error: PhaseScriptExecution failed with a nonzero exit code" ocorrer ao compilar e executar a demo para iOS?

Siga estas etapas: 1. Acesse o diretório do projeto. 2. Execute pod deintegrate.

  1. Execute pod install.

Após integrar o ApsaraVideo Player SDK for iOS, posso depurar e executar meu aplicativo em um simulador do Xcode?

O ApsaraVideo Player SDK for iOS não oferece suporte a simuladores. Utilize um iPhone físico para depurar e executar seu aplicativo.

Como obter o progresso atual da reprodução

Por padrão, o ApsaraVideo Player SDK relata o progresso da reprodução a cada 500 ms. Reduza o intervalo para obter atualizações mais frequentes:

AVPConfig *config = [self.player getConfig];
config.positionTimerIntervalMs = 100; // Change the callback interval. Unit: ms.
[self.player setConfig:config];

/**
 @brief: The callback for the current playback position.
 @param player: The player pointer.
 @param position: The current playback position.
 */
- (void)onCurrentPositionUpdate:(AliPlayer*)player position:(int64_t)position {
    // The current playback progress.
    long currentPosition = position;
}

Como obter a largura e a altura de um vídeo

Três métodos estão disponíveis:

  • Método 1: Após o preparo do player (AVPEventPrepareDone), leia a largura e a altura da instância AliPlayer.

    -(void)onPlayerEvent:(AliPlayer*)player eventType:(AVPEventType)eventType {
        if (eventType == AVPEventPrepareDone) {
          NSLog(@"Video width: %d, height: %d", player.width, player.height);
        }
    }
  • Método 2: Escute o callback de alteração de tamanho do vídeo, que retorna a largura e a altura diretamente.

    - (void)onVideoSizeChanged:(AliPlayer*)player width:(int)width height:(int)height rotation:(int)rotation {
        NSLog(@"Video width: %d, height: %d", width, height);
    }
  • Método 3: Escute o callback de informações de faixa e leia videoWidth e videoHeight do AVPTrackInfo no array info.

    Nota

    Este método depende de uma solicitação de rede. Use o Método 1 ou o Método 2 para maior confiabilidade.

    - (void)onTrackReady:(AliPlayer*)player info:(NSArray<AVPTrackInfo*>*)info {
        for (int i=0; i<info.count; i++) {
          AVPTrackInfo *trackInfo = info[i];
          NSLog(@"Video width: %d, height: %d", trackInfo.videoWidth, trackInfo.videoHeight);
      }
    }

A barra de progresso volta após uma operação de busca

Causa: O player usa busca imprecisa por padrão. Após uma operação de busca, a reprodução recomeça a partir de um quadro-chave próximo ao ponto de busca.

Solução: Alterne para o modo de busca precisa.

Como alternar entre os modos de busca precisa e imprecisa

Exemplo:

// Switch to inaccurate seek.
[self.player seekToTime:1000 seekMode:AVP_SEEKMODE_INACCURATE];
// Switch to accurate seek.
[self.player seekToTime:1000 seekMode:AVP_SEEKMODE_ACCURATE];

A barra de progresso ainda volta após alternar para o modo de busca precisa

Causa: A busca precisa leva mais tempo que a busca imprecisa. Se a distância do ponto de busca até o quadro-chave mais próximo for muito grande e exceder o intervalo máximo para busca precisa, o ApsaraVideo Player SDK alterna automaticamente para a busca imprecisa. Isso faz com que a barra de progresso volte.

Solução: Aumente o intervalo máximo para busca precisa a fim de reduzir o retorno à busca imprecisa. Um intervalo maior melhora a precisão, mas pode aumentar o tempo de busca quando os quadros-chave estiverem distantes:

// Unit: ms.
[self.player setMaxAccurateSeekDelta:10000];

Erro durante o cache de vídeo: encrypt check fail

O funcionamento do cache é idêntico ao do download. Com o download seguro ativado, o arquivo de verificação de criptografia deve corresponder às informações do aplicativo. Baixe o arquivo em Download offline e adicione-o ao SDK. Siga as etapas em Download de vídeo, caso contrário, o cache ou o download falhará.

Obter dados de origem de áudio e vídeo

O código a seguir fornece um exemplo de como obter dados de origem de áudio e vídeo:

// Set the rendering callback.
self.player.renderingDelegate = self;

// Listen for the rendering callback.
- (BOOL)onRenderingFrame:(CicadaFrameInfo*) frameInfo {
    if (frameInfo.frameType == Cicada_FrameType_Video) { // Underlying video data.

    } else if (frameInfo.frameType == Cicada_FrameType_Audio) { // Underlying audio data.

    }
    return NO;
}

Como obtenho os pixels de cada quadro de vídeo no player?

ApsaraVideo Player SDK for iOS: Obtenha os pixels escutando o callback onRenderingFrame.

player.renderingDelegate = self;

#pragma mark CicadaRenderingDelegate
- (BOOL)onRenderingFrame:(CicadaFrameInfo*) frameInfo{
    if(frameInfo.frameType==Cicada_FrameType_Video){
        // Video
        NSLog(@"receive HW frame:%p pts:%ld foramt %d", frameInfo.video_pixelBuffer, frameInfo.pts, CVPixelBufferGetPixelFormatType(frameInfo.video_pixelBuffer));

    } else if (frameInfo.frameType==Cicada_FrameType_Audio){
        // Audio
    }
    return NO;
}

Lógica de troca adaptativa de taxa de bits

Após ativar a troca adaptativa de taxa de bits com a API [self.player selectTrack:SELECT_AVPTRACK_TYPE_VIDEO_AUTO];, o SDK monitora a velocidade da rede. Se a velocidade atingir o próximo nível de taxa de bits dentro de 10 segundos, o player fará a troca; caso contrário, permanecerá na taxa de bits atual.

  • De alta para baixa: o player realiza a troca após o término da reprodução do conteúdo em cache de alta taxa de bits.

  • De baixa para alta: a troca pelo player é imediata.

Lógica de nova tentativa personalizada

Por padrão, o SDK tenta novamente operações de rede com falha duas vezes, com um tempo limite de 15 segundos. Se todas as tentativas falharem, o callback Error será acionado.

Para personalizar a lógica de nova tentativa, defina a contagem de tentativas como 0 e trate os eventos externamente:

AVPConfig *config = [self.player getConfig];
config.networkRetryCount = 0; // Set the number of retries. In this example, the value is set to 0.
[self.player setConfig:config];

/**
 @brief: The callback for player events.
 @param player: The player pointer.
 @param eventWithString: The player event type.
 @param description: The description of the player event.
 @see AVPEventType
 */
-(void)onPlayerEvent:(AliPlayer*)player eventWithString:(AVPEventWithString)eventWithString description:(NSString *)description {
    if (eventWithString == EVENT_PLAYER_NETWORK_RETRY) { // Network error. A retry is required.
        // TODO: Add the processing logic.
    }
}

Um erro 403 é relatado e a reprodução de um fluxo HLS falha após a configuração do cache local

Sintoma: A reprodução de um fluxo HLS (M3U8) com VidAuth e cache local habilitados falha com um erro 403.

Causa: Se você sair antes que o vídeo seja totalmente armazenado em cache, o player reutiliza credenciais VidAuth expiradas na próxima tentativa de reprodução, causando um erro 403.

Solução: No SDK V5.5.4.0 e versões posteriores, defina o campo AVPConfig.enableStrictAuthMode para controlar o modo de autenticação de fluxos HLS com parâmetros de autenticação. O padrão é false.

  • Autenticação não estrita (false): As informações de autenticação são armazenadas em cache junto com o conteúdo de mídia. Se apenas parte da mídia tiver sido armazenada anteriormente, o player usará as informações de autenticação em cache para solicitar a parte não armazenada. Se a autenticação da URL tiver um curto período de validade ou se a reprodução for retomada após uma longa pausa, a autenticação poderá expirar. Para lidar com isso, implemente o recurso de atualização automática de origem.

  • Autenticação estrita (true): As informações de autenticação não são armazenadas em cache. A autenticação ocorre no início de cada sessão de reprodução. Isso pode causar falha na reprodução se não houver conexão de rede.

A preempção de áudio impede o ApsaraVideo Player SDK for iOS de reproduzir vídeos

Sintoma: Quando seu projeto usa tanto o ApsaraVideo Player SDK quanto outros controles de áudio, ocorrem problemas de reprodução, como ausência de som ou travamento do vídeo.

Causa: O AVAudioSession no iOS é um singleton. Sem uma configuração unificada entre múltiplos controles de áudio, a preempção de áudio pode impedir a reprodução de vídeo.

Solução: Configure o AVAudioSession de maneira unificada em um local apropriado do seu projeto. Por exemplo, configure a sessão de áudio do aplicativo como categoria de reprodução e permita a mixagem com outros aplicativos. Também é possível configurar a sessão de áudio como categoria PlayAndRecord para cenários de gravação e reprodução. Se ocorrer um erro durante a operação, a mensagem será armazenada na variável err.

[[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayback withOptions:AVAudioSessionCategoryOptionMixWithOthers error:&err];

Defina também um proxy personalizado de AVAudioSession no lado do SDK para ignorar sua lógica interna de AVAudioSession e evitar a preempção:

  1. Defina o proxy.

    [AliPlayer setAudioSessionDelegate:self];
  2. Configure o listener para o proxy.

    return TRUE indica que o SDK não configurará mais o AVAudioSession internamente.

    #pragma mark CicadaAudioSessionDelegate
    - (BOOL)setActive:(BOOL)active error:(NSError **)outError
    {
        return YES;
    }
    
    - (BOOL)setCategory:(NSString *)category withOptions:(AVAudioSessionCategoryOptions)options error:(NSError **)outError
    {
          return YES;
    }
    
    - (BOOL)setCategory:(AVAudioSessionCategory)category mode:(AVAudioSessionMode)mode routeSharingPolicy:(AVAudioSessionRouteSharingPolicy)policy options:(AVAudioSessionCategoryOptions)options error:(NSError **)outError
    {
        return YES;
    }

Uma falha de pilha apontando para o SDK ocorre durante a execução do ApsaraVideo Player SDK for iOS

Se uma falha de pilha apontando para o SDK ocorrer enquanto você usa o ApsaraVideo Player SDK for iOS, siga estas etapas:

  1. Atualize para a versão mais recente do ApsaraVideo Player SDK for iOS, que inclui melhorias contínuas de estabilidade. Baixe o SDK mais recente em Introdução ao SDK.

  2. Se a falha persistir após a atualização, forneça informações completas sobre o erro ao suporte técnico da Alibaba Cloud. Obter suporte técnico.

O ApsaraVideo Player SDK for iOS suporta download durante a reprodução?

Não. O SDK suporta cache local, que baixa vídeos durante a reprodução para uso offline posterior. No entanto, ele não suporta a reprodução de arquivos em cache armazenados em um diretório de arquivos separado.

O ApsaraVideo Player SDK for iOS suporta a obtenção do progresso de buffer de um vídeo?

Sim. O ApsaraVideo Player SDK for iOS permite obter a velocidade de buffer, a taxa de quadros de renderização em tempo real, as taxas de bits de áudio e vídeo e a taxa de bits de download da rede. Obter informações de reprodução.

Ocorre uma falha enquanto o player está em execução

Para identificar a causa:

  1. Verifique se a falha ocorre no ApsaraVideo Player SDK.

    Confira se a pilha de falha contém o prefixo AliyunPlayer. Em caso afirmativo, o problema reside no ApsaraVideo Player SDK.

  2. Atualize para a versão mais recente do ApsaraVideo Player SDK e verifique se o problema foi resolvido.

  3. Caso o problema persista, prepare os arquivos de falha (todas as threads), logs de falha e cenários de falha conforme descrito em Como obter logs.

Uma falha relacionada à inicialização do programa ou pré-carregamento ocorre durante a execução do ApsaraVideo Player SDK V5.4.6.0

Atualize o ApsaraVideo Player SDK para uma versão posterior à V5.4.7.1. Para manter a estabilidade da V5.4.6.0, utilize a versão hotfix pod 5.4.6.0-25587639.

Como habilitar a reprodução em tela cheia

O ApsaraVideo Player SDK for iOS não fornece uma API para reprodução em tela cheia. Implemente esse recurso com base no sistema. A demo do ApsaraVideo Player SDK for iOS para versões 5.5.0.0 e posteriores está adaptada ao método de tela cheia do iOS 16.0 e superiores.

O código a seguir fornece um exemplo de como implementar este recurso:

Nota

Após executar o método de tela cheia do sistema, ajuste também o frame do playerView definido para a instância Aliplayer com base na tela.

UIInterfaceOrientation orientation = UIInterfaceOrientationLandscapeLeft; // Rotate to full screen
......

// For iOS 16.0 and later
if (@available(iOS 16.0, *)) {
    @try {
            NSArray *array = [[[UIApplication sharedApplication] connectedScenes] allObjects];
      UIWindowScene *ws = (UIWindowScene *)array[0];
        Class GeometryPreferences = NSClassFromString(@"UIWindowSceneGeometryPreferencesIOS");
      id geometryPreferences = [[GeometryPreferences alloc]init];
      UIInterfaceOrientationMask orientationMask = UIInterfaceOrientationMaskLandscapeRight;
      if (orientation == UIInterfaceOrientationPortrait) {
          orientationMask = UIInterfaceOrientationMaskPortrait;
      }
      [geometryPreferences setValue:@(orientationMask) forKey:@"interfaceOrientations"];
      SEL sel_method = NSSelectorFromString(@"requestGeometryUpdateWithPreferences:errorHandler:");
      void (^ErrorBlock)(NSError *err) = ^(NSError *err){
            NSLog(@"Screen rotation error:%@", [err debugDescription]);
      };
      if ([ws respondsToSelector:sel_method]) {
          (((void (*)(id, SEL,id,id))[ws methodForSelector:sel_method])(ws, sel_method,geometryPreferences,ErrorBlock));
      }
  } @catch (NSException *exception) {
      NSLog(@"Screen rotation error:%@", exception.reason);
  } @finally {
  }
} else { // For systems earlier than iOS 16.0
  if ([[UIDevice currentDevice] respondsToSelector:@selector(setOrientation:)]) {
      SEL selector = NSSelectorFromString(@"setOrientation:");
      NSInvocation *invocation = [NSInvocation invocationWithMethodSignature:[UIDevice instanceMethodSignatureForSelector:selector]];
      [invocation setSelector:selector];
      [invocation setTarget:[UIDevice currentDevice]];
      [invocation setArgument:&Orientation atIndex:2];
      [invocation invoke];
  }
  [[UIApplication sharedApplication]setStatusBarOrientation:orientation animated:YES];
}

Barras pretas aparecem durante a reprodução de vídeo

Para identificar a causa:

  1. Verifique se a própria fonte de vídeo possui barras pretas.

  2. Chame a seguinte API para ajustar o modo de dimensionamento do player.

    /*
    AVP_SCALINGMODE_SCALEASPECTFILL: The video is scaled to fill the screen. The video may be cropped.
    AVP_SCALINGMODE_SCALEASPECTFIT: The video is scaled to fit the screen. Black bars may appear.
    AVP_SCALINGMODE_SCALETOFILL: The video is scaled to fill the screen without preserving the aspect ratio. The video may be distorted.
    */
    self.player.scalingMode = AVP_SCALINGMODE_SCALETOFILL;
  3. Se o modo de dimensionamento não atender aos seus requisitos, ajuste a largura e a altura da visualização personalizada para self.player.playerView modificando o frame de self.player.playerView.

O áudio é reproduzido, mas nenhum vídeo é exibido, e o log relata "log[AFVTBDecoder] :IOS8VT: throw frame"

Para identificar a causa:

  1. Use outro player para reproduzir o vídeo e verifique se é um arquivo apenas de áudio.

  2. Se o vídeo for reproduzido normalmente em outro player e as dimensões do vídeo mudarem, alterne para decodificação por software. O código a seguir mostra como fazer essa alteração:

    player.enableHardwareDecoder = NO

Travamentos e dessincronização de áudio e vídeo ocorrem durante o pull de fluxo RTS em um cliente iOS

Solução: Integre o componente de latência ultrabaixa mais recente do player. Implementar pull de fluxo RTS em um cliente iOS.

Quando um aplicativo iOS está em segundo plano ou não foi iniciado, o áudio é reproduzido, mas nenhum vídeo é exibido se o usuário entrar no aplicativo por meio de uma notificação.

Solução: Remova UIApplicationStateActive == [[UIApplication sharedApplication] applicationState].

- (AliPlayer *)aliPlayer{
    if (!_aliPlayer && UIApplicationStateActive == [[UIApplication sharedApplication] applicationState]) {
        _aliPlayer = [[AliPlayer alloc] init];
        _aliPlayer.scalingMode =  AVP_SCALINGMODE_SCALEASPECTFIT;
        _aliPlayer.rate = 1;
        _aliPlayer.delegate = self;
        _aliPlayer.playerView = self.playerView;
    }
    return _aliPlayer;
}

Ao reproduzir uma transmissão ao vivo, o log relata um erro padrão: "-5, IO error (Input/Output (I/O))"

Ao reproduzir uma transmissão ao vivo, use os valores padrão para as configurações de controle de cache e latência (startBufferDuration, highBufferDuration e maxBufferDuration no AVPConfig). Não personalize essas configurações. Verifique sua configuração em Configurar controle de cache e latência.

Após pausar a reprodução, navegar para outra tela e retornar para retomar, um erro relacionado a áudio é relatado no log: "Deactivating an audio session that has running I/O." ou "All I/O should be stopped or paused prior to deactivating the audio session."

Sintoma: Na página de reprodução de vídeo, você pausa a reprodução e navega para outra página que contém áudio. Ao retornar, não é possível retomar a reprodução, e um erro relacionado a áudio, como "Deactivating an audio session that has running I/O." ou "All I/O should be stopped or paused prior to deactivating the audio session.", é relatado no log.

Solução: Verifique se há conflitos nas configurações de áudio (propriedades AudioSession). Por exemplo, ao sair de outra página com áudio, os recursos de áudio podem não ser liberados a tempo (a gravação ou reprodução de áudio relacionada não é interrompida prontamente).

Ocorre um erro ao usar o AliListPlayer para reproduzir um vídeo HLS (m3u8)

Versões do ApsaraVideo Player SDK anteriores à V5.4.5.0 não suportam o uso do player de lista AliListPlayer para reproduzir vídeos HLS (m3u8). As versões V5.4.5.0 e posteriores suportam a reprodução de vídeos HLS (m3u8), mas exigem a ativação do cache local. Cache local.

Impossibilidade de reproduzir um vídeo em segundo plano

Sintoma: O ApsaraVideo Player SDK for iOS não suporta reprodução em segundo plano por padrão. A demo também não reproduz vídeos em segundo plano.

Solução:

  1. Ative o recurso de coleta de dados em segundo plano no Xcode. No Xcode, selecione o target, abra a aba Capabilities, defina a opção Background Modes como ON e, na lista expandida de modos, selecione Audio, AirPlay, and Picture in Picture.

  2. Caso tenha implementado métodos de monitoramento de primeiro plano/segundo plano do aplicativo, comente os métodos relacionados de pausa e retomada.

    // Add an observer to detect when the app enters the background
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(applicationEnterBackground) name: UIApplicationWillResignActiveNotification object:nil];
    // This method is called when the app enters the foreground from the background
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(applicationDidBecomeActive) name: UIApplicationDidBecomeActiveNotification object:nil];
    
    // The pause method that needs to be commented out
    - (void)applicationEnterBackground {
       // [self.player pause];
    }
    // The restart method that needs to be commented out
    - (void)applicationDidBecomeActive {
       // [self.player start];
    }

O erro "Redirect to a url" ocorre ocasionalmente durante a reprodução de vídeo

Esse erro pode ocorrer porque a fonte de vídeo foi sequestrada. Ative o HTTPDNS no player para resolver isso. Configurar HTTPDNS para um cliente iOS.

Um erro unsupported protocol ocorre ao reproduzir um fluxo ARTC

Causa 1: A camada de ponte entre o player e o componente RTS (AlivcArtc) e o componente RTS (RtsSDK) não estão integrados, mesmo que o ApsaraVideo Player SDK esteja integrado.

Solução: Para obter informações sobre como integrar os componentes, consulte Implementar pull de fluxo RTS em um cliente iOS.

Causa 2: A versão da camada de ponte entre o player e o componente RTS (AlivcArtc) é inconsistente com a versão do player.

Solução: A camada de ponte (AlivcArtc) e o player devem ter o mesmo número de versão. Implementar pull de fluxo RTS em um cliente iOS.

Se um vídeo for transcodificado em múltiplas definições, qual definição o ApsaraVideo Player SDK reproduz por padrão?

O SDK reproduz a primeira definição disponível nesta ordem: FD, LD, SD, HD, 2K, 4K, OD. Definição.

Como especificar a definição padrão para reprodução de vídeo

Exemplo:

// The following code provides an example of playback using VidSts.
AVPVidStsSource *stsSource = [[AVPVidStsSource alloc] init];
stsSource.vid = @"<vid>";
stsSource.accessKeyId = @"<accessKeyId>";
stsSource.securityToken = @"<securityToken>";
stsSource.accessKeySecret = @"<accessKeySecret>";
stsSource.quality = @""; // The expected definition for playback. Valid values: FD, LD, SD, HD, 2K, 4K, and OD.
stsSource.forceQuality = NO; // Specifies whether to forcibly play the video in the expected definition. NO: The video is not forcibly played in the expected definition. The player searches for definitions in the default order and plays the video in the first definition that it finds. YES: The video is forcibly played in the expected definition. If the expected definition is not found, the video is not played.

Se uma definição tiver vários fluxos, qual fluxo o ApsaraVideo Player SDK reproduz?

Caso uma definição possua múltiplos fluxos, o ApsaraVideo Player SDK reproduzirá o fluxo mais recente.

Como configurar um vídeo para ser reproduzido sem marca d'água, mas baixado com marca d'água?

Transcodifique o vídeo em múltiplas definições. Reproduza a definição sem marca d'água e baixe a definição com marca d'água.

O modo paisagem não entra em vigor

O ApsaraVideo Player SDK for iOS não fornece um método para implementar o modo paisagem. Implemente esse recurso com base na API do sistema iOS. Ao implementar o modo paisagem, certifique-se de definir corretamente o frame de aliplayer.playerView.

Como obter logs

Envie logs ao solicitar suporte técnico da Alibaba Cloud para acelerar a resolução de problemas.

  1. Obtenha os logs.

    Defina o nível de log como LOG_LEVEL_TRACE antes de obter os logs. Obter logs do SDK.

  2. Forneça os logs gerados ao suporte técnico da Alibaba Cloud.

    Obter suporte técnico.