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:
- Captura interna (padrão): o SDK gerencia automaticamente a câmera – abrindo-a, capturando quadros e fechando-a. Suporta alternância entre câmeras frontal e traseira.
- Captura externa: O aplicativo gerencia a câmera ou outra fonte de vídeo. Os quadros capturados são alimentados no SDK via
pushExternalVideoCapturedFrame.
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 |
| 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. |
| 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 |
| 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:
- Enviar quadros brutos: enviar dados de pixel não codificados (I420, NV12, NV21, BGRA, RGBA e formatos semelhantes) para o SDK. O SDK codifica os dados.
- Enviar quadros codificados: enviar dados já codificados (por exemplo, JPEG) diretamente para o SDK. O SDK empacota e envia sem recodificação.
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 |
| 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
- Cadastre o observador: Ligue
setVideoFrameObserver para definir o ouvinte de retorno de chamada do quadro de vídeo.
- Habilitar a fonte de dados: Ligue
enableVideoFrameObserver para selecionar a posição da fonte de dados e iniciar retornos de chamada.
- 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 |