Todos os produtos
Search
Central de documentação

ApsaraVideo Live:Uso do Push SDK for Android

Última atualização: Jun 30, 2026

Saiba como registrar, configurar e usar o Push SDK for Android para ingestão de streams ao vivo, com exemplos de captura de câmera, compartilhamento de tela, retoque facial e muito mais.

Recursos

  • Suporta ingestão de streams via Real-Time Messaging Protocol (RTMP).

  • Permite ingestão e pull de streams RTS com base em Real-Time Communication (RTC).

  • Oferece suporte a co-streaming e batalhas.

  • Usa H.264 para codificação de vídeo e AAC para codificação de áudio.

  • Aceita configurações personalizadas para recursos como controle de taxa de bits, resolução e modo de exibição.

  • Compatível com diversas operações de câmera.

  • Inclui retoque em tempo real e efeitos de retoque personalizados.

  • Permite adicionar e remover adesivos animados como marcas d'água.

  • Possibilita a transmissão de gravações de tela.

  • Suporta entradas externas de áudio e vídeo em diferentes formatos, como YUV e pulse-code modulation (PCM).

  • Permite a mixagem de múltiplos streams.

  • Aceita ingestão de streams apenas de áudio ou apenas de vídeo, além de ingestão em segundo plano.

  • Oferece suporte a música de fundo.

  • Permite a captura de snapshots de vídeo.

  • Inclui reconexão automática e tratamento de erros.

  • Disponibiliza algoritmos de Controle Automático de Ganho (AGC), Redução Automática de Ruído (ANR) e Cancelamento de Eco Acústico (AEC).

  • Permite alternar entre os modos de codificação por software e hardware para arquivos de vídeo, aumentando a estabilidade do módulo de codificação.

Limitações

Antes de usar o Push SDK for Android, observe as seguintes restrições:

  • Configure a orientação da tela antes da ingestão do stream. Não é permitido girar a tela durante a transmissão ao vivo.

  • Desative a rotação automática de tela para ingerir streams no modo paisagem.

  • No modo de codificação por hardware, a resolução de saída deve ser um múltiplo de 16 para garantir compatibilidade com o codificador. Por exemplo, se você definir a resolução como 540p, a resolução de saída será 544 × 960. Ajuste o tamanho da tela do player com base na resolução de saída para evitar barras pretas.

Referência da API

Referência da API (Edição Básica)

Procedimento

  1. Registrar o SDK

  2. Configurar parâmetros de ingestão de stream

  3. Iniciar a ingestão de stream

Uso dos recursos

Registrar o SDK

Para obter e configurar uma licença, integre uma licença do Push SDK.

Nota

Registre o SDK antes de usar seus recursos de ingestão de stream.

Chame a API de registro de licença no início do ciclo de vida do aplicativo, antes de usar o Push SDK for Android.

AlivcLiveBase.setListener(new AlivcLiveBaseListener() {
  @Override
  public void onLicenceCheck(AlivcLivePushConstants.AlivcLiveLicenseCheckResultCode result, String reason) {
    Log.e(TAG, "onLicenceCheck: " + result + ", " + reason);
  }
});
AlivcLiveBase.registerSDK();
  • Use a classe AlivcLiveBase para definir níveis de log, especificar caminhos de log locais e obter a versão do SDK.

  • Chame o método registerSDK em AlivcLiveBase para registrar a licença do SDK.

  • Implemente o callback onLicenceCheck na interface AlivcLiveBase#setListener para verificar a configuração da licença de forma assíncrona.

    Nota

    Este callback é acionado somente após a inicialização da instância do pusher.

Configurar parâmetros de ingestão de stream

Os parâmetros de ingestão de stream possuem valores padrão que não exigem configuração adicional.

