QwenCloudBRASIL
Tradução de apoio para consulta. Código e identificadores técnicos preservados. Consultar referência original ↗

Recursos de vídeo

Configuração de captura, visualização e codificação de vídeo AOQ SDK

Este documento apresenta recursos de vídeo comuns em Android (Java), iOS (Objective-C) e HarmonyOS (ArkTS).

1. Captura de vídeo

1.1 Visão geral

A captura de vídeo abre a câmera do dispositivo e alimenta quadros de vídeo em tempo real no pipeline de codificação do SDK. O SDK oferece suporte a dois modos de captura:

1.2 Capturar parâmetros de configuração

Parâmetro Tipo Padrão Descrição
largura interno 1280 Largura da captura em pixels. Não usado no modo de captura externa.
altura interno 720 Capture a altura em pixels. Não usado no modo de captura externa.
FPS interno 15 Taxa de quadros de captura. No modo de captura externa, a taxa de quadros é determinada pela rapidez com que os quadros são enviados.
éExterno bool falso Se deve usar o modo de captura externa.
direção da câmera AoqCameraDireção Frente(0) Direção da câmera. Não usado no modo de captura externa.

1.3 Enumeração da direção da câmera

Valor enum Número Descrição
AoqCameraDirectionFrente 0 Câmera frontal
AoqCameraDireçãoVoltar 1 Câmera traseira

Referência da API 1.4

Função Android iOS HarmonyOS
Iniciar captura startVideoCapture(config) startVideoCapture:config: startVideoCapture(config)
Pare a captura pararVideoCapture() pararVideoCapture pararVideoCapture()
Trocar câmera mudarCâmera(direção) mudarCâmera: mudarCâmera(direção)

1.5 Exemplo

Android

```java
AoqVideoCaptureConfig config = new AoqVideoCaptureConfig();
config.width = 1280;
config.height = 720;
config.fps = 15;
config.cameraDirection = AoqCameraDirection.AoqCameraDirectionFront;
engine.startVideoCapture(config);
```

iOS

```objectivec
AoqVideoCaptureConfig *config = [[AoqVideoCaptureConfig alloc] init];
config.width = 1280;
config.height = 720;
config.fps = 15;
config.cameraDirection = AoqCameraDirectionFront;
[engine startVideoCapture:config];
```

HarmonyOS

```javascript
let config: AoqVideoCaptureConfig = {
  width: 1280,
  height: 720,
  fps: 15,
  cameraDirection: AoqCameraDirection.AoqCameraDirectionFront
};
engine.startVideoCapture(config);
```

2. Renderização de vídeo

2.1 Visão geral

A renderização de vídeo exibe na tela quadros de vídeo capturados localmente ou recebidos remotamente. O SDK oferece suporte à configuração de uma janela de visualização local e uma janela de renderização remota. Usar trackType para distinguir entre o fluxo de vídeo (Vídeo) e o fluxo de compartilhamento de tela (Tela).

2.2 Modos de renderização

Valor enum Número Descrição
AoqRenderModeAuto 0 Modo automático
AoqRenderModeStretch 1 Estique para preencher. A imagem pode ficar distorcida.
AoqRenderModeFill 2 Ajuste com caixa de correio. A imagem completa é mostrada.
AoqRenderModeCrop 3 Modo de corte. Partes da imagem podem ser cortadas.

2.3 Configuração da tela

Parâmetro Tipo Padrão Descrição
ver Vista da plataforma nulo Visualização de renderização. Android: SurfaceView ou TextureView. iOS: UIView. HarmonyOS: XComponent.
modo de renderização AoqRenderMode Automático(0) Modo de exibição de renderização

Referência da API 2.4

Função Android iOS HarmonyOS
Definir visualização local setLocalView(trackType, tela) setLocalView:trackType:canvas: setLocalView(trackType, tela)
Definir visualização remota setRemoteView(trackType, tela) setRemoteView:trackType:canvas: setRemoteView(trackType, tela)

Diferenças de plataforma: o Android usa SurfaceView ou TextureView como contêiner de renderização. iOS usa UIView (envolvido internamente por AoqRenderView com aceleração Metal). HarmonyOS usa XComponent (gerenciado por AoqXComponentController para renderização nativa).

3. Configuração do codec de vídeo

3.1 Visão geral

