Todos os produtos
Search
Central de documentação

ApsaraVideo VOD:Basic features of ApsaraVideo Player SDK for Android

Última atualização: Sep 22, 2026

Este tópico descreve como usar os recursos básicos do ApsaraVideo Player SDK para Android. Configure as sources de reprodução, ajuste o volume e a velocidade de reprodução, alternar resoluções e faixas de áudio, entre outros recursos.

Importante

Execute e teste a demo: acesse Baixe o ApsaraVideo Player SDK e siga as instruções em Explore the demo para compilar e execute a demo.

Configure uma source de vídeo

O ApsaraVideo Player SDK para Android suporta reprodução de vídeo sob demanda (VOD) e transmissão ao vivo.

  • Métodos de reprodução VOD: VidAuth (recomendado para usuários do ApsaraVideo VOD), VidSts, UrlSource e reprodução criptografada.

  • Métodos de reprodução de transmissão ao vivo: UrlSource e reprodução criptografada.

Nota
  • O UrlSource reproduz mídia a partir de uma URL. O VidSts e o VidAuth reproduzem mídia pelo ID da mídia (Vid).

  • Para obter informações sobre as regiões compatíveis, consulte ApsaraVideo VOD region IDs.

Reprodução VOD

VidAuth (Recomendado)

Para reproduzir um vídeo VOD usando o VidAuth, defina a propriedade vid como o ID da mídia e a propriedade playAuth como a credencial de reprodução.

  • ID da mídia: Obtenha o ID da mídia após o upload de um arquivo de mídia. No console do ApsaraVideo VOD, escolha Media Files > Audio/Video. Também é possível chamar a API SearchMedia.

  • Credencial de reprodução: Chame a operação GetVideoPlayAuth para obter a credencial de reprodução. Recomendamos a integração do SDK de servidor do ApsaraVideo VOD para evitar a geração manual de assinaturas. Para obter exemplos, consulte o OpenAPI Explorer.

Recomendamos o VidAuth em vez do VidSts para usuários do ApsaraVideo VOD, pois o VidAuth oferece melhor usabilidade e segurança. Para obter mais informações, consulte Credential method vs. STS method.

Ative o repasse de parâmetros de criptografia HLS no console do ApsaraVideo VOD, e o nome padrão do parâmetro será MtsHlsUriToken. Para obter mais informações, consulte Parameter pass-through for HLS encryption.

Código de exemplo:

VidAuth vidAuth = new VidAuth();
vidAuth.setVid("Vid");                 // Required. The video ID (VideoId).
vidAuth.setPlayAuth("<yourPlayAuth>"); // Required. The playback credential from GetVideoPlayAuth.
vidAuth.setRegion("region-id");        // Deprecated for SDK V5.5.5.0 and later. The player automatically parses the region. For earlier versions, this parameter is required. Default: cn-shanghai.
   // vidAuth.setAuthTimeout(3600);    // Optional. Set the validity period of the playback URL in seconds. This value overwrites the validity period configured in the ApsaraVideo VOD console. Default: 3600. Make sure that the value is greater than the video duration to prevent URL expiration during playback.
        
   // If you enable HLS encryption parameter pass-through in the ApsaraVideo VOD console, the default parameter is MtsHlsUriToken. Specify config and pass it with your VidAuth data source.
   VidPlayerConfigGen vidConfig = new VidPlayerConfigGen();
   vidConfig.setMtsHlsUriToken("<yourMtsHlsUriToken>");
   vidAuth.setPlayerConfig(config);
   aliPlayer.setDataSource(vidAuth);

VidSts

A reprodução com VidSts usa credenciais temporárias do STS em vez de credenciais de reprodução VOD. Antes de reproduzir vídeos VOD usando o VidSts, obtenha um token STS e um par AccessKey (AccessKeyID e AccessKeySecret). Para obter mais informações, consulte Obtain an STS token.

Ative o repasse de parâmetros de criptografia HLS no console do ApsaraVideo VOD, e o nome padrão do parâmetro será MtsHlsUriToken. Para obter mais informações, consulte Parameter pass-through for HLS encryption.

Código de exemplo:

