Todos os produtos
Search
Central de documentação

ApsaraVideo VOD:Android player FAQ

Última atualização: Jul 16, 2026

Problemas comuns e soluções para o ApsaraVideo Player SDK for Android.

Problemas relacionados à licença

Para resolver problemas de licença inválida ou expirada, consulte as Perguntas frequentes sobre licença.

Problemas comuns entre plataformas

Problemas de desenvolvimento

Obter o progresso atual da reprodução

Por padrão, o SDK do player relata o progresso da reprodução a cada 500 ms. Ajuste o intervalo de callback conforme necessário:

// Modify the callback interval.
PlayerConfig config = mAliyunLivePlayer.getConfig();
config.mPositionTimerIntervalMs = 100;// The callback interval in ms.
mAliyunLivePlayer.setConfig(config);

mAliPlayer.setOnInfoListener(new IPlayer.OnInfoListener() {
        @Override
        public void onInfo(InfoBean infoBean) {
        if(infoBean.getCode() == InfoCode.CurrentPosition){
            // The current playback progress.
            long currentPosition = infoBean.getExtraValue();
        }
    }
});

Obter dados brutos de áudio e vídeo

Para obter dados brutos de áudio e vídeo, alterne para decodificação via software e reproduza um vídeo não criptografado:

// Switch to software decoding.
mAliPlayer.enableHardwareDecoder(false);
IPlayer.RenderFrameCallbackConfig renderFrameCallbackConfig = new IPlayer.RenderFrameCallbackConfig();
// Specifies whether to return only the underlying video data address. Default value: true.
renderFrameCallbackConfig.mVideoDataAddr = false;
// Specifies whether to return only the underlying audio data address. Default value: false.
renderFrameCallbackConfig.mAudioDataAddr = false;
mAliPlayer.setRenderFrameCallbackConfig(renderFrameCallbackConfig);

mAliPlayer.setOnRenderFrameCallback(new IPlayer.OnRenderFrameCallback() {
    @Override
    public boolean onRenderFrame(FrameInfo frameInfo) {
        return false;
    }
});

Obter a largura e altura do vídeo

Obtenha a largura e a altura do vídeo usando um destes métodos:

  • Após a instância AliPlayer entrar no estado prepared:

    mAliyunPlayer.setOnPreparedListener(new IPlayer.OnPreparedListener() {
        @Override
        public void onPrepared() {
              mAliyunPlayer.getVideoWidth();
                  mAliyunPlayer.getVideoHeight();
        }
    });
  • Escute o callback de alteração de tamanho do vídeo:

    mAliyunPlayer.setOnVideoSizeChangedListener(new IPlayer.OnVideoSizeChangedListener() {
        @Override
        public void onVideoSizeChanged(int width, int height) {
    
        }
    });
  • Use as informações da faixa:

    mAliyunPlayer.setOnTrackReadyListener(new IPlayer.OnTrackReadyListener() {
        @Override
        public void onTrackReady(MediaInfo mediaInfo) {
        List<TrackInfo> trackInfos = mediaInfo.getTrackInfos();
            for (TrackInfo trackInfo : trackInfos) {
            if(trackInfo.getType() == TrackInfo.Type.TYPE_VIDEO){
            trackInfo.getVideoWidth();
            trackInfo.getVideoHeight();
            }
        }
        }
    });

Obter dados de pixels de cada quadro de vídeo

Obtenha os dados de pixels escutando o callback OnRenderFrameCallback:

player.setOnRenderFrameCallback(frameInfo -> {
    if (frameInfo.frameType == FrameInfo.FrameType_video) {
        // Video data
    } else {
        // Audio data
    }
    return false;
});

Lógica de troca automática de taxa de bits

Ao chamar mAliPlayer.selectTrack(TrackInfo.AUTO_SELECT_INDEX) para ativar a troca automática de taxa de bits, o SDK do player calcula a velocidade da rede. Se a velocidade sustentar o próximo nível de taxa de bits por 10 segundos, o player faz a troca. Caso contrário, permanece na taxa de bits atual.

  • De alta para baixa: se a velocidade da rede atingir o próximo nível de taxa de bits em até 10 segundos, o player termina o conteúdo em cache de alta taxa de bits antes de trocar.

  • De baixa para alta: o player troca imediatamente assim que a velocidade sustenta a taxa de bits mais alta por 10 segundos.