Configure parâmetros de codificação de vídeo, incluindo formato de codificação, resolução, taxa de quadros, taxa de bits, intervalo de quadros-chave, espelhamento e orientação. Usar trackType para aplicar diferentes configurações de codificação à trilha de vídeo e à trilha de compartilhamento de tela.

3.2 Parâmetros de configuração de codificação

Parâmetro Tipo Padrão Descrição
trackType AoqTrackType Vídeo(1) Tipo de faixa: Vídeo
tipo de codec AoqEncoderType VídeoH264(3) Formato de codificação
largura interno 720 Largura codificada
altura interno 1280 Altura codificada
FPS interno 5 Taxa de quadros de codificação
taxa de bits interno 500000 Taxa de bits alvo (bps)
minTaxa de bits interno 128.000 Taxa de bits mínima (bps)
keyframeInterval interno 2 Intervalo de quadro-chave (segundos)
modo espelho AoqMirrorMode Desativado(0) Modo espelho
modo de orientação AoqOrientationMode Automático(0) Modo de orientação
éExterno bool falso Modo de codificação externa. Quando verdadeiro, o aplicativo envia quadros pré-codificados.

3.3 Enumeração do formato de codificação

Valor enum Número Descrição
AoqEncoderTypeVideoH264 3 Codificação H.264
AoqEncoderTypeVideoJpeg 4 Codificação JPEG (para quadros codificados externos)

3.4 Modo espelho

Valor enum Número Descrição
AoqMirrorModeDesativado 0 Espelhamento desativado
AoqMirrorModeEnabled 1 Espelhamento ativado

3.5 Modo de orientação

Valor enum Número Descrição
AoqOrientationModeAuto 0 Orientação automática
AoqOrientationModeRetrato 1 Orientação retrato
AoqOrientationModePaisagem 2 Orientação paisagística

Referência da API 3.6

Função Android iOS HarmonyOS
Definir configuração de codificação setVideoEncoderConfig(config) setVideoEncoderConfig: setVideoEncoderConfig(config)

4. Entrada de quadro de vídeo externo

4.1 Visão geral

A entrada de quadro de vídeo externo permite que seu aplicativo envie dados de quadro de vídeo personalizados para o SDK para captura externa ou cenários de codificação externa. Dois métodos push são suportados:

O roteamento é controlado por trackType: AoqTrackTypeVideo rotas para a trilha de captura de vídeo; AoqTrackTypeScreen rotas para a trilha de compartilhamento de tela.

Enumeração de formato de pixel 4.2

Valor enum Número Descrição Suporte à plataforma
AoqVideoPixelFormatI420 1 I420 triplanar Todas as plataformas
AoqVideoPixelFormatNV12 2 NV12 biplanar Todas as plataformas
AoqVideoPixelFormatNV21 3 NV21 biplanar Todas as plataformas
AoqVideoPixelFormatBGRA 4 BGRA embalado Todas as plataformas
AoqVideoPixelFormatRGBA 5 RGBA embalado Todas as plataformas
AoqVideoPixelFormatCVPixelBuffer 6 Cópia zero da Apple apenas iOS
AoqVideoPixelFormatTextureOES 7 Textura OES Somente Android
AoqVideoPixelFormatTexture2D 8 Textura 2D Somente Android

4.3 Estrutura de dados de quadro de vídeo bruto (AoqVideoFrame)

Campo Tipo Descrição
formato AoqVideoPixelFormat Formato de pixels
largura interno Largura em pixels
altura interno Altura em pixels
dados byte[] /ArrayBuffer Dados em formato compactado (NV12/NV21/BGRA/RGBA)
dadosY / dadosU / dadosV byte[] /ArrayBuffer Dados triplanares do I420
passadaY / passadaU / passadaV interno I420 passadas triplanares
ID da textura interno ID da textura (válido para Android TextureOES/Texture2D)
transformarMatriz flutuar[16] Matriz de transformação de textura 4x4 (Android)
eglContexto Contexto EGL Contexto EGL compartilhado (Android)
pixelBuffer CVPixelBufferRef Cópia zero da Apple (iOS)
carimbo de data / hora longo Carimbo de data e hora em ms. Se for 0, o SDK usará o relógio local.

4.4 Estrutura de dados do quadro de vídeo codificado (AoqVideoEncodedFrame)