VidSts vidSts = new VidSts();
       vidSts.setVid("Vid");                               // Required. The video ID (VideoId).
       vidSts.setAccessKeyId("<yourAccessKeyId>");         // Required. The temporary AccessKey ID from STS (AssumeRole).
       vidSts.setAccessKeySecret("<yourAccessKeySecret>"); // Required. The temporary AccessKey secret from STS (AssumeRole).
       vidSts.setSecurityToken("<yourSecurityToken>");     // Required. The STS token from AssumeRole.
       vidSts.setRegion("RegionID");                       // Required. The ApsaraVideo VOD region. Default: cn-shanghai.
       // vidSts.setAuthTimeout(3600);                     // Optional. Set the validity period of the playback URL in seconds. This value overwrites the validity period configured in the ApsaraVideo VOD console. Default: 3600. Make sure that the value is greater than the video duration to prevent URL expiration during playback.
        
       // If you enable HLS encryption parameter pass-through in the ApsaraVideo VOD console, the default parameter is MtsHlsUriToken. Specify config and pass it with your vidSts data source.
       // If it is not enabled, the following configuration is not neccessary.
       VidPlayerConfigGen vidConfig = new VidPlayerConfigGen();
       vidConfig.setMtsHlsUriToken("<yourMtsHlsUriToken>");
       vidSts.setPlayerConfig(config);
       aliPlayer.setDataSource(vidSts);

UrlSource

Para reproduzir um vídeo VOD usando o UrlSource, passe a URL de reprodução diretamente.

  • Chame a operação GetPlayInfo para obter URLs de reprodução do ApsaraVideo VOD. Recomendamos a integração do SDK de servidor do ApsaraVideo VOD. Para obter exemplos, consulte o OpenAPI Explorer.

  • Para arquivos locais, certifique-se de ter permissão para acessar o arquivo. Use caminhos completos, como /sdcard/video/sample.mp4 ou content://media/video/123.

 UrlSource urlSource = new UrlSource();
        urlSource.setUri("your-playback-url"); // Required. A VOD URL, third-party URL, or local file path.
        aliPlayer.setDataSource(urlSource);

Reprodução criptografada

Os vídeos VOD suportam criptografia HLS, criptografia proprietária da Alibaba Cloud e criptografia DRM. Para a reprodução, consulte Play an encrypted video.

Reprodução de transmissão ao vivo

Para reproduzir transmissões ao vivo, consulte Standard live streaming playback.

Controlar a reprodução

O ApsaraVideo Player SDK para Android fornece métodos para iniciar, pausar, parar e buscar posições na reprodução.

Preparar o player

Chame prepare para carregar e analisar os dados da mídia.

aliPlayer.prepare();

Iniciar a reprodução

Chame start para iniciar ou retomar a reprodução.

aliPlayer.start();

Buscar uma posição

Chame seekTo para saltar para uma posição específica. Esse método é útil quando o usuário arrasta a barra de progresso ou retoma a reprodução de uma posição salva.

// Specify the target time in milliseconds.
aliPlayer.seekTo(long position);

Especifique a posição inicial de reprodução antes de chamar prepare, use setStartTime. Essa configuração entra em vigor apenas uma vez por chamada de prepare e é limpa automaticamente depois.

// Set the start position in milliseconds. seekMode specifies accurate or inaccurate seeking.
aliPlayer.setStartTime(time, seekMode);

Pausar a reprodução

Chame pause para pausar a reprodução.

aliPlayer.pause();

Parar a reprodução

Chame stop para parar a reprodução.

aliPlayer.stop();

Desvincular a visualização do player

Após parar a reprodução e antes de destruir a instância do player, desvincule a visualização do player para liberar recursos de renderização e evitar vazamentos de memória. Escolha o método de desvinculação de acordo com o tipo de visualização do player em uso.

SurfaceView / TextureView

Chame setSurface com null para desvincular.

// Unbind the player view
aliPlayer.setSurface(null);

AliDisplayView

Chame setDisplayView com null para desvincular.

// Unbind the player view
aliPlayer.setDisplayView(null);
Nota

Desvincule a visualização do player após chamar stop e antes de chamar release ou releaseAsync. A sequência completa de fim de reprodução é: stop → desvincular visualização → release / releaseAsync.

Destruir o player

Destrua o player de forma síncrona ou assíncrona.

// Synchronous destroy. Blocks until player resources are released. Automatically calls stop.
aliPlayer.release();
// Asynchronous destroy. Returns immediately. Automatically calls stop.
aliPlayer.releaseAsync();
Nota

