A configuração personalizada é um mecanismo de extensão do AliPlayerKit. O AliPlayerKit inclui configurações integradas baseadas em melhores práticas que oferecem uma experiência de alta qualidade na maioria dos cenários sem necessidade de ajustes adicionais. Caso precise de funcionalidades do player não expostas diretamente pela interface do AliPlayerKit, use o mecanismo de configuração personalizada para chamar as APIs do AliPlayer SDK subjacente diretamente.
Conceitos principais
O que é configuração personalizada?
O AliPlayerKit atua como um wrapper de alto nível para o AliPlayer SDK subjacente e traz configurações integradas seguindo as melhores práticas. No entanto, o SDK subjacente oferece um conjunto mais amplo de recursos, como estratégias personalizadas de buffer, proteção contra hotlink via Referer e injeção de cabeçalhos HTTP. Nem todas essas funcionalidades estão disponíveis diretamente no AliPlayerKit.
O mecanismo de configuração personalizada fornece dois pontos de entrada por callback, permitindo acessar os objetos subjacentes em momentos-chave e chamar suas APIs nativas diretamente:
|
Nível |
API |
Momento |
Cenários típicos |
|
Configuração global |
|
Após a conclusão da inicialização interna em |
Comportamentos globais, como nível de log e multiplexação HTTP/2 |
|
Configuração do player |
|
Antes de |
Comportamentos específicos da instância, como estratégia de buffer, Referer e cabeçalhos HTTP |
Sistema de configuração de três níveis
O sistema de configuração do AliPlayerKit possui três níveis:
┌─────────────────────────────────────────────────────────┐
│ 1. Global Configuration (OnGlobalInitBlock) │
│ Executes once at app launch, affecting all player instances │
├─────────────────────────────────────────────────────────┤
│ 2. Model Configuration (AliPlayerModel) │
│ Sets playback parameters via properties each time configure: is called │
├─────────────────────────────────────────────────────────┤
│ 3. Player Configuration (onPlayerConfigBlock) │
│ Provides a callback to the underlying player before prepare each time configure: is called │
└─────────────────────────────────────────────────────────┘
Configuração global
Casos de uso
Defina opções globais, como o nível de log global
Ative a multiplexação HTTP/2
Configure uma estratégia global de resolução DNS
Implemente outros comportamentos globais que devem entrar em vigor antes da criação de qualquer instância do player
Funcionamento
Registre um bloco de callback usando
+[AliPlayerKit setOnGlobalInitBlock:].O callback é acionado uma única vez após
+setupconcluir sua inicialização interna.Após a execução, o sistema define o bloco como
nil, impedindo novos acionamentos.Nesse momento, o SDK subjacente está pronto e você pode chamar as APIs globais com segurança.
Uso
Em application:didFinishLaunchingWithOptions:, registre o callback antes de chamar +setup:
- (BOOL)application:(UIApplication *)application
didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
// 1. Register the global custom configuration callback.
// This must be called before setup.
[AliPlayerKit setOnGlobalInitBlock:^{
// Example: Enable HTTP/2 multiplexing.
[AliPlayerFactory setOption:ALLOW_H2_MULTIPLEX value:1];
// Example: Set the global log level.
// [AliPlayerFactory setLogLevel:AF_LOG_LEVEL_INFO];
}];
// 2. Initialize the SDK. This triggers the callback registered above
// after internal initialization is complete.
[AliPlayerKit setup];
return YES;
}
Sequência de configuração
application:didFinishLaunchingWithOptions:
│
├── [AliPlayerKit setOnGlobalInitBlock:block] ← Register callback
│
└── [AliPlayerKit setup]
│
├── [GlobalManager setup] ← Initialize underlying SDK
│
├── sInitialized = YES
│
└── block() ← Trigger global config callback (once only)
Observações de uso
|
Ponto importante |
Descrição |
|
Ordem de chamada |
Chame |
|
Contagem de execuções |
A configuração global executa apenas uma vez, e |
|
Limpeza com nil |
Passe |
|
Idempotência |
|
Configuração do player
Casos de uso
Personalize a estratégia de buffer (por exemplo,
maxBufferDurationehighBufferDuration).Defina a proteção contra hotlink via Referer.
Configure cabeçalhos HTTP.
Defina opções no nível da instância.
Acesse outras interfaces do player não expostas diretamente pelo AliPlayerKit.
Funcionamento
Defina um bloco de callback na propriedade
AliPlayerModel.onPlayerConfigBlock.O callback é acionado sempre que
[controller configure:model]for chamado.A execução ocorre após
setDataSource:e antes deprepare.O parâmetro do callback é a instância do player subjacente, que está em conformidade com o protocolo MediaPlayer.
Uso
Ao construir AliPlayerModel, defina onPlayerConfigBlock:
VideoSource *source = [VideoSource urlSourceWithUrl:@"https://example.com/video.mp4"];
AliPlayerModel *model = [[AliPlayerModel alloc] initWithVideoSource:source];
// Set the instance-level custom configuration callback
model.onPlayerConfigBlock = ^(id<MediaPlayer> player) {
// Example 1: Customize the buffering strategy
AVPConfig *config = [player getConfig];
config.maxBufferDuration = 50000; // Max buffer duration: 50s
config.highBufferDuration = 3000; // High watermark: 3s
config.startBufferDuration = 500; // Start buffer duration: 500ms
[player setConfig:config];
// Example 2: Set Referer hotlink protection
AVPConfig *refConfig = [player getConfig];
refConfig.referer = @"https://your-domain.com";
[player setConfig:refConfig];
// Example 3: Set an instance-level option
// [player setOption:key value:value];
};
// Configure and play the video
[controller configure:model];
Sequência de configuração
[controller configure:model]
│
├── lifecycleStrategy.acquire() ← Get player instance
│
├── [mediaPlayer setDataSource:model] ← Configure video source
│
├── model.onPlayerConfigBlock(mediaPlayer) ← Trigger player config callback
│
├── [strategyManager start/reset] ← Start strategy system
│
└── [mediaPlayer prepare] ← Start preparing for playback
Observações de uso
|
Ponto importante |
Descrição |
|
Frequência de acionamento |
Acionado sempre que |
|
Momento de execução |
O melhor momento para configuração personalizada é após |
|
Parâmetro do callback |
A instância |
|
Configuração opcional |
|
|
Evite assincronismo |
Não realize operações demoradas ou assíncronas dentro do callback. |
Itens de configuração integrados
Configuração global do AliPlayerKit
Use os métodos da classe AliPlayerKit para definir diretamente as opções de configuração integradas:
|
Parâmetro |
Método |
Descrição |
|
Inicialização |
|
Inicializa o SDK. |
|
Status de inicialização |
|
Verifica se o SDK foi inicializado. |
|
Callback de configuração global |
|
Registra um callback de configuração personalizada executado após a inicialização global. |
|
Modo de depuração |
|
Ativa/desativa o modo de depuração (Padrão: |
|
Painel de logs |
|
Define se o painel de logs deve ser exibido na visualização do player. O valor padrão é |
|
Nível de log |
|
Nível de saída de log do SDK (padrão: |
|
Log no console |
|
Define se os logs devem ser enviados ao console (Padrão: |
|
Fábrica de players |
|
Personaliza a fábrica de criação de players. Passe |
|
Pré-carregador |
|
Personaliza o pré-carregador ou passe |
|
Limpar caches |
|
Limpa o cache local de mídia do player (deve ser chamado após |
|
Definição de idioma |
|
Especifique manualmente um código de idioma ( |
|
Localização |
|
Injeta um provedor de localização personalizado. |
|
Idioma do sistema |
|
Redefine a localidade para seguir o idioma preferido do sistema. |
|
Idioma atual |
|
Obtém o código de idioma ativo no momento. |
|
Informações de versão |
|
Obtém o número da versão do AliPlayerKit ou do SDK subjacente. |
Configuração do player AliPlayerModel
Itens de configuração no nível da instância definidos pela propriedade AliPlayerModel:
|
Propriedade |
Tipo |
Padrão |
Descrição |
|
|
|
— |
Obrigatório. A fonte de dados de vídeo ( |
|
|
|
|
O cenário de reprodução, que afeta slots de UI e comportamento de gestos. |
|
|
|
|
A URL da imagem de capa do vídeo. |
|
|
|
|
O título exibido na barra superior. |
|
|
|
|
Define se a reprodução deve iniciar automaticamente após a configuração. |
|
|
|
|
Um identificador exclusivo da sua aplicação para monitoramento da qualidade de reprodução. |
|
|
|
|
A posição inicial para reprodução em milissegundos. Valores negativos são corrigidos para 0. |
|
|
|
|
Define se a decodificação por hardware deve ser ativada. |
|
|
|
|
Define se a tela pode entrar em suspensão durante a reprodução. |
|
|
|
|
Propriedade específica do iOS para desativar capturas de tela e gravação de tela. |
|
|
|
|
O callback de configuração personalizada no nível da instância. |
Configuração de tempo de execução do AliPlayerController
Configurações ajustadas dinamicamente em tempo de execução pelo AliPlayerController:
|
Método / propriedade |
Tipo |
Descrição |
|
|
|
Define a velocidade de reprodução. |
|
|
|
Ativa ou desativa a reprodução em loop. |
|
|
|
Ativa ou desativa o som mudo. |
|
|
|
Modo espelho ( |
|
|
|
Modo de escala ( |
|
|
|
Ângulo de rotação ( |
|
|
|
Mostra ou oculta a barra de controles. |
|
|
|
Bloqueio de visibilidade da barra de controles (se definido como |
|
|
|
Entra ou sai do modo tela cheia. A transição é animada por padrão. |
|
|
|
Entra ou sai do modo tela cheia e permite controlar a animação. |
|
|
|
Alterna a qualidade da faixa. |
|
|
— |
Captura um snapshot do quadro de vídeo atual. |
|
|
— |
Alterna entre os estados de reprodução e pausa. |
|
|
— |
Reinicia a reprodução desde o início. |
|
|
— |
Interrompe a reprodução. |
|
|
|
Pausa e retomada automáticas em primeiro plano/segundo plano (Padrão: |
Prioridade de configuração
Regras de prioridade
Se o mesmo item for configurado em vários níveis, as definições serão aplicadas na seguinte ordem de precedência:
Player configuration (onPlayerConfigBlock) > AliPlayerModel properties > Global configuration > SDK default values
Escopo da configuração
|
Nível |
Escopo |
Ciclo de vida |
|
Configuração global |
Todas as instâncias do player |
Nível da aplicação (executa uma vez) |
|
Propriedades do modelo |
Uma única instância do player |
Única chamada de |
|
Callback de configuração do player |
Uma única instância do player |
Acionado sempre que |
|
Métodos do controller |
Uma única instância do player |
Entra em vigor dinamicamente em tempo de execução |
Exemplo de configuração
Exemplo de código
// ===== Global configuration (in AppDelegate, once only) =====
- (BOOL)application:(UIApplication *)application
didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
// Global custom configuration
[AliPlayerKit setOnGlobalInitBlock:^{
// Enable HTTP/2 multiplexing
[AliPlayerFactory setOption:ALLOW_H2_MULTIPLEX value:1];
}];
// Initialize
[AliPlayerKit setup];
// Global built-in configuration (must be called after setup)
[AliPlayerKit setLogLevel:LogLevelWarn];
[AliPlayerKit enableConsoleLog:YES];
return YES;
}
// ===== Player configuration (in the player view controller, for each playback) =====
- (void)startPlayback {
VideoSource *source = [VideoSource urlSourceWithUrl:videoUrl];
AliPlayerModel *model = [[AliPlayerModel alloc] initWithVideoSource:source];
// Model property configuration
model.sceneType = SceneTypeVOD;
model.videoTitle = @"Awesome Video";
model.coverUrl = coverImageUrl;
model.autoPlay = YES;
model.hardwareDecode = YES;
model.startTime = resumePosition; // Resume from last position
// Instance-level custom configuration (for the underlying SDK)
model.onPlayerConfigBlock = ^(id<MediaPlayer> player) {
AVPConfig *config = [player getConfig];
config.maxBufferDuration = 50000;
config.highBufferDuration = 3000;
config.startBufferDuration = 500;
config.referer = @"https://your-domain.com";
[player setConfig:config];
};
[_controller configure:model];
}
Chame configurações de log como setLogLevel: e enableConsoleLog: após setup, pois operam na instância singleton LogHub.
Referência rápida de API
API de configuração global
|
Método |
Descrição |
|
|
Registra um callback de configuração global. Passe |
|
|
Aciona a inicialização e executa o callback. |
API de configuração do player
|
Classe |
Propriedade |
Descrição |
|
|
|
Callback de configuração no nível da instância ( |
Arquivos relacionados
|
Arquivo |
Descrição |
|
|
API de configuração global (typedef |
|
|
Ponto de entrada da configuração do player ( |
|
|
Define métodos para configuração em tempo de execução. |
|
|
Define o protocolo para o player subjacente, que é o tipo do parâmetro de callback. |
Para obter a lista completa de APIs, consulte API Reference.
Perguntas frequentes
Ordem de execução da configuração
A configuração global executa uma vez na inicialização da aplicação (em +setup), enquanto a configuração do player executa durante cada chamada de configure: antes de prepare. Uma não interfere na outra.
Comportamento padrão
O AliPlayerKit inclui configurações integradas baseadas em melhores práticas, adequadas para a maioria dos casos de uso sem exigir configuração personalizada.
Operações assíncronas em callbacks
Não recomendado. Os callbacks são executados sincronamente, o que significa que o player não continuará a executar prepare até que o callback seja concluído. Se você realizar uma operação demorada no callback, isso bloqueará o processo de inicialização do player.
Alteração da fonte de vídeo em callbacks
Não recomendado. A fonte de vídeo já foi definida usando setDataSource: antes do callback. Modificá-la dentro do callback pode causar comportamento inesperado. Use o callback de configuração do player apenas para definir parâmetros de reprodução, como estratégia de buffer e Referer.
Chamada de setOnGlobalInitBlock: após setup
Não terá efeito. O método +setup usa dispatch_once para garantir que seja executado apenas uma vez. Se um Block for definido após a chamada do método +setup, esse Block nunca será acionado.
Momento da configuração de log
Chame setLogLevel: e enableConsoleLog: após +setup, pois operam diretamente no singleton LogHub. No entanto, defina setOnGlobalInitBlock: antes de +setup.