// Initialize the stream ingest configuration class.
AlivcLivePushConfig mAlivcLivePushConfig = new AlivcLivePushConfig();
// Set the stream ingest mode. The default is the basic mode.
mAlivcLivePushConfig.setLivePushMode(AlivcLiveMode.AlivcLiveBasicMode);
// Set the resolution. The default is 540p.
mAlivcLivePushConfig.setResolution(AlivcResolutionEnum.RESOLUTION_540P);
// Set the frame rate. The default is 25 fps.
mAlivcLivePushConfig.setFps(AlivcFpsEnum.FPS_25);
// Set the video encoding GOP size in seconds. The default is 2 seconds.
mAlivcLivePushConfig.setVideoEncodeGop(AlivcVideoEncodeGopEnum.GOP_TWO);
// Enable bitrate control. This is enabled by default.
mAlivcLivePushConfig.setEnableBitrateControl(true);
// Set the screen orientation. The default is portrait. You can also set it to landscape with the home button on the left or right.
mAlivcLivePushConfig.setPreviewOrientation(AlivcPreviewOrientationEnum.ORIENTATION_PORTRAIT);
// Set the audio encoding profile. The default is AAC-LC.
mAlivcLivePushConfig.setAudioProfile(AlivcAudioAACProfileEnum.AAC_LC);
// Set the video encoding mode. The default is hardware encoding.
mAlivcLivePushConfig.setVideoEncodeMode(AlivcEncodeModeEnum.Encode_MODE_HARD);
// Set the audio encoding mode. The default is software encoding.
mAlivcLivePushConfig.setAudioEncodeMode(AlivcEncodeModeEnum.Encode_MODE_SOFT);
// Set the camera type. The default is the front camera.
mAlivcLivePushConfig.setCameraType(AlivcLivePushCameraTypeEnum.CAMERA_TYPE_FRONT);
// Set the image to display when the app is in the background or stream ingest is paused.
mAlivcLivePushConfig.setPausePushImage("TODO: Image Path");
// Set the image to display in poor network conditions.
mAlivcLivePushConfig.setNetworkPoorPushImage("TODO: Image Path");
Importante
  • Defina a resolução como 540p para obter o equilíbrio ideal entre desempenho do dispositivo e largura de banda.

  • Desativar o controle de taxa de bits fixa a taxa de bits no valor inicial sem adaptação às condições de rede, o que pode causar travamentos na reprodução.