Se tiver requisitos rigorosos quanto à velocidade de resposta da interface do usuário, use releaseAsync. Observe o seguinte:

  • Não execute nenhuma operação no objeto do player durante a destruição assíncrona.

  • A destruição assíncrona inclui um processo de parada assíncrona. Não é necessário parar o player manualmente antes de chamar releaseAsync.

Monitorar o status do player

O ApsaraVideo Player SDK para Android fornece listeners para monitorar eventos de reprodução e alterações de status.

Defina listeners

Defina vários listeners para o player. Recomendamos definir os listeners OnErrorListener, OnCompletionListener, OnLoadingStatusListener e OnInfoListener.

aliPlayer.setOnErrorListener(new IPlayer.OnErrorListener() {
    // This callback is triggered if an error occurs when you use the player.

    @Override
    public void onError(ErrorInfo errorInfo) {
        ErrorCode errorCode = errorInfo.getCode(); // The error code.
        String errorMsg = errorInfo.getMsg(); // The error message.
        // errorExtra provides extra error information in a JSON string. For example:
        //{ "Url": "xxx",
   		//	"Module": "NetWork",
    	//	"ModuleCode": "-377",
   		//  "ModuleMessage": "Redirect to a url that is not a media"}
        // Note that the value of ModuleCode is not always the same as the value of errorCode.
        String errorExtra= errorInfo.getExtra();         
        // Stop the player after an error occurs.
        aliPlayer.stop();
    }
});
aliPlayer.setOnPreparedListener(new IPlayer.OnPreparedListener() {
    // After you call the aliPlayer.prepare() method, the player starts to read and parse data. This callback is triggered after the data is parsed.

    @Override
    public void onPrepared() {
        // The player is prepared.
    }
});
aliPlayer.setOnCompletionListener(new IPlayer.OnCompletionListener() {
    // This callback is triggered after the playback is complete.
    @Override
    public void onCompletion() {
        // In most cases, you can call the stop method to stop the playback.
        aliPlayer.stop();
    }
});
aliPlayer.setOnInfoListener(new IPlayer.OnInfoListener() {
    // The information about the player, such as the current playback position and the buffered position.
    @Override
    public void onInfo(InfoBean infoBean) {
        InfoCode code = infoBean.getCode(); // The information code.
        String msg = infoBean.getExtraMsg();// The information content.
        long value = infoBean.getExtraValue(); // The information value.

        // The current playback position: InfoCode.CurrentPosition.
        // The buffered position: InfoCode.BufferedPosition.
    }
});
aliPlayer.setOnLoadingStatusListener(new IPlayer.OnLoadingStatusListener() {
    // The loading status of the player. You can use this to display a loading screen when the network connection is poor.

    @Override
    public void onLoadingBegin() {
        // The player starts to load data. The video and audio are not ready for playback.
        // In most cases, you can display a circular loading indicator.
    }

    @Override
    public void onLoadingProgress(int percent, float netSpeed) {
        // The loading progress in percentage and the network speed.
        // The network speed is a reserved field. The value is 0.
    }

    @Override
    public void onLoadingEnd() {
        // The player stops loading data. The video and audio are ready for playback.
        // In most cases, you can hide the circular loading indicator.
    }
});

Monitorar alterações no estado de reprodução

Use o callback onStateChanged para monitorar as transições de estado do player.

aliPlayer.setOnStateChangedListener(new IPlayer.OnStateChangedListener() {
    @Override
    public void onStateChanged(int newState) {
        /*
          int idle = 0;
          int initalized = 1;
          int prepared = 2;
          int started = 3;
          int paused = 4;
          int stopped = 5;
          int completion = 6;
          int error = 7;
      */
    }
});

Configure a exibição de vídeo

Configure o dimensionamento, a rotação e o espelhamento do vídeo durante a reprodução.

Modo de dimensionamento

O SDK suporta três modos de dimensionamento:

// Scale to fit the view while maintaining the aspect ratio (letterboxing).
aliPlayer.setScaleMode(ScaleMode.SCALE_ASPECT_FIT);
// Scale to fill the view while maintaining the aspect ratio (cropping).
aliPlayer.setScaleMode(ScaleMode.SCALE_ASPECT_FILL);
// Stretch to fill the view. The aspect ratio is not maintained. Image distortion may occur.
aliPlayer.setScaleMode(ScaleMode.SCALE_TO_FILL);

Rotação

Chame setRotateMode para girar o vídeo. Consulte o ângulo de rotação atual com getRotateMode.

