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
Procedimento
Uso dos recursos
Registrar o SDK
Para obter e configurar uma licença, integre uma licença do Push SDK.
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
AlivcLiveBasepara definir níveis de log, especificar caminhos de log locais e obter a versão do SDK.Chame o método
registerSDKem AlivcLiveBase para registrar a licença do SDK.-
Implemente o callback
onLicenceCheckna interfaceAlivcLiveBase#setListenerpara verificar a configuração da licença de forma assíncrona.NotaEste 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");
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
-
Inicialize.
Chame o método
initapós configurar os parâmetros de ingestão de stream:AlivcLivePusher mAlivcLivePusher = new AlivcLivePusher(); mAlivcLivePusher.init(mContext, mAlivcLivePushConfig);NotaAlivcLivePushernão suporta múltiplas instâncias. Cada chamada ainitdeve ter uma chamada correspondente adestroy. -
Registre callbacks de pré-visualização.
Chame o método
setLivePushInfoListenerpara 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 //.... //.... }); -
Inicie a pré-visualização.
Inicie a pré-visualização passando o
SurfaceViewpara 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. -
Inicie a ingestão de stream.
Adicione o seguinte código dentro do método de callback onPreviewStarted.
mAlivcLivePusher.startPush(mPushUrl);NotaURLs 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);
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);
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.
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:
-
O streamer tem uma pré-visualização da câmera.
Tanto o streamer quanto os espectadores podem ver a imagem da câmera.
-
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.
Defina a proporção do
surfaceViewde 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
surfaceViewquando a tela girar e, em seguida, chamestopCameraseguido porstartCamera.Se o streamer não precisar de uma pré-visualização, defina
surfaceviewcomo 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.
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.
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.
A resolução adaptativa funciona apenas no modo Prioridade de Resolução ou Prioridade de Fluidez, não no Modo Personalizado.
Alguns players não suportam alterações dinâmicas de resolução. Use um player Alibaba Cloud para compatibilidade.
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);
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()ouresume()deAlivcLivePusherpara 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 |
|
AlivcLivePushInfoListener |
|
|
|
AlivcLivePushNetworkListener |
|
|
|
AlivcLivePushErrorListener |
|
|
|
AlivcLivePushBGMListener |
|
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
onPushStartedeonFirstFramePushedindicam 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, acionandoonReconnectStart. Se as tentativas excederemconfig.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. ChamemAlivcLivePusher.reconnectPushAsyncpara 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, chamestartBGMAsyncnovamente.onDownloadTimeout: Tempo limite de reprodução de música esgotado, geralmente ao transmitir de uma URL. Verifique a rede e chamestartBGMAsyncnovamente.
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.
O retoque requer uma licença para o SDK de retoque. Obter uma licença para Queen SDK.
-
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.
-
Obtenha a biblioteca de plug-in de retoque LiveBeauty.
-
Use o comando
clonepara 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 -
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 Modulepara importar o móduloLiveBeautypara o seu projeto Android.git submodule add https://github.com/MediaBox-Demos/amdemos-android-live.git ***/***/***NotaNo código de exemplo, */**** é um espaço reservado para o caminho do módulo
LiveBeauty. -
No arquivo
settings.gradledo projeto, adicione o caminho do módulo:include ':app', ':LiveBeauty', ':LiveBeauty:live_queenbeauty'NotaNo código de exemplo, "app" é o módulo principal.
-
Além disso, no arquivo
build.gradledo módulo principal do projeto, adicione uma dependência no móduloLiveBeauty:dependencies { implementation project(':LiveBeauty') implementation project(':LiveBeauty:live_queenbeauty') } Clique em
File > Sync Project with Gradle Files. Após a sincronização do Gradle ser concluída, você pode usar o móduloLiveBeauty.
-
-
Configure o módulo de UI do plug-in de retoque.
-
Adicione o controle
QueenBeautyMenuao 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" /> -
Inicialize
QueenBeautyMenuna 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);
-
-
Defina callbacks de reconhecimento facial e retoque.
Se você precisar integrar uma biblioteca de retoque de terceiros, defina os callbacks
setCustomDetectesetCustomFilter.Em
customDetectProcess, o parâmetrodataé um ponteiro para dados capturados para processamento de terceiros.Em
customFilterProcess, o parâmetroinputTextureé a textura da imagem para processamento. Retorne o ID da textura processada ou oinputTextureoriginal se não modificado.
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.
|
|
Sequência de chamadas de API |
|
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.