Para usar a troca automática de taxa de bits, transcodifique o vídeo em um fluxo de taxa de bits adaptável no console e configure o player para recuperá-lo. Exemplo com VidAuth:

VidAuth vidAuth = new VidAuth();
List<Definition> list = new ArrayList<>();
list.add(Definition.DEFINITION_AUTO);
vidAuth.setDefinition(list);

Lógica de nova tentativa personalizada

Por padrão, o SDK do player tenta novamente duas vezes com um tempo limite de rede de 15 segundos por tentativa. Se ambas falharem, um callback Error será acionado.

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

PlayerConfig config = mAliPlayer.getConfig();
// 1. Set the number of retries. In this example, it is set to 0.
config.mNetworkRetryCount = 0;
mAliPlayer.setConfig(config);

mAliPlayer.setOnInfoListener(new IPlayer.OnInfoListener() {
    @Override
    public void onInfo(InfoBean infoBean) {
        // 2. Listen for the retry event.
       if(infoBean.getCode() == InfoCode.NetworkRetry){
            // TODO: Process the logic as needed.
        }
    }
});

Ocorre um erro unsupported protocol durante a reprodução de fluxo ARTC

Causa 1: O SDK do player está integrado, mas a camada de ponte (AlivcArtc) e o componente Real-Time Streaming (RTS) (RtsSDK) não estão.

Solução: Integre os componentes necessários. Implementar pull de fluxo RTS no Android.

Causa 2: A versão da camada de ponte (AlivcArtc) não corresponde à versão do player.

Solução: Garanta que a camada de ponte (AlivcArtc) e o player usem a mesma versão. Implementar pull de fluxo RTS no Android.

Causa 3: O componente RTS (RtsSDK) não foi carregado.

Solução: Carregue o componente RTS (RtsSDK) no arquivo Application ou na Activity de destino, conforme necessário.

static {
    System.loadLibrary("RtsSDK");
}

Causa 4: A versão minSDK é muito alta e a camada de ponte (AlivcArtc) não foi carregada corretamente.

// 1. Modify minSdk
Downgrade minSdk to 21

// 2. Manually load the ARTC library
static {
    System.loadLibrary("RtsSDK");
    System.loadLibrary("cicada_plugin_artcSource");
}

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

Causa: O player usa busca imprecisa por padrão e inicia a reprodução a partir do keyframe mais próximo.

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

Como alternar entre os modos de busca precisa e imprecisa

Alterne entre os modos de busca:

// Inaccurate seek.
mAliPlayer.seekTo(1000);
mAliPlayer.seekTo(1000, IPlayer.SeekMode.Inaccurate);
// Accurate seek.
mAliPlayer.seekTo(1000,IPlayer.SeekMode.Accurate);

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

Causa: Se a distância do ponto de busca até o keyframe mais próximo exceder o intervalo máximo de busca precisa, o SDK do player reverte para busca imprecisa, fazendo com que a barra de progresso salte.

Solução: Aumente o intervalo máximo de busca precisa para reduzir a reversão para busca imprecisa. Um intervalo maior melhora a precisão, mas pode aumentar o tempo de busca:

// Unit: ms.
mAliPlayer.setMaxAccurateSeekDelta(10000);

Cache local: É possível definir o diretório de cache para o armazenamento interno?

Sim. Defina o diretório de cache para o armazenamento interno, mas garanta que o aplicativo tenha as permissões de acesso necessárias.

Ocorre um erro encrypt check fail durante o cache de vídeo

Se o download seguro estiver ativado, o arquivo de verificação de criptografia deve corresponder às informações do seu aplicativo. Baixe o arquivo em Download offline e salve-o no SDK do player. Download de vídeo. Arquivos incompatíveis causam falhas no cache ou no download.

Problemas de reprodução

Ocorre um crash ao criar o player