// No rotation.
aliPlayer.setRotateMode(RotateMode.ROTATE_0);
// 90° clockwise.
aliPlayer.setRotateMode(RotateMode.ROTATE_90);
// 180° clockwise.
aliPlayer.setRotateMode(RotateMode.ROTATE_180);
// 270° clockwise.
aliPlayer.setRotateMode(RotateMode.ROTATE_270);
// Query the current rotation angle.
aliPlayer.getRotateMode();

Espelhamento

Chame setMirrorMode para espelhar o vídeo. O SDK suporta espelhamento horizontal e vertical:

// No mirroring.
aliPlayer.setMirrorMode(MirrorMode.MIRROR_MODE_NONE);
// Horizontal mirroring.
aliPlayer.setMirrorMode(MirrorMode.MIRROR_MODE_HORIZONTAL);
// Vertical mirroring.
aliPlayer.setMirrorMode(MirrorMode.MIRROR_MODE_VERTICAL);

Obter informações de reprodução

Obtenha o progresso da reprodução, a duração e o progresso do buffer durante a reprodução.

Progresso da reprodução

No callback onInfo, chame getExtraValue para recuperar a posição atual de reprodução em milissegundos.

aliPlayer.setOnInfoListener(new IPlayer.OnInfoListener() {
    @Override
    public void onInfo(InfoBean infoBean) {
        if(infoBean.getCode() == InfoCode.CurrentPosition){
            // The current playback position in milliseconds.
            long extraValue = infoBean.getExtraValue();
        }
    }
});

Duração total

A duração do vídeo só fica disponível após o carregamento da mídia. Chame getDuration após o acionamento do callback onPrepared.

long duration = aliPlayer.getDuration();

Duração real da reprodução

Recupere a duração real da reprodução em tempo real. Esse valor exclui o tempo em que a reprodução estiver pausada ou em buffer.

long playedDuration = aliPlayer.getPlayedDuration(); 

Progresso do buffer

No callback onInfo, verifique InfoCode.BufferedPosition para obter o progresso atual do buffer.

aliPlayer.setOnInfoListener(new IPlayer.OnInfoListener() {
    @Override
    public void onInfo(InfoBean infoBean) {
        if(infoBean.getCode() == InfoCode.BufferedPosition){
            // The current buffering progress in milliseconds.
            long extraValue = infoBean.getExtraValue();
        }
    }
});

Métricas de renderização e taxa de bits em tempo real

Obtenha a taxa de quadros de renderização, a taxa de bits de áudio e vídeo e a taxa de bits de downstream da rede em tempo real.

// Video rendering frame rate. Returns a float value.
aliPlayer.getOption(IPlayer.Option.RenderFPS);
// Video bitrate. Returns a float value in bit/s.
aliPlayer.getOption(IPlayer.Option.VideoBitrate);
// Audio bitrate. Returns a float value in bit/s.
aliPlayer.getOption(IPlayer.Option.AudioBitrate);
// Network downstream bitrate. Returns a float value in bit/s.
aliPlayer.getOption(IPlayer.Option.DownloadBitrate);

Lidar com eventos de dessincronização de A/V

Em condições extremas, como decodificação por software durante a reprodução 4K ou reprodução em alta velocidade de fluxos HD H.265 em dispositivos de baixo desempenho, o desempenho da decodificação pode não acompanhar a velocidade de reprodução. O SDK aciona um callback para notificá-lo sobre esse evento.

aliPlayer.setOnAVNotSyncStatusListener(new IPlayer.OnAVNotSyncStatusListener() {
    @Override
    public void onAVNotSyncStart(int type) {
        if (type == 0) {
            //Reduce the playback speed to recover.
            if (aliPlayer.getSpeed() > 1) {
                aliPlayer.setSpeed(1);
            }
        }
        Toast.makeText(getContext(), "Out-of-sync detected" , Toast.LENGTH_SHORT).show();
    }

    @Override
    public void onAVNotSyncEnd() {
        Toast.makeText(getContext(), "Out-of-sync resolved" , Toast.LENGTH_SHORT).show();
    }
});

Controlar o volume

Alterar o volume

Chame setVolume para alterar o volume. Os valores válidos variam de 0 a 2, onde 1 é o volume original. Valores maiores que 1 amplificam o áudio e podem introduzir ruído. Recomendamos não definir o volume com valor maior que 1.

// Set the volume. Valid values: 0 to 2.
aliPlayer.setVolume(1f);
// Get the current volume.
aliPlayer.getVolume();