Ingerir stream da câmera

  1. Inicialize.

    Chame o método init após configurar os parâmetros de ingestão de stream:

    AlivcLivePusher mAlivcLivePusher = new AlivcLivePusher();
    mAlivcLivePusher.init(mContext, mAlivcLivePushConfig);
    Nota

    AlivcLivePusher não suporta múltiplas instâncias. Cada chamada a init deve ter uma chamada correspondente a destroy.

  2. Registre callbacks de pré-visualização.

    Chame o método setLivePushInfoListener para registrar callbacks de pré-visualização:

    /**
     * Set a listener for stream ingest event notifications.
     *
     * @param infoListener The notification listener.
     */
    mAlivcLivePusher.setLivePushInfoListener(new AlivcLivePushInfoListener() {
        @Override
        public void onPreviewStarted(AlivcLivePusher pusher) {
            // Notification that the preview has started.
        }
        // Other override methods
        //....
        //....
    });
  3. Inicie a pré-visualização.

    Inicie a pré-visualização passando o SurfaceView para a pré-visualização da câmera:

    mAlivcLivePusher.startPreview(mSurfaceView); // Starts the preview. You can also call the asynchronous startPreviewAsync method based on your needs.
  4. Inicie a ingestão de stream.

    Adicione o seguinte código dentro do método de callback onPreviewStarted.

    mAlivcLivePusher.startPush(mPushUrl);
    Nota
    • URLs de ingestão para RTMP e RTS (artc://) são suportadas. Para obter URLs, consulte Gerar URLs de ingestão e streaming.

    • O ApsaraVideo Live rejeita solicitações simultâneas de ingestão de stream para a mesma URL.

Métodos comuns de ingestão de stream

O SDK fornece métodos para controlar o ciclo de vida do stream: iniciar, parar, pausar, retomar, reiniciar, reconectar e descartar.

/* Call to pause a stream that is being ingested. After pausing, the video preview and video stream ingest are held on the last frame, while audio stream ingest continues. */
mAlivcLivePusher.pause();
/* Call to resume a paused stream. After resuming, the audio and video preview and stream ingest return to normal. */
mAlivcLivePusher.resume();
/* Call to stop a stream that is being ingested. After completion, stream ingest stops. */
mAlivcLivePusher.stopPush();
/* Call to stop the preview only when in the previewing state. Calling this while ingesting a stream has no effect. After the preview stops, the preview frame freezes on the last frame. */
mAlivcLivePusher.stopPreview();
/* Call to restart stream ingest when a stream is being ingested or after receiving any error-related callback. In an error state, you can only call this API, reconnectPushAsync, or destroy. Restarting reinitializes all internal resources of AlivcLivePusher, including preview and stream ingest. */
mAlivcLivePusher.restartPush();
/* Call to reconnect a stream when it is being ingested or after receiving an error callback related to AlivcLivePusherNetworkDelegate. In an error state, you can only call this API, restartPush, or destroy. Reconnecting re-establishes the RTMP connection for stream ingest. */
mAlivcLivePusher.reconnectPushAsync();
/* Call to dispose of the stream ingest instance. After disposal, stream ingest and preview stop, and the preview surface is removed. All resources related to AlivcLivePusher are released. */
mAlivcLivePusher.destroy();

Operações de câmera

Alterne câmeras, ative o flash e ajuste foco, zoom e espelhamento durante a ingestão de stream, pausa ou reconexão:

/* Switch between the front and rear cameras. */
mAlivcLivePusher.switchCamera();
/* Turn the flash on or off. Turning on the flash has no effect when the front camera is active. */
mAlivcLivePusher.setFlash(true); 
/* Adjust the focal length to zoom the captured image. The zoom range is [0, getMaxZoom()]. */
mAlivcLivePusher.setZoom(5);
/* Manually focus the camera. This requires two parameters: 1. `point` (the coordinates of the point to focus on) and 2. `autoFocus` (whether to enable autofocus for this specific operation). Subsequent autofocus behavior follows the value set by the setAutoFocus API. */
mAlivcLivePusher.focusCameraAtAdjustedPoint(x, y, true);
/* Set whether to enable autofocus. */
mAlivcLivePusher.setAutoFocus(true);
/* Configure mirroring. There are two mirroring APIs: PushMirror for the ingested stream and PreviewMirror for the local preview. PushMirror affects only the playback display, while PreviewMirror affects only the preview display. They do not affect each other. */
mAlivcLivePusher.setPreviewMirror(false);
mAlivcLivePusher.setPushMirror(false);
Importante

As APIs de câmera estão disponíveis apenas após o início da pré-visualização.

Ingerir stream de compartilhamento de tela

O compartilhamento de tela usa MediaProjection e requer permissão do usuário. Passe os dados do resultado da permissão para o SDK. A câmera é desativada por padrão durante o compartilhamento de tela.

Configurar compartilhamento de tela

// resultData is the screen sharing system intent.
mAlivcLivePushConfig.setMediaProjectionPermissionResultData(resultData);

Configurar rotação de tela

Defina o ângulo de rotação da tela para suportar gravação nos modos paisagem e retrato durante o compartilhamento de tela:

mAlivcLivePusher.setScreenOrientation(0);
Nota

Escute o evento OrientationEventListener na camada do aplicativo e defina o ângulo de rotação por meio desta API quando a orientação da tela mudar.

Configurar proteção de privacidade

Ative a proteção de privacidade durante o compartilhamento de tela para ocultar entradas sensíveis, como senhas:

mAlivcLivePusher.pauseScreenCapture(); // Enable privacy protection.
mAlivcLivePusher.resumeScreenCapture(); // Disable privacy protection.
Nota

Isso pausa o compartilhamento de tela. Se setPausePushImage estiver definido na configuração, os espectadores verão a imagem especificada. Caso contrário, verão o último quadro antes da pausa.

Ingerir streams de câmera e compartilhamento de tela

É possível ativar a ingestão da câmera durante o compartilhamento de tela. Há duas abordagens disponíveis:

  1. O streamer tem uma pré-visualização da câmera.

    Tanto o streamer quanto os espectadores podem ver a imagem da câmera.

  2. O streamer não tem uma pré-visualização da câmera.

    Por exemplo, durante uma transmissão de jogos, o streamer pode não querer que a visualização da câmera obstrua o jogo. No entanto, os espectadores ainda podem ver a imagem da câmera do streamer no stream final.

Streamer pode ver a pré-visualização da câmera

Após o início do compartilhamento de tela, chame a API para iniciar ou parar a pré-visualização da câmera.

mAlivcLivePusher.startCamera(surfaceView); // Start the camera preview.
mAlivcLivePusher.stopCamera(); // Stop the camera preview.
Nota
  • Defina a proporção do surfaceView de pré-visualização da câmera como 1:1 para evitar ajustes na rotação da tela.

  • Se a proporção não for 1:1, ajuste a proporção do surfaceView quando a tela girar e, em seguida, chame stopCamera seguido por startCamera.

  • Se o streamer não precisar de uma pré-visualização, defina surfaceview como null.

Streamer não pode ver a pré-visualização da câmera

Ative a mixagem de stream da câmera para incluir a imagem da câmera no stream sem uma pré-visualização local.

mAlivcLivePusher.startCameraMix(x, y, w, h); // Enable camera stream mixing and set the x, y, w, and h layout for the mixed stream.
mAlivcLivePusher.stopCameraMix(); // Stop camera stream mixing.

Modo de exibição da pré-visualização

Três modos de exibição de pré-visualização estão disponíveis. O modo de exibição não afeta a ingestão de stream.

  • ALIVC_LIVE_PUSHER_PREVIEW_SCALE_FILL: O vídeo preenche a janela de pré-visualização. Se as proporções do vídeo e da janela forem diferentes, a pré-visualização aparecerá distorcida.

  • ALIVC_LIVE_PUSHER_PREVIEW_ASPECT_FIT: A proporção do vídeo é preservada. Se as proporções do vídeo e da janela forem diferentes, barras pretas aparecerão na pré-visualização.

  • ALIVC_LIVE_PUSHER_PREVIEW_ASPECT_FILL: O vídeo é cortado para se ajustar à proporção da janela. Se as proporções forem diferentes, o vídeo será cortado.

O código a seguir fornece um exemplo:

mAlivcLivePushConfig.setPreviewDisplayMode(AlivcPreviewDisplayMode.ALIVC_LIVE_PUSHER_PREVIEW_ASPECT_FIT);

Ingestão de stream de imagem

O SDK pode ingerir uma imagem de espaço reservado quando o aplicativo está em segundo plano ou a rede está ruim.

Quando o aplicativo entra em segundo plano, a ingestão de vídeo é pausada enquanto o áudio continua. Exiba uma imagem de espaço reservado para informar os espectadores:

mAlivcLivePushConfig.setPausePushImage("path/to/background.png"); // Set the image for background stream ingest.

O SDK ingere esta imagem quando detecta uma taxa de bits baixa, reduzindo travamentos no vídeo:

mAlivcLivePushConfig.setNetworkPoorPushImage("path/to/network_poor.png"); // Set the image to ingest in poor network conditions.

Ingestão de stream apenas de áudio

mAlivcLivePushConfig.setAudioOnly(true);

Ingerir streams externos de áudio e vídeo

O SDK suporta a ingestão de áudio e vídeo de fontes externas, como arquivos de vídeo.

Ative primeiro a entrada personalizada de áudio e vídeo:

/**
* Other parameters such as output resolution, audio sample rate, and number of channels are set in the config object
* using setResolution, setAudioSampleRate, and setAudioChannels.
*/
mAlivcLivePushConfig.setExternMainStream(true,AlivcImageFormat.IMAGE_FORMAT_YUVNV12,AlivcSoundFormat.SOUND_FORMAT_S16);

Após ativar a entrada personalizada de áudio e vídeo, você pode ingerir streams externos.

Ingerir stream externo de áudio

/**
* This API does not control timing. The caller must control the timing of the input audio frames.
*/
mAlivcLivePusher.inputStreamAudioData(byte[] data, int size, int sampleRate, int channels, long pts);

Ingerir stream externo de vídeo

/**
* This API does not control timing. The caller must control the timing of the input video frames.
*/
mAlivcLivePusher.inputStreamVideoData(byte[] data, int width, int height, int stride, int size, long pts, int rotation);

Configurar marcas d'água

Adicione uma ou mais marcas d'água no formato PNG:

mAlivcLivePushConfig.addWaterMark(waterPath,0.1,0.2,0.3); // Add a watermark.
Nota
  • Os parâmetros x, y e largura são valores relativos. Por exemplo, x=0,1 significa que a coordenada x da marca d'água está em 10% da largura do stream. Se a resolução do stream for 540x960, a coordenada x da marca d'água será 54.

  • A altura da imagem da marca d'água é dimensionada proporcionalmente com base em sua proporção original e no valor de largura fornecido.

  • Para implementar uma marca d'água de texto, primeiro converta o texto em uma imagem e, em seguida, use esta API para adicioná-la como marca d'água.

Configurar qualidade de vídeo

Três modos de qualidade de vídeo são suportados: Modo Prioridade de Resolução, Modo Prioridade de Fluidez e Modo Personalizado.

Importante

Para definir a qualidade do vídeo, ative o controle de taxa de bits: mAlivcLivePushConfig.setEnableBitrateControl(true);

Modo Prioridade de Resolução (padrão)

O SDK prioriza a clareza do vídeo configurando automaticamente os parâmetros de taxa de bits.

mAlivcLivePushConfig.setQualityMode(AlivcQualityModeEnum.QM_RESOLUTION_FIRST); // Prioritize resolution.

Modo Prioridade de Fluidez

O SDK prioriza a suavidade do vídeo configurando automaticamente os parâmetros de taxa de bits.

mAlivcLivePushConfig.setQualityMode(AlivcQualityModeEnum.QM_FLUENCY_FIRST); // Prioritize fluency.

Modo Personalizado

O SDK usa suas configurações de taxa de bits. Defina os valores de taxa de bits inicial, mínima e alvo.

  • Taxa de bits alvo: Em boas condições de rede, a taxa de bits aumenta gradualmente até a taxa de bits alvo para melhorar a clareza do vídeo.

  • Taxa de bits mínima: Em más condições de rede, a taxa de bits diminui gradualmente até a taxa de bits mínima para reduzir travamentos no vídeo.

  • Taxa de bits inicial: A taxa de bits quando a transmissão ao vivo começa.

mAlivcLivePushConfig.setQualityMode(AlivcQualityModeEnum.QM_CUSTOM); // Custom mode
mAlivcLivePushConfig.setTargetVideoBitrate(1000); // Target bitrate: 1,000 kbit/s
mAlivcLivePushConfig.setMinVideoBitrate(300); // Minimum bitrate: 300 kbit/s
mAlivcLivePushConfig.setInitialVideoBitrate(800); // Initial bitrate: 800 kbit/s

Consulte as seguintes configurações recomendadas de taxa de bits:

Tabela 1. Configurações recomendadas para o Modo Prioridade de Resolução

Resolução

initialVideoBitrate

minVideoBitrate

targetVideoBitrate

360p

600

300

1000

480p

800

300

1200

540p

1000

600

1400

720p

1500

600

2000

1080p

1800

1200

2500

Tabela 1. Configurações recomendadas para o Modo Prioridade de Resolução

Resolução

initialVideoBitrate

minVideoBitrate

targetVideoBitrate

360p

400

200

600

480p

600

300

800

540p

800

300

1000

720p

1000

300

1200

1080p

1500

1200

2200

Resolução adaptativa

A resolução adaptativa reduz automaticamente a resolução em más condições de rede para melhorar a suavidade:

mAlivcLivePushConfig.setEnableAutoResolution(true); // Enable adaptive resolution. Default is false.
Importante

Música de fundo

O SDK suporta reprodução de música de fundo, mixagem, redução de ruído, monitoramento in-ear e silenciamento:

/* Start playing background music. */
mAlivcLivePusher.startBGMAsync(mPath);
/* Stop playing background music. If BGM is already playing and you need to switch songs, just call the start background music API again. You do not need to stop the current BGM. */
mAlivcLivePusher.stopBGMAsync();
/* Pause background music. This can only be called after BGM has started playing. */
mAlivcLivePusher.pauseBGM();
/* Resume background music. This can only be called when BGM is paused. */
mAlivcLivePusher.resumeBGM();
/* Enable looping for background music. */
mAlivcLivePusher.setBGMLoop(true);
/* Set the denoise switch. When enabled, non-human sounds in the captured audio are filtered. This may slightly suppress human voices. We recommend letting users choose whether to enable this feature. It is disabled by default. */
mAlivcLivePusher.setAudioDenoise(true);
/* Set the in-ear monitoring switch. This feature is mainly used in karaoke scenarios. When enabled with headphones plugged in, the streamer will hear their own voice. When disabled, they will not. This has no effect if headphones are not plugged in. */
mAlivcLivePusher.setBGMEarsBack(true);
/* Configure mixing to adjust the volume of background music and captured voice. */
mAlivcLivePusher.setBGMVolume(50); // Set background music volume.
mAlivcLivePusher.setCaptureVolume(50); // Set captured voice volume.
/* Mute the audio. This mutes both music and voice input. To mute only music or voice, use the mixing volume adjustment APIs. */
mAlivcLivePusher.setMute(true);
Importante

As APIs de música de fundo estão disponíveis apenas após o início da pré-visualização.

Snapshot de stream

Tire um snapshot do stream de vídeo local:

// Take a snapshot of the video stream. Parameters: number of images to capture, interval between each capture in seconds, and a callback listener.
pusher.snapshot(1, 1, new AlivcSnapshotListener() {
    @Override
    public void onSnapshot(Bitmap bmp) {
        // You can save the snapshot to a local PNG file. The following code is an example.
        String dateFormat = new SimpleDateFormat("yyyy-MM-dd-hh-mm-ss-SS").format(new Date());
        File f = new File(context.getExternalFilesDir(Environment.DIRECTORY_PICTURES), "snapshot-" + dateFormat + ".png");
        if (f.exists()) {
            f.delete();
        }
        try {
            FileOutputStream out = new FileOutputStream(f);
            bmp.compress(Bitmap.CompressFormat.PNG, 90, out);
            out.flush();
            out.close();
        } catch (FileNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
});

Execução em segundo plano e bloqueio de tela

  • Quando seu aplicativo é movido para segundo plano ou a tela é bloqueada, chame os métodos pause() ou resume() de AlivcLivePusher para pausar ou retomar a ingestão de stream.

  • Para chamadas de áudio e vídeo que não sejam do sistema, o SDK captura e ingere som. Com base nas necessidades do seu negócio, chame a API mAlivcLivePusher.setMute(true or false) para determinar se deve capturar áudio quando o aplicativo está em segundo plano ou a tela está bloqueada.

Callbacks

Tipo de callback

Nome da classe de callback

Método de configuração

Callbacks de ingestão de stream

AlivcLivePushInfoListener

mAlivcLivePusher.setLivePushInfoListener()

Callbacks relacionados à rede

AlivcLivePushNetworkListener

mAlivcLivePusher.setLivePushNetworkListener()

Callbacks de erro

AlivcLivePushErrorListener

mAlivcLivePusher.setLivePushErrorListener()

Callbacks de música de fundo

AlivcLivePushBGMListener

mAlivcLivePusher.setLivePushBGMListener()

Callbacks de ingestão de stream

Os callbacks de ingestão de stream notificam o aplicativo sobre alterações de status do SDK: início da pré-visualização, primeiro quadro renderizado, primeiro quadro enviado, início da ingestão e parada da ingestão.

  • onPushStarted: Indica uma conexão bem-sucedida com o servidor.

  • onFirstFramePushed: Indica que o primeiro quadro de áudio ou vídeo foi enviado com sucesso.

  • Os callbacks onPushStarted e onFirstFramePushed indicam que o SDK iniciou a ingestão de stream com sucesso.

Callbacks relacionados à rede

Os callbacks de rede relatam o status da conexão. O SDK se reconecta automaticamente em breves flutuações de rede dentro dos limites de tempo limite e tentativas definidos em AlivcLivePushConfig.

  • onConnectFail: Falha na ingestão de stream. Verifique a validade da URL de ingestão, problemas de autenticação, limites de streams simultâneos ou status de lista de bloqueios. Códigos de erro: 0x30020901–0x30020905, 0x30010900–0x30010901.

  • onConnectionLost: Conexão perdida. O SDK se reconecta automaticamente, acionando onReconnectStart. Se as tentativas excederem config.connectRetryCount, onReconnectFail é disparado.

  • onNetworkPoor: A rede é insuficiente para uma ingestão estável, mas o stream não é interrompido. Use isso para exibir uma notificação na UI.

  • onNetworkRecovery: A rede foi recuperada.

  • onReconnectFail: A reconexão automática falhou após exceder os limites de tempo limite e tentativas em AlivcLivePushConfig. Chame mAlivcLivePusher.reconnectPushAsync para reconectar manualmente após a recuperação da rede.

  • onSendDataTimeout: Tempo limite de envio de dados esgotado. Verifique a rede e, em seguida, pare e reinicie a ingestão de stream.

  • onPushURLAuthenticationOverdue: Autenticação da URL de ingestão expirada. Forneça uma nova URL para o SDK.

Callbacks de erro

  • onSystemError: Erro de sistema ou dispositivo. Descarte o mecanismo e tente novamente.

  • onSDKError: Trate com base no código de erro:

    • Erro 805438211: Baixo desempenho do dispositivo com baixa taxa de quadros de codificação. Notifique o streamer e pare operações intensivas em recursos, como retoque avançado.

    • Trate erros de permissão ausente: 268455940 (microfone) e 268455939 (câmera).

    • Registre todos os outros erros.

Callbacks de música de fundo

  • onOpenFailed: Falha ao iniciar a música de fundo. Verifique o caminho e o formato do arquivo e, em seguida, chame startBGMAsync novamente.

  • onDownloadTimeout: Tempo limite de reprodução de música esgotado, geralmente ao transmitir de uma URL. Verifique a rede e chame startBGMAsync novamente.

Métodos e APIs comuns

Métodos comuns

/* In Custom mode, you can adjust the minimum and target bitrates in real time. */
mAlivcLivePusher.setTargetVideoBitrate(800);
mAlivcLivePusher.setMinVideoBitrate(400);
/* Check if the camera supports autofocus. */
mAlivcLivePusher.isCameraSupportAutoFocus();
/* Check if the camera supports flash. */
mAlivcLivePusher.isCameraSupportFlash();
/* Get the current stream ingest status. */
mAlivcLivePusher.isPushing(); 
/* Get the ingest URL. */
mAlivcLivePusher.getPushUrl();
/* Get stream ingest performance and debugging information. For details on performance parameters, see the API reference or interface comments. */
mAlivcLivePusher.getLivePushStatsInfo();
/* Get the SDK version number. */
mAlivcLivePusher.getSDKVersion();
/* Set the log level to filter debugging information as needed. */
mAlivcLivePusher.setLogLevel(AlivcLivePushLogLevelAll);
/* Get the current status of the SDK. */
mAlivcLivePusher.getCurrentStatus();
/* Get the last error code. Returns ALIVC_COMMON_RETURN_SUCCESS if there are no errors. */
mAlivcLivePusher.getLastError();

APIs comuns

Classe

Descrição

AlivcLivePushConfig

Configuração inicial para ingestão de stream.

AlivcLivePusher

Classe para recursos de ingestão de stream.

AlivcLivePusherErrorListener

Callback para erros.

AlivcLivePusherNetworkListener

Callback para notificações relacionadas à rede.

AlivcLivePusherInfoListener

Callback para informações de ingestão de stream.

AlivcLivePusherBGMListener

Callback para música de fundo.

AlivcLivePushCustomFilter

Callback para filtros personalizados.

AlivcLivePushCustomDetect

Callback para reconhecimento facial personalizado.

AlivcSnapshotListener

Callback para snapshots.

Integrar retoque

Importe a biblioteca de retoque e configure callbacks para ativar o retoque.

Nota

O retoque requer uma licença para o SDK de retoque. Obter uma licença para Queen SDK.

  1. Importe a biblioteca de retoque via Maven. Adicione o seguinte ao seu arquivo build.gradle. Verifique a versão mais recente do SDK no Demo.

    implementation "com.aliyun.maliang.android:queen:2.5.0-official-full"
    implementation("com.aliyun.maliang.android:queen_menu:2.5.0-official-full") {
        exclude group: 'com.aliyun.maliang.android', module: 'queen'
    }

    Você também pode integrar o módulo LiveBeauty do demo:

    Arquivo ou pasta

    Descrição

    live_beauty

    A classe abstrata base para retoque.

    queen_beauty

    Controles básicos de UI para retoque.

  2. Obtenha a biblioteca de plug-in de retoque LiveBeauty.

    1. Use o comando clone para baixar o código da biblioteca de plug-in relacionada do caminho LiveBeauty para sua máquina local.

      git clone https://github.com/MediaBox-Demos/amdemos-android-live.git
    2. Abra a linha de comando no diretório raiz do seu projeto Android Studio. Execute o código a seguir e, em seguida, use File > New > Import Module para importar o módulo LiveBeauty para o seu projeto Android.

      git submodule add https://github.com/MediaBox-Demos/amdemos-android-live.git ***/***/***
      Nota

      No código de exemplo, */**** é um espaço reservado para o caminho do módulo LiveBeauty.

    3. No arquivo settings.gradle do projeto, adicione o caminho do módulo:

      include ':app', ':LiveBeauty', ':LiveBeauty:live_queenbeauty'
      Nota

      No código de exemplo, "app" é o módulo principal.

    4. Além disso, no arquivo build.gradle do módulo principal do projeto, adicione uma dependência no módulo LiveBeauty:

      dependencies {
          implementation project(':LiveBeauty')
          implementation project(':LiveBeauty:live_queenbeauty')
      }
    5. Clique em File > Sync Project with Gradle Files. Após a sincronização do Gradle ser concluída, você pode usar o módulo LiveBeauty.

  3. Configure o módulo de UI do plug-in de retoque.

    1. Adicione o controle QueenBeautyMenu ao arquivo XML de layout do seu projeto. Por exemplo:

      <com.aliyunsdk.queen.menu.QueenBeautyMenu
          android:id="@+id/beauty_beauty_menuPanel"
          android:layout_width="match_parent"
          android:layout_height="wrap_content"
          android:layout_alignParentBottom="true"
          android:layout_centerHorizontal="true" />
    2. Inicialize QueenBeautyMenu na Activity. Por exemplo:

      // Initialize the retouching menu panel.
      QueenMenuPanel beautyMenuPanel = QueenBeautyMenu.getPanel(context);
      beautyMenuPanel.onHideMenu(); 
      beautyMenuPanel.onHideValidFeatures(); 
      beautyMenuPanel.onHideCopyright(); 
      
      // Add the retouching menu to the layout.
      QueenBeautyMenu beautyBeautyContainerView = findViewById(R.id.beauty_beauty_menuPanel);
      beautyBeautyContainerView.addView(beautyMenuPanel);
  4. Defina callbacks de reconhecimento facial e retoque.

    Se você precisar integrar uma biblioteca de retoque de terceiros, defina os callbacks setCustomDetect e setCustomFilter.

    • Em customDetectProcess, o parâmetro data é um ponteiro para dados capturados para processamento de terceiros.

    • Em customFilterProcess, o parâmetro inputTexture é a textura da imagem para processamento. Retorne o ID da textura processada ou o inputTexture original se não modificado.

    Código de exemplo

    /**
     * Facial recognition callback.
     */
    mAlivcLivePusher.setCustomDetect(new AlivcLivePushCustomDetect() {
        @Override
        public void customDetectCreate() {
    
        }
    
        @Override
        public long customDetectProcess(long dataPtr, int width, int height, int rotation, int format, long extra) {
            return 0;
        }
    
        @Override
        public void customDetectDestroy() {
    
        }
    });
    
    /**
     * Retouching callback.
     */
     
    /**
     * Initialize BeautyManager.
     */
    mAlivcLivePusher.setCustomFilter(new AlivcLivePushCustomFilter() {
        @Override
        public void customFilterCreate() {
            initBeautyManager();
        }
    
    /**
     * Process the ingested video stream and add retouching effects.
     */
        @Override
        public int customFilterProcess(int inputTexture, int textureWidth, int textureHeight, long extra) {
            if (mBeautyManager == null) {
                return inputTexture;
            }
    
            return mBeautyManager.onTextureInput(inputTexture, textureWidth, textureHeight);
        }
    
        @Override
        public void customFilterDestroy() {
            destroyBeautyManager();
        }
    });

Notas de uso

Item

Descrição

Regras de ofuscação

Adicione o nome do pacote do SDK à sua lista de exclusão do ProGuard para evitar problemas de ofuscação.

-keep class com.alivc.** { *;}

Sequência de chamadas de API

  • Use APIs assíncronas para evitar bloquear a thread principal.

  • As APIs do SDK lançam exceções em caso de erros ou ordem incorreta de chamadas. Envolva as chamadas em blocos try-catch.

  • Chame as APIs na ordem mostrada no diagrama a seguir:

    image

FAQ

Por que a ingestão de stream falha?

Use a ferramenta de solução de problemas para validar sua URL de ingestão.

Como posso obter informações sobre streams ativos?

Visualize e gerencie streams ativos na página de gerenciamento de streams.

Como testo a reprodução do stream?

Teste a reprodução com um player Alibaba Cloud, FFplay ou VLC após iniciar a ingestão. Gerar URLs de ingestão e streaming.