Campo Tipo Padrão Descrição
codec AoqVideoCodecType JPEG(0) Formato de codificação
dados byte[] /ArrayBuffer - Dados codificados
largura interno - Largura em pixels
altura interno - Altura em pixels
carimbo de data / hora longo 0 Carimbo de data/hora em ms

Referência da API 4.5

Função Android iOS HarmonyOS
Empurre o quadro bruto pushExternalVideoCapturedFrame(trackType, quadro) pushExternalVideoCapturedFrame:frame: pushExternalVideoCapturedFrame(trackType, quadro)
Quadro codificado por push pushExternalVideoEncodedFrame(trackType, quadro) pushExternalVideoEncodedFrame:frame: pushExternalVideoEncodedFrame(trackType, quadro)

5. Retornos de chamada de quadro de vídeo

5.1 Visão geral

Os retornos de chamada de quadro de vídeo permitem obter dados brutos de quadro em diferentes pontos do pipeline de vídeo, para uso em análise de vídeo, processamento personalizado, gravação e cenários semelhantes. Os modos somente leitura e leitura-gravação são suportados. No modo leitura-gravação, você pode modificar os dados do quadro e gravá-los de volta no SDK.

5.2 Posições de fontes de dados suportadas

Fonte de dados Valor enum Descrição
Capturado 0 Dados de vídeo após captura, antes do pré-processamento
Pré-codificação 1 Dados de vídeo antes da codificação, após pré-processamento
Remoto 2 Dados de vídeo remotos após decodificação, antes da renderização

5.3 Parâmetros de configuração de retorno de chamada

Parâmetro Tipo Padrão Descrição
formato AoqVideoPixelFormat I420(1) Formato pixel para dados de retorno de chamada
alinhamento AoqVideoObserverAlinhamento Padrão(0) Política de alinhamento de largura
modo AoqVideoObserverMode Somente leitura(0) Modo somente leitura (0) ou leitura-gravação (1)
espelhoAplicado bool falso Se deve ser aplicado espelhamento aos dados de retorno de chamada

5.4 Enumeração de alinhamento de largura

Valor enum Número Descrição
AoqVideoObserverAlignmentDefault 0 Alinhamento padrão
AoqVideoObserverAlignmentEven 1 Alinhamento de 2 bytes
AoqVideoObserverAlignment4 2 Alinhamento de 4 bytes
AoqVideoObserverAlignment8 3 Alinhamento de 8 bytes
AoqVideoObserverAlignment16 4 Alinhamento de 16 bytes

5.5 Etapas de uso

  1. Cadastre o observador: Ligue setVideoFrameObserver para definir o ouvinte de retorno de chamada do quadro de vídeo.
  2. Habilitar a fonte de dados: Ligue enableVideoFrameObserver para selecionar a posição da fonte de dados e iniciar retornos de chamada.
  3. Tratar dados de retorno de chamada: Obtenha dados do quadro dentro do retorno de chamada. Os dados do quadro são válidos apenas durante o retorno de chamada. Copie-o se precisar de forma assíncrona.

Referência da API 5.6

Função Android iOS HarmonyOS
Cadastrar observador setVideoFrameObserver(ouvinte) setVideoFrameObserver: setVideoFrameObserver(observador)
Habilitar retornos de chamada enableVideoFrameObserver(habilitado, fonte, configuração) enableVideoFrameObserver:videoFonte:config: enableVideoFrameObserver(habilitado, fonte, configuração)

5.7 Métodos de retorno de chamada

Retorno de chamada Android iOS HarmonyOS
Dados capturados onCapturedVideoFrame(quadro) onCapturedVideoFrame: onCapturedVideoFrame(quadro)
Dados pré-codificados onPreEncodeVideoFrame(trackType, quadro) onPreEncodeVideoFrame:quadro: onPreEncodeVideoFrame(trackType, quadro)
Dados remotos onRemoteVideoFrame(trackType, quadro) onRemoteVideoFrame:quadro: onRemoteVideoFrame(trackType, quadro)

Retornando true/YES de um retorno de chamada indica que os dados foram modificados e devem ser gravados de volta no SDK. Isto só tem efeito no modo ReadWrite com formato I420.

7. Controle de envio de fluxo de mídia

7.1 Visão geral