Silenciar o player

Chame setMute para silenciar ou ativar o som do player.

aliPlayer.setMute(true); 

Defina a velocidade de reprodução

Chame setSpeed para alterar a velocidade de reprodução. Os valores válidos variam de 0.5 a 5. O tom do áudio permanece inalterado em diferentes velocidades.

// Common speeds: 0.5x, 1x, 1.5x, 2x.
aliPlayer.setSpeed(1.0f);

Alternar resoluções

Nota

Para exemplos de código detalhados, consulte o módulo MultiResolution no projeto API-Example.

Transmissão ao vivo baseada em UrlSource

Para obter mais informações, consulte Standard live streaming playback.

Reprodução baseada em VidAuth ou VidSts

Se usar VidAuth ou VidSts para reprodução VOD, o SDK recupera automaticamente as definições de vídeo do ApsaraVideo VOD. Não é necessária nenhuma configuração adicional.

Consultar definições disponíveis

Após o carregamento do vídeo, recupere as definições disponíveis.

// Retrieve all available track.
List<TrackInfo> trackInfos = aliPlayer.getMediaInfo().getTrackInfos();
//Retrieve the available definitions.
for (TrackInfo trackInfo : trackInfos) {
     if(trackInfo.getType() == TrackInfo.Type.TYPE_VOD){
             // Get video definition. 
        String vodDefinition = trackInfo.getVodDefinition();
     }
}

Alternar a definição

Chame selectTrack com o índice da faixa para alternar as definições. Obtenha o índice do objeto TrackInfo.

aliPlayer.selectTrack(index);

Monitorar eventos de alternância de definição

Defina um listener para receber notificações quando a alternância de definição tiver êxito ou falhar.

aliPlayer.setOnTrackChangedListener(new IPlayer.OnTrackChangedListener() {
    @Override
    public void onChangedSuccess(TrackInfo trackInfo) { }

    @Override
    public void onChangedFail(TrackInfo trackInfo, ErrorInfo errorInfo) { }
});

Ative a alternância rápida

Ative o modo de alternância rápida, e as chamadas para selectTrack responderão imediatamente sem aguardar o buffer.

PlayerConfig config = aliPlayer.getConfig();
config.mSelectTrackBufferMode = 1;
aliPlayer.setConfig(config)

Ative a reprodução em loop

Chame setLoop para ativar a reprodução em loop. Quando a reprodução chegar ao fim, ela reiniciará automaticamente do início.

aliPlayer.setLoop(true);

O SDK aciona o callback onInfo quando a reprodução em loop reinicia.

aliPlayer.setOnInfoListener(new IPlayer.OnInfoListener() {
    @Override
    public void onInfo(InfoBean infoBean) {
        if (infoBean.getCode() == InfoCode.LoopingStart){
            //Loop playback restarted.
        }
    }
});

Alternar faixas de áudio

O ApsaraVideo Player SDK para Android suporta a alternância de faixas de áudio, permitindo alternar entre faixas de áudio em diferentes idiomas durante a reprodução.

Tipos de fluxo suportados

É possível alternar faixas de áudio nos seguintes tipos de fluxo. O comportamento de alternância varia de acordo com o tipo de fluxo.

Tipo de fluxo

Extensão

Número de taxas de bits

Tipo de subfluxo

Comportamento de alternância

Fluxo não-lista (MP4)

.mp4

1

Uma faixa de vídeo, várias faixas de áudio e de legendas

Você pode alternar entre faixas de áudio.

HLS misto de taxa de bits única

.m3u8

1

Uma faixa de vídeo, várias faixas de áudio e de legendas

Você pode alternar entre faixas de áudio.

HLS de taxa de bits única

.m3u8

1

Subfluxos separados de vídeo, áudio e legendas

Você pode alternar entre faixas de áudio.

HLS misto de múltiplas taxas de bits

.m3u8

n

Subfluxos com diferentes taxas de bits, cada um com uma faixa de vídeo e várias faixas de áudio

É possível alternar apenas entre subfluxos, e não entre faixas de áudio dentro de um subfluxo.

Exemplo de uso

  1. Defina o callback onSubTrackReady. Esse callback geralmente é acionado antes do callback onPrepared.

    aliPlayer.setOnSubTrackReadyListener(new IPlayer.OnSubTrackReadyListener() {
        @Override
        //onSubTrackReady. Typically triggered before the onPrepared callback.
        public void onSubTrackReady(MediaInfo mediaInfo) {
            if (mPlayerTrackFragment != null) {
                //mPlayerTrackFragment.showMediaInfo();
                // Call getSubMediaInfo after this callback is triggered. Calling it before this callback returns an empty result.
                MediaInfo subMediaInfo = aliPlayer.getSubMediaInfo();
                TrackInfos = subMediaInfo.getTrackInfos();
                // Find the target audio track from the track list.
                myTrack = myfunc(TrackInfos)
            }
        }
    });
  2. Alterne para a faixa de áudio de destino.

    index = myTrack.getIndex();
    aliPlayer.selectTrack(index);

Usar miniaturas

Nota

Para exemplos de código detalhados, consulte o módulo Thumbnail no projeto API-Example.

Antes de usar miniaturas, configure snapshots de sprite para o seu vídeo. No console do ApsaraVideo VOD, crie um modelo de snapshot com Image Sprite como o tipo de snapshot e, em seguida, crie um fluxo de trabalho para processar o vídeo. Para obter mais informações, consulte Video snapshots.

mAliPlayer.setOnPreparedListener(new IPlayer.OnPreparedListener() {
    @Override
    public void onPrepared() {
        // 1. Create a ThumbnailHelper instance with the sprite snapshot URL.
        ThumbnailHelper mThumbnailHelper = new ThumbnailHelper(URL);
        // 2. Set listeners.
        mThumbnailHelper.setOnPrepareListener(new ThumbnailHelper.OnPrepareListener() {
            @Override
            public void onPrepareSuccess() {
                // 4. After the thumbnail is loaded, request thumbnails at specific positions.
            }
            @Override
            public void onPrepareFail() {}
        });

        mThumbnailHelper.setOnThumbnailGetListener(new ThumbnailHelper.OnThumbnailGetListener() {
            @Override
            public void onThumbnailGetSuccess(long positionMs, ThumbnailBitmapInfo thumbnailBitmapInfo) {
                // 5. Get the thumbnail bitmap at the specified position.
                Bitmap thumbnailBitmap = thumbnailBitmapInfo.getThumbnailBitmap();
            }
            @Override
            public void onThumbnailGetFail(long positionMs, String errorMsg) {}
        });

        // 3. Load the thumbnail.
        mThumbnailHelper.prepare();
    }
});

Obter logs do SDK

Os logs do SDK contêm informações detalhadas, como status de solicitação, resultados de invocação e solicitações de permissão. Use esses logs para depurar problemas durante o desenvolvimento. O SDK fornece dois métodos para obter logs.

Método 1: Visualize logs no console da ferramenta de desenvolvimento

Use este método quando for possível reproduzir o problema de forma confiável no seu dispositivo.

  1. Ative o log e defina o nível de log.

    // Logs are stored under com.cicada.player.utils.
    Logger.getInstance(context).enableConsoleLog(true);
    // Default: AF_LOG_LEVEL_INFO. Use AF_LOG_LEVEL_TRACE for troubleshooting.
    Logger.getInstance(context).setLogLevel(Logger.LogLevel.AF_LOG_LEVEL_INFO);
  2. (Opcional) Ative o log no nível de frame para solução de problemas.

    // 0: disabled, 1: enabled.
    Logger.getInstance(this).setLogOption(Logger.LogOption.FRAME_LEVEL_LOGGING_ENABLED, value);
  3. Reproduza o problema e recupere o log de erros do Logcat ou do console da sua ferramenta de desenvolvimento.

Método 2: Defina LogCallback para receber logs programaticamente

Use este método quando não for possível reproduzir o problema de forma confiável no seu dispositivo. O callback exporta logs para o canal de log do seu aplicativo.

  1. Ative o log e defina o nível de log.

    // Logs are stored under com.cicada.player.utils.
    // Default: AF_LOG_LEVEL_INFO. Use AF_LOG_LEVEL_TRACE for troubleshooting.
    Logger.getInstance(context).setLogLevel(Logger.LogLevel.AF_LOG_LEVEL_INFO);
    Logger.getInstance(mContext).setLogCallback(newLogger.OnLogCallback(){
            @Override
            public void onLog(Logger.LogLevel logLevel,Strings){
                // Process the log entry.
            }
    });
  2. Após a ocorrência de um erro, o SDK exporta automaticamente o log de erros para o canal de log do seu aplicativo.

Referências