Este tópico apresenta soluções para problemas comuns ao usar o ApsaraVideo Player SDK para Android.
Problemas relacionados à licença
Resolva problemas de licença inválida ou expirada em Perguntas frequentes sobre licença.
Problemas comuns em todas as plataformas
Para problemas independentes da plataforma, consulte Perguntas frequentes sobre o player multiplataforma.
Desenvolvedores experientes também podem solucionar erros de reprodução de forma independente.
Problemas de desenvolvimento
Obter o progresso atual da reprodução
Por padrão, o player SDK informa o progresso da reprodução a cada 500 ms. Reduza o intervalo de callback para obter o progresso atual da reprodução com mais frequência:
// 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 de áudio e vídeo de origem
Os dados brutos de áudio e vídeo são retornados apenas ao alternar para a decodificação por software e reproduzir 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 a altura do vídeo
Obtenha a largura e a altura do vídeo das seguintes maneiras:
Após a instância
AliPlayerdo ApsaraVideo Player executar o métodoprepare, certifique-se de que ela esteja pelo menos no estado preparado (prepared) e chame os seguintes métodos:
mAliyunPlayer.setOnPreparedListener(new IPlayer.OnPreparedListener() {
@Override
public void onPrepared() {
mAliyunPlayer.getVideoWidth();
mAliyunPlayer.getVideoHeight();
}
});
Monitore o callback de alteração de tamanho do vídeo:
mAliyunPlayer.setOnVideoSizeChangedListener(new IPlayer.OnVideoSizeChangedListener() {
@Override
public void onVideoSizeChanged(int width, int height) {
}
});
Obtenha os valores por track:
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();
}
}
}
});
Como obter os dados de pixels de cada quadro de vídeo no player?
No player para Android, monitore 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
Após ativar a troca automática de taxa de bits com a chamada mAliPlayer.selectTrack(TrackInfo.AUTO_SELECT_INDEX), o player SDK monitora a velocidade atual da rede. Se a velocidade atingir a próxima taxa de bits em até 10 segundos, o player muda para essa taxa. Caso contrário, nenhuma troca ocorre.
Ao mudar de uma taxa de bits alta para uma baixa, se a velocidade da rede atingir a próxima taxa em até 10 segundos, o player termina de reproduzir o conteúdo em cache de taxa alta antes de alternar.
-
Ao mudar de uma taxa de bits baixa para uma alta, se a velocidade da rede atingir a próxima taxa em até 10 segundos, o player alterna imediatamente.
Para usar a troca automática de taxa de bits, transcodifique primeiro o vídeo em um stream de taxa de bits adaptável no console e configure o player para obter esse stream. O exemplo a seguir usa o método de reprodução
VidAuth:
VidAuth vidAuth = new VidAuth();
List<Definition> list = new ArrayList<>();
list.add(Definition.DEFINITION_AUTO);
vidAuth.setDefinition(list);
Lógica de nova tentativa personalizada
Em cenários de nova tentativa de rede, o player SDK tenta novamente duas vezes por padrão, com tempo limite de rede de 15 segundos. Um callback de erro é acionado após a falha das tentativas.
Personalize a lógica de nova tentativa para reportar os eventos ao seu aplicativo, permitindo que ele decida o comportamento real de repetição:
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 de unsupported protocol durante a reprodução de stream do Alibaba Real-Time Communication (ARTC)
Causa 1: O player SDK está integrado, mas a camada de ponte entre o player e o componente de transmissão ao vivo de baixa latência RTS (AlivcArtc) e o próprio componente (RtsSDK) não estão integrados.
Solução: Integre-os seguindo Implementar a extração de stream RTS no Android.
Causa 2: A versão da camada de ponte (AlivcArtc) não corresponde à versão do player.
Solução: A camada de ponte (AlivcArtc) e o player devem usar o mesmo número de versão. Para a implementação, consulte o tópico Implementar a extração de stream RTS no Android.
Causa 3: O componente de transmissão ao vivo de baixa latência RTS (RtsSDK) não está carregado.
Solução: Carregue o componente de transmissão ao vivo de baixa latência RTS (RtsSDK) no arquivo Application ou na Activity de destino, de acordo com suas necessidades.
static {
System.loadLibrary("RtsSDK");
}
Causa 4: A versão do minSDK é muito alta, impedindo o carregamento correto da camada de ponte (AlivcArtc).
Solução:
// 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 seek
Causa: O player usa o seek impreciso por padrão. Após uma operação de seek, o player inicia a reprodução a partir do keyframe mais próximo do ponto de seek.
Solução: Altere para o modo de seek preciso.
Como alternar entre os modos de seek preciso e impreciso?
O exemplo a seguir mostra como alternar entre os modos de seek:
// Inaccurate seek.
mAliPlayer.seekTo(1000);
mAliPlayer.seekTo(1000, IPlayer.SeekMode.Inaccurate);
// Accurate seek.
mAliPlayer.seekTo(1000,IPlayer.SeekMode.Accurate);
A barra de progresso continua voltando após a mudança para o modo de seek preciso
Causa: O seek preciso leva mais tempo que o impreciso. Quando a distância do ponto de seek até o keyframe mais próximo (ou seja, o início de um Group of Pictures - GOP) é muito grande e excede o intervalo máximo de seek preciso, o player SDK volta automaticamente para o seek impreciso, fazendo a barra de progresso retornar.
Solução: Aumente o intervalo máximo de seek preciso por meio da interface. Isso reduz a frequência com que o seek preciso volta para o impreciso e melhora a precisão do seek. No entanto, uma distância maior do ponto de seek até o keyframe (GOP) mais próximo também significa um tempo de seek maior. Defina o intervalo máximo de seek preciso com base nas características da sua aplicação:
// Unit: ms.
mAliPlayer.setMaxAccurateSeekDelta(10000);
Cache local: O diretório de cache pode ser definido como um diretório de armazenamento interno?
Sim. Substitua o diretório de armazenamento externo do dispositivo Android por um diretório de armazenamento interno. Certifique-se de que o diretório de armazenamento interno tenha permissões de acesso para o funcionamento correto do cache.
Ocorre um erro de encrypt check fail durante o cache de vídeo
O cache é uma operação de download. Se o download seguro estiver ativado, certifique-se de que o arquivo de verificação de criptografia corresponda às informações do seu aplicativo. Baixe o arquivo de verificação de criptografia gerado em Download offline e salve-o no player SDK. Para mais informações, consulte Download de vídeo. Incompatibilidades causam falha no cache ou no download.
Vídeos com múltiplas taxas de bits (HLS) não atingem o cache após a ativação do cache local
Sintoma: Você ativou o cache local e o pré-carregamento conforme a documentação, mas um ou mais dos seguintes problemas ocorrem:
Retornar a uma posição já reproduzida não atinge o cache.
A reprodução não continua após a desconexão da rede.
isCacheExistretornafalse.-
O diretório de cache fica vazio após a desativação do pré-carregamento.
Causa: Em cenários de múltiplas taxas de bits (HLS), se você não selecionar explicitamente um stream durante a reprodução, o player usa o streaming de taxa de bits adaptável (ABR). Os dados no modo ABR não são gravados em disco, logo, nenhum cache local é gerado. Apenas o stream selecionado explicitamente com a chamada
selectTracké armazenado em cache localmente. Se você não chamarselectTrackou passarTrackInfo.AUTO_SELECT_INDEX, o player tratará a reprodução como ABR.
Solução: Certifique-se de que o pré-carregamento e a reprodução usem a mesma definição e a mesma URL de reprodução. Além disso, selecione explicitamente esse stream durante a reprodução.
Durante o pré-carregamento, ative o cache local e pré-carregue o stream da definição especificada.
Durante a reprodução, chame
selectTrackno callbackonPrepareddesetOnPreparedListenerpara selecionar a mesma definição usada no pré-carregamento. Passe a mesma URL de reprodução usada no pré-carregamento parasetDataSourcee chameprepareestart.Se a taxa de bits inicial for diferente da taxa de bits aberta por padrão, o buffer será acionado. Chame
setDefaultBandWidthpara definir a taxa de bits inicial e reduzir travamentos durante a alternância.
Ocorre um erro de No such file or directory ao reproduzir um vídeo HLS (m3u8) a partir de um download offline
Sintoma: Após um download offline de HLS, a reprodução do endereço local reporta No such file or directory. O problema nem sempre é reproduzível e ocorre com mais frequência em cenários como deslize rápido entre páginas.
Causa: Para economizar espaço de armazenamento, um download offline de HLS geralmente baixa apenas os segmentos TS e o arquivo m3u8 de uma única definição, como 540p. No entanto, o arquivo m3u8 mestre salvo localmente ainda mantém os registros de todas as definições, como 1080p, 720p, 540p e 360p. Se você não especificar a definição baixada antes de chamar prepare, o player segue a lógica padrão ou adaptável e solicita segmentos de outras definições inexistentes localmente. Isso gera um erro de arquivo não encontrado. Os gatilhos comuns são a ausência de uma chamada para especificar a definição ou uma chamada feita após o prepare.
Solução:
Chame
setDefaultResolutionantes depreparepara especificar a mesma definição usada no download offline.Certifique-se de que cada ponto de entrada de reprodução defina uma definição padrão. Isso inclui as ramificações para deslize rápido, reutilização de múltiplas instâncias e alternância de pré-carregamento, garantindo que nenhum caminho seja ignorado.
Chame
getCurrentTrackpara verificar se a definição realmente usada para a reprodução inicial é a definição baixada.
Áudio e vídeo perdem a sincronização após a troca de vídeos, ou a reprodução do mesmo vídeo não atinge o cache
Sintoma: Após a ativação do cache local, o áudio e o vídeo perdem a sincronização ao trocar de vídeos, como ao mudar de episódios: o vídeo é do novo episódio, enquanto o áudio ainda é do anterior. Além disso, reproduzir o mesmo vídeo novamente não atinge o cache. Limpar o cache restaura o comportamento normal.
Causa: Após a ativação do cache local, o player usa o hash retornado pelo callback setCacheUrlHashCallback como identificador de cache exclusivo de cada URL de reprodução. Se o seu callback personalizado não garantir que a mesma URL de reprodução sempre retorne o mesmo hash e que conteúdos diferentes retornem hashes diferentes, as chaves de cache não corresponderão. Conteúdos diferentes atingirão o mesmo cache, manifestando-se como áudio e vídeo dessincronizados. Por outro lado, a mesma URL pode retornar um hash diferente a cada vez e nunca atingir o cache.
Solução:
O callback deve retornar consistentemente o mesmo hash para a mesma URL de reprodução e hashes diferentes para mídias distintas.
Se você remover parâmetros de autenticação para melhorar a taxa de acerto do cache, remova-os apenas da URL de reprodução (m3u8 ou mp4) antes de calcular o hash. Não remova os parâmetros de autenticação da keyURL de um arquivo m3u8 criptografado. Caso contrário, as chaves de vídeos diferentes atingirão o mesmo cache e a reprodução falhará. Trate os dois casos separadamente por nome de domínio dentro do callback.
-
Se o mesmo arquivo tiver um endereço HTTP e um endereço HTTPS, unifique o protocolo ou remova o cabeçalho do protocolo antes de calcular o hash.
Para mais informações, consulte Cache local.
Ocorre uma falha de autenticação ao reproduzir um vídeo com criptografia proprietária da Alibaba Cloud
Sintoma: O sistema reporta uma falha de autenticação ou o vídeo não é reproduzido ao tentar reproduzir um vídeo com criptografia proprietária da Alibaba Cloud.
Causa: A criptografia proprietária da Alibaba Cloud conclui a descriptografia por meio da interação entre o player e o servidor. Portanto, a reprodução deve começar por um método baseado em vid. Se você passar a URL de reprodução diretamente para o UrlSource do ApsaraVideo VOD para um vídeo com criptografia proprietária padrão, a autenticação e a descriptografia não serão concluídas e a reprodução falhará.
Solução:
Em clientes nativos, reproduza vídeos com criptografia proprietária por meio do
VidAuthouVidStsdo ApsaraVideo VOD. Se os streams de saída também contiverem streams sem criptografia proprietária, chameVidPlayerConfigGen.setEncryptType(AliyunVoDEncryption)para filtrar os streams com criptografia proprietária.-
Apenas a criptografia proprietária License suporta a reprodução
UrlSourcedo ApsaraVideo VOD. Para MP4, adicioneetavirp_nuyila=1ao final da URL. Para HLS, a versão 6.17.0 e posteriores podem usar a URL original diretamente. Essas opções não se aplicam à criptografia proprietária padrão.Para mais informações, consulte Reproduzir um vídeo criptografado.
Problemas de reprodução
Ocorre um crash ao criar o player
Solucione a causa da seguinte forma:
-
Verifique se a arquitetura da CPU é x86.
O player SDK suporta apenas as arquiteturas arm64-v8a e armeabi-v7a, sem suporte para x86.
-
Verifique se o projeto mistura os arquivos
.soe as dependências Maven do player SDK.Por exemplo, se você integrou o player SDK por meio de uma dependência Maven no
build.gradlee também integrou as bibliotecas dinâmicas relacionadas ao player no diretóriolibsde um módulo do projeto.
Solução recomendada: Se ambos forem usados, remova as bibliotecas dinâmicas e use a dependência Maven. Caso precise integrar as bibliotecas dinâmicas, verifique se os arquivos .so do player SDK são consistentes e provenientes da mesma versão. Para obter informações sobre como integrar o player SDK e obter as bibliotecas dinâmicas, consulte Integrar o SDK. Os arquivos de biblioteca dinâmica relacionados ao player são libalivcffmpeg.so, libsaasCorePlayer.so e libsaasDownloader.so.
-
Se você integrou um pacote parcial, confirme se a dependência da 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 a causa da seguinte forma:
-
Confirme se o crash ocorreu no player SDK.
Verifique se uma pilha de crash carrega o prefixo
AliyunPlayer. Em caso afirmativo, o problema está no player SDK. Atualize para a versão mais recente do player SDK e verifique se o problema foi resolvido.
Se o problema persistir, prepare os arquivos de crash relacionados (incluindo todas as threads), os logs de crash e os detalhes do cenário de crash. Em seguida, consulte Como obter logs de problemas.
Barras pretas aparecem durante a reprodução do vídeo
Solucione a causa da seguinte forma:
Verifique se o próprio vídeo de origem possui barras pretas.
Ajuste o modo de dimensionamento do player por meio da 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();
Se o modo de dimensionamento ainda não atender às suas necessidades, ajuste o tamanho do
SurfaceViewou doTextureViewna camada do aplicativo.
O áudio é reproduzido, mas nenhum vídeo aparece
Solucione a causa da seguinte forma:
Reproduza o vídeo com outro player para verificar se o vídeo contém apenas áudio.
Confirme se a view usada para renderizar o vídeo está configurada corretamente. Por exemplo, verifique se nenhuma display view está definida para o player ou se a display view foi removida da interface de reprodução. Para obter informações sobre como definir a display view, consulte a Etapa 4 em Recursos básicos.
Ocorre um erro de Invalid argument ao reproduzir um vídeo local que já possui permissões de leitura
Quando um erro de Invalid argument ocorre para um vídeo local com permissões de leitura, verifique o nome e o caminho absoluto do arquivo. Evite caminhos que contenham caracteres chineses e espaços.
Ocorre um erro de Permission denied ao reproduzir um vídeo local que já possui permissões de leitura
O Android introduziu o recurso de armazenamento com escopo (scoped storage) no Android 10 (Android Q). Para usar as permissões de armazenamento de um dispositivo Android normalmente, adicione android:requestLegacyExternalStorage="true" à tag application no AndroidManifest.xml.
Ocorre um erro de Redirect to a url ocasionalmente durante a reprodução do vídeo
Esse erro pode ocorrer devido ao sequestro da origem do vídeo. Ative o recurso HTTPDNS do player para lidar com isso. Para mais informações, consulte Configurar o HTTPDNS para Android.
Uma barra de notificação preta pisca em uma tela com recorte durante a reprodução em tela cheia
Defina uma barra de status imersiva para resolver esse problema.
Falha ao reproduzir um vídeo MOV
O player SDK para Android suporta vídeos MOV. Se a reprodução de um vídeo MOV falhar, verifique se o átomo moov (o índice de dados de áudio e vídeo) do vídeo de origem está localizado após o átomo mdat (os dados de áudio e vídeo). Transcodifique o vídeo de origem para mover o átomo moov para antes do átomo mdat. Para mais informações, consulte Etapa 2: Solucionar problemas do stream.
Um erro indica que a biblioteca dinâmica .so do player SDK não pode ser encontrada durante a inicialização ou reprodução
Solucione a causa da seguinte forma:
-
Verifique se a arquitetura da CPU atende aos requisitos.
O player SDK fornece bibliotecas dinâmicas apenas para as arquiteturas arm64-v8a e armeabi-v7a.
-
Verifique se a versão do player SDK é muito antiga.
Se a versão do player SDK for 5.4.6.0-full ou anterior, atualize para 5.4.6.0-full-15467853 ou posterior. Para as versões mais recentes e históricas do player SDK, consulte Notas de versão do SDK para Android.
Ocorre um erro ao usar o player de lista AliListPlayer para reproduzir vídeos HLS (m3u8)
O Player SDK V5.4.5.0 e versões anteriores não suportam a reprodução de vídeos HLS (m3u8) com o player de lista AliListPlayer. Versões posteriores à V5.4.5.0 suportam a reprodução de lista HLS (m3u8), mas exigem a ativação do cache local. Para obter informações sobre como ativar o cache local, consulte Cache local.
O player SDK para Android suporta a reprodução de vídeos nas pastas assets e raw de um projeto Android?
Não. Copie o vídeo para o armazenamento do telefone e reproduza-o usando seu caminho absoluto.
Ocorre um erro 403 e a reprodução falha após a configuração do cache local para um stream de vídeo HLS
Sintoma: Ao reproduzir um stream de vídeo HLS (M3U8) usando o método de reprodução VidAuth com o cache local ativado, a reprodução falha e o sistema reporta um erro 403.
Causa: Após a ativação do cache local, se você sair da reprodução antes do armazenamento total em cache, a parte não armazenada será solicitada na próxima reprodução com as informações de autenticação Vid expiradas da sessão anterior. Isso causa uma falha de autenticação e um erro 403.
Solução: Para o player SDK V5.5.4.0 e posteriores, se a URL de reprodução do vídeo carregar 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. 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 em cache anteriormente, o player usa a autenticação em cache para solicitações subsequentes. Se a autenticação de 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 de 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.
Autenticação não estrita (false): A autenticação é armazenada em cache. Se apenas parte da mídia foi armazenada em cache anteriormente, o player usa a autenticação em cache para solicitações subsequentes. Se a autenticação de 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 de 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 player SDK para Android suporta a reprodução de um vídeo enquanto o baixa?
Não. O player SDK para Android pode armazenar em cache e baixar arquivos de vídeo durante a reprodução quando o cache local está ativado, e o arquivo de vídeo em cache é reproduzido diretamente na próxima vez. Não há suporte para retirar um arquivo de vídeo armazenado em cache local de seu diretório e reproduzi-lo separadamente.
O player SDK para Android suporta a obtenção da velocidade de buffer de um vídeo?
Sim. O player SDK para Android pode 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 de rede. Para mais informações, consulte Obter informações de reprodução.
A reprodução de vídeo HDR é anormal
Atualmente, o player SDK para Android não suporta vídeos HDR com ângulo de rotação. Portanto, a reprodução desses vídeos é anormal.
Se um vídeo for transcodificado em múltiplas definições, qual definição o player SDK reproduz por padrão?
A ordem de reprodução de definição padrão é FD, LD, SD, HD, 2K, 4K e OD. Para a definição de cada termo, consulte definição. O player SDK pesquisa da esquerda para a direita e reproduz a primeira definição encontrada.
Como especificar a definição de reprodução padrão?
O exemplo a seguir mostra como especificar a definição de reprodução padrão:
// 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 streams, qual stream o player SDK reproduz?
Se uma definição tiver múltiplos streams, o player SDK reproduz o stream 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
Ao solicitar suporte técnico da Alibaba Cloud, envie seus logs de problemas junto com a solicitação para uma resolução mais eficiente. Obtenha os logs de problemas da seguinte forma:
-
Obtenha os logs de problemas.
Defina o nível de log para
AF_LOG_LEVEL_TRACEantes de obter os logs. Para o procedimento detalhado, consulte Obter logs do SDK. Forneça os logs gerados ao suporte técnico da Alibaba Cloud.