Controle se os fluxos de mídia locais serão enviados. Usar trackType para direcionar uma faixa específica (Áudio, Vídeo ou Tela). Quando o envio é desativado, a captura e a codificação continuam, mas os dados não são enviados para a extremidade remota.

Referência da API 7.2

Função Android iOS HarmonyOS
Controlar o envio de fluxo enableSendMediaStream(trackType, ativar) enableSendMediaStream:enable: enableSendMediaStream(trackType, ativar)

7.3 Enumeração do tipo de trilha

Valor enum Número Descrição
AoqTrackTypeÁudio 0 Faixa de áudio
AoqTrackTypeVídeo 1 Faixa de vídeo
AoqTrackTypeData 2 Rastreamento de dados

8. Monitoramento do estado do dispositivo de vídeo

8.1 Visão geral

O SDK monitora automaticamente as alterações no estado da câmera e notifica a camada de aplicação por meio do onVideoDeviceStateChanged retorno de chamada.

8.2 Códigos de estado do dispositivo

Código do estado Valor Descrição
AoqVideoDeviceNone 0 Estado inicial
AoqVideoDeviceCaptureIniciando 1 Captura começando
AoqVideoDeviceCaptureiniciado 2 Captura iniciada
AoqVideoDeviceCaptureStopping 3 Parada de captura
AoqVideoDeviceCaptureParado 4 Captura interrompida
AoqVideoDeviceCaptureFail 5 Falha na captura

8.3 Referência de retorno de chamada

Retorno de chamada Android iOS HarmonyOS
Mudança de estado do dispositivo onVideoDeviceStateChanged(estado) onVideoDeviceStateChanged: onVideoDeviceStateChanged(estado)

9. Erro de vídeo e códigos de aviso

9.1 Códigos de erro de vídeo

Código de erro Valor Descrição
AoqErrorCodeVídeo 200 Erro geral de vídeo
VídeoExternoBufferFull 210 Buffer externo de vídeo cheio
Dispositivo de vídeo 220 Erro geral do dispositivo de vídeo
Falha na abertura da câmera 221 Falha ao abrir a câmera
Falha na autenticação da câmera 222 Permissão de câmera negada
Câmera ocupada 223 Câmera em uso por outro processo
Erro de câmera em execução 224 Erro de funcionamento da câmera
VideoCodec 230 Erro geral de codec de vídeo
EncoderInitFail 231 Falha na inicialização do codificador
Renderização de vídeo 240 Erro geral de renderização de vídeo
RenderCreateFail 241 Falha na criação do renderizador
Erro de renderização 242 Erro de desenho de renderização
Tela 300 Erro geral de compartilhamento de tela

Códigos de erro adicionais do Android: ScreenPermissionDenied(310) – permissão de compartilhamento de tela negada; ScreenForegroundServiceFailed(311) – falha ao iniciar o serviço em primeiro plano.

9.2 Códigos de alerta de vídeo

Código de aviso Valor Descrição
AoqWCVídeo 200 Aviso geral de vídeo
CameraEnumerateError 201 Erro de enumeração de câmera
EncoderSwitched 202 Aviso de codificação do codificador
Renderizar Downgrade 203 Aviso de downgrade de renderização

Apêndice: lista completa de métodos de API de vídeo

Categoria Método Descrição
Controle de captura iniciarVideoCapture Abra o dispositivo de captura de vídeo
Controle de captura pararVideoCapture Fechar dispositivo de captura de vídeo
Controle de captura mudarCâmera Alternar entre câmera frontal e traseira
Controle de renderização definirLocalView Definir janela de visualização local
Controle de renderização definirRemoteView Definir janela de renderização remota
Codec setVideoEncoderConfig Definir parâmetros de codificação de vídeo
Entrada externa pushExternalVideoCapturedFrame Empurre o quadro de vídeo bruto
Entrada externa pushExternalVideoEncodedFrame Quadro de vídeo codificado por push
Compartilhamento de tela iniciarScreenCapture Iniciar captura de tela
Compartilhamento de tela pararScreenCapture Pare a captura de tela
Controle de fluxo ativarSendMediaStream Controlar o envio de fluxo de mídia
Retornos de chamada de quadro setVideoFrameObserver Registrar observador de quadro de vídeo
Retornos de chamada de quadro ativarVideoFrameObserver Ativar ou desativar retornos de chamada de quadro de vídeo