Solucione o problema da seguinte forma:

  1. Verifique se a arquitetura da CPU é x86.

    O SDK do player suporta apenas as arquiteturas arm64-v8a e armeabi-v7a. Ele não suporta a arquitetura x86.

  2. Confira se tanto os arquivos .so quanto as dependências Maven do SDK do player estão integrados no projeto.

    Por exemplo, você pode ter integrado o SDK do player usando uma dependência Maven no build.gradle e também integrado as bibliotecas dinâmicas relacionadas ao player no diretório libs do módulo do projeto.

    Recomendação: Remova as bibliotecas dinâmicas e use apenas a dependência Maven. Se for obrigatório usar bibliotecas dinâmicas, garanta que todos os arquivos .so sejam da mesma versão. Integrar o SDK. Os seguintes arquivos de biblioteca dinâmica estão relacionados ao player: libalivcffmpeg.so, libsaasCorePlayer.so e libsaasDownloader.so.

  3. Se você integrou um pacote parcial, confirme se a dependência de versão do AlivcFFmpeg está correta.

    Para obter informações sobre as dependências de versão do AlivcFFmpeg, consulte Dependências de versão do AlivcFFmpeg.

Ocorre um crash enquanto o player está em execução

Solucione o problema da seguinte forma:

  1. Confirme se o crash ocorreu no SDK do player.

    Procure por uma pilha de crash com o prefixo AliyunPlayer. Se existir uma pilha com esse prefixo, o problema está no SDK do player.

  2. Atualize para a versão mais recente do SDK do player e verifique se o problema foi corrigido.

  3. Se o problema persistir, colete arquivos de crash (incluindo todas as threads), logs de crash e detalhes do cenário. Como recuperar logs de problemas.

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

Solucione o problema da seguinte forma:

  1. Verifique se o próprio vídeo de origem possui barras pretas.

  2. Ajuste o modo de dimensionamento do player usando a seguinte interface:

    /*
    SCALE_ASPECT_FILL: Fills the screen proportionally. The video is cropped.
    SCALE_ASPECT_FIT: Scales the video proportionally. Black bars may appear.
    SCALE_TO_FILL: Fills the screen without maintaining proportions. The video is distorted.
    */
    mAliPlayer.setScaleMode();
  3. Caso o modo de dimensionamento não atenda às suas necessidades, ajuste o tamanho do SurfaceView ou TextureView na camada de aplicação.

O áudio toca, mas nenhum vídeo aparece

Solucione o problema da seguinte forma:

  1. Reproduza o vídeo com outro player para verificar se é um arquivo apenas de áudio.

  2. Verifique se a visualização de exibição está configurada corretamente e não foi removida da interface de reprodução. Configure a visualização de exibição conforme descrito na Etapa 4 de Recursos básicos.

Ocorre um erro Invalid argument ao reproduzir um vídeo local com permissões de leitura

Verifique o nome do arquivo e o caminho absoluto. Evite combinar caracteres chineses e espaços no caminho.

Ocorre um erro Permission denied ao reproduzir um vídeo local com permissões de leitura

No Android 10 (Android Q) ou posterior, adicione android:requestLegacyExternalStorage="true" à tag application no AndroidManifest.xml para lidar com o recurso de armazenamento com escopo.

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

Esse erro pode ocorrer devido a sequestro de DNS. Ative o HTTPDNS para resolvê-lo. Configurar HTTPDNS para Android.

Uma barra de notificação preta pisca em telas com notch durante a reprodução em tela cheia

Resolva isso definindo uma barra de status imersiva.

Falha ao reproduzir um vídeo MOV

O SDK do player suporta vídeos MOV. A reprodução pode falhar se o átomo moov estiver localizado após o átomo mdat no arquivo de origem. Transcodifique o vídeo para mover o átomo moov antes do átomo mdat. Etapa 2: Solucionar problemas do fluxo.

Ocorre um erro durante a inicialização ou reprodução, indicando que a biblioteca dinâmica .so do SDK do player não foi encontrada

Solucione o problema da seguinte forma:

  1. Verifique se a arquitetura da CPU atende aos requisitos.

    O SDK do player suporta bibliotecas dinâmicas apenas para as arquiteturas arm64-v8a e armeabi-v7a.

  2. Verifique se a versão do SDK do player é muito antiga.

    Se você estiver usando o SDK do player V5.4.6.0-full ou anterior, atualize para V5.4.6.0-full-15467853 ou posterior. Notas de lançamento do SDK para Android.

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

O player de lista AliListPlayer suporta vídeos HLS (m3u8) a partir da versão V5.4.5.0, mas o cache local deve estar ativado. Cache local.

O SDK do player Android suporta a reprodução de vídeos das pastas assets e raw em um projeto Android?

Não. Copie o vídeo para o armazenamento do dispositivo e use o caminho absoluto para reprodução.

Ocorre um erro 403 e a reprodução falha após configurar o cache local para um fluxo de vídeo HLS

Sintoma: Ao reproduzir um fluxo de vídeo HLS (M3U8) usando o método de reprodução VidAuth com cache local ativado, a reprodução falha e um erro 403 é relatado.

Causa: Com o cache local ativado, se você sair da reprodução antes que o vídeo seja totalmente armazenado em cache, a parte não armazenada será solicitada usando as informações VidAuth expiradas da sessão anterior na próxima vez que você iniciar a reprodução. Isso causa uma falha de autenticação e um erro 403.

Solução: Para o SDK do player V5.5.4.0 e posterior, se a URL de reprodução do vídeo contiver parâmetros de autenticação e o protocolo de reprodução for HLS, você pode definir o campo PlayerConfig.mEnableStrictAuthMode para selecionar um modo de autenticação diferente. O valor padrão é false.

  • Autenticação não estrita (false): A autenticação é armazenada em cache. Se apenas parte da mídia foi armazenada anteriormente, o player usa a autenticação em cache para solicitações subsequentes. Se a autenticação da URL tiver um curto período de validade ou a reprodução for retomada após uma longa pausa, a autenticação pode expirar. Integre com fontes de reprodução com atualização automática para lidar com a expiração da autenticação.

  • Autenticação estrita (true): A autenticação não é armazenada em cache. A autenticação ocorre em cada inicialização, causando falha na inicialização sem rede.

O SDK do player Android suporta reprodução durante o download?

Não. O SDK do player armazena em cache e baixa arquivos de vídeo durante a reprodução quando o cache local está ativado. Arquivos em cache são reproduzidos diretamente nas reproduções subsequentes. Não há suporte para mover arquivos em cache de seu diretório original.

O SDK do player Android suporta obter a velocidade de buffer de um vídeo?

Sim. O SDK do player fornece velocidade de buffer, taxa de quadros de renderização em tempo real, taxas de bits de áudio e vídeo e taxa de bits de download de rede. Obter informações de reprodução.

Reprodução anormal de vídeo HDR

Atualmente, o SDK do player não suporta vídeos HDR com ângulos de rotação. Podem ocorrer erros de reprodução para esses vídeos.

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

A ordem de reprodução padrão é FD, LD, SD, HD, 2K, 4K, OD. Definição. O SDK do player reproduz a primeira definição disponível nesta ordem.

Como especificar a definição de reprodução padrão

Exemplo:

// The VidSts playback method is used as an example.
VidSts vidSts = new VidSts();
// The code for setting parameters such as vid, AccessKeyId, AccessKeySecret, and token is omitted. For more information, see the player creation settings in the Basic Features topic.
/*
    Parameter 1: The desired playback definition. Valid values: FD, LD, SD, HD, 2K, 4K, and OD.
    Parameter 2: Specifies whether to enforce playback of the desired definition. false: Does not enforce playback of the desired definition. The player SDK searches for a definition to play based on the default order. true: Enforces playback of the desired definition. If the desired definition is not found, the video is not played.
*/
vidSts.setQuality("",false);

Se uma definição tiver múltiplos fluxos, qual fluxo o SDK do player reproduz?

Se uma definição tiver múltiplos fluxos, o SDK do player reproduz o fluxo mais recente.

Outros problemas

Como reproduzir um vídeo sem marca d'água, mas baixá-lo 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.

Como obter logs de problemas

Envie logs de problemas para ajudar o suporte técnico da Alibaba Cloud a resolver seu problema mais rapidamente.

  1. Recupere os logs de problemas.

    Defina o nível de log como AF_LOG_LEVEL_TRACE antes de coletar os logs. Obter logs do SDK.

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