Saiba como registrar, configurar e usar o Push SDK for Android para ingestão de streams ao vivo, com exemplos para captura de câmera, compartilhamento de tela, retoque e muito mais.
Recursos
Suporta ingestão de stream por meio do Real-Time Messaging Protocol (RTMP).
Suporta ingestão e pull de stream RTS com base em Real-Time Communication (RTC).
Suporta co-streaming e batalhas.
Utiliza H.264 para codificação de vídeo e AAC para codificação de áudio.
Suporta configurações personalizadas para recursos como controle de taxa de bits, resolução e modo de exibição.
Suporta diversas operações de câmera.
Suporta retoque em tempo real e efeitos de retoque personalizados.
Permite adicionar e remover adesivos animados como marcas d'água.
Permite transmitir gravações de tela.
Suporta entradas externas de áudio e vídeo em diferentes formatos, como YUV e modulação por código de pulso (PCM).
Suporta a mixagem de múltiplos streams.
Suporta a ingestão de streams apenas de áudio e apenas de vídeo, além da ingestão de stream em segundo plano.
Suporta música de fundo.
Suporta a captura de snapshot de vídeo.
Suporta reconexão automática e tratamento de erros.
Suporta os 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. Isso melhora a estabilidade do módulo de codificação.
Limitações
Observe os seguintes limites antes de usar o Push SDK for Android:
Configure a orientação da tela antes da ingestão de stream. Você não pode girar a tela durante a transmissão ao vivo.
Desative a rotação automática de tela para a ingestão de stream no modo paisagem.
No modo de codificação por hardware, o valor da resolução de saída deve ser um múltiplo de 16 para ser compatível com o codificador. Por exemplo, ao definir a resolução como 540p, a resolução de saída será 544 × 960. Dimensione o tamanho da tela do player com base na resolução de saída para evitar a exibição de barras pretas.
Referência da API
Procedimento
Uso de recursos
Registre o SDK
Para obter e configurar uma licença, integrate a Push SDK license.
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 seu 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 locais de log 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 de forma assíncrona a configuração da licença.NotaEste callback é acionado somente após a inicialização da instância do pusher.
Configure os 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 um equilíbrio ideal entre o desempenho do dispositivo e a 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.
Ingestão de 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);NotaO
AlivcLivePushernão suporta múltiplas instâncias. Cada chamada deinitdeve ser pareada com uma chamada dedestroy. -
Registre os callbacks de visualização.
Chame o método
setLivePushInfoListenerpara registrar os callbacks de 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 visualização.
Inicie a visualização passando o
SurfaceViewpara a 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 as URLs, consulte Generate ingest and streaming URLs.
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 entre câmeras, ative ou desative o flash e ajuste o foco, o zoom e o 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 somente após o início da visualização.
Ingestão de 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.
Configure o compartilhamento de tela
// resultData is the screen sharing system intent.
mAlivcLivePushConfig.setMediaProjectionPermissionResultData(resultData);
Configure a rotação de tela
Defina o ângulo de rotação da tela para suportar a 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.
Configure a proteção de privacidade
Ative a proteção de privacidade durante o compartilhamento de tela para ocultar entradas confidenciais, 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, os espectadores verão o último quadro antes da pausa.
Ingestão de streams de câmera e compartilhamento de tela
Você pode ativar a ingestão da câmera durante o compartilhamento de tela. Há duas abordagens disponíveis:
-
O streamer tem uma visualização da câmera.
Tanto o streamer quanto os espectadores podem ver o feed da câmera.
-
O streamer não tem uma 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 o feed da câmera do streamer no stream final.
O streamer pode ver a visualização da câmera
Após o início do compartilhamento de tela, chame a API para iniciar ou parar a visualização da câmera.
mAlivcLivePusher.startCamera(surfaceView); // Start the camera preview.
mAlivcLivePusher.stopCamera(); // Stop the camera preview.
Defina a proporção da
surfaceViewde 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 da
surfaceViewquando a tela girar e, em seguida, chamestopCameraseguido destartCamera.Se o streamer não precisar de uma visualização, defina
surfaceviewcomo nulo.
O streamer não pode ver a visualização da câmera
Ative a mixagem de stream da câmera para incluir o feed da câmera no stream sem uma 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 visualização
Três modos de exibição de 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 visualização. Se as proporções do vídeo e da janela forem diferentes, a 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 visualização.
ALIVC_LIVE_PUSHER_PREVIEW_ASPECT_FILL: O vídeo é cortado para caber na 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 pausa 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 ao detectar uma taxa de bits baixa, reduzindo os travamentos do 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);
Ingestão de 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 de áudio externo
/**
* 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 de vídeo externo
/**
* 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);
Configure 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 width 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.
Configure a qualidade do 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 fluidez 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 condições ruins de rede, a taxa de bits diminui gradualmente até a taxa de bits mínima para reduzir os travamentos do 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 condições ruins de rede para melhorar a fluidez:
mAlivcLivePushConfig.setEnableAutoResolution(true); // Enable adaptive resolution. Default is false.
A resolução adaptativa funciona apenas no modo Resolution Priority or Fluency Priority, não no modo Personalizado.
Alguns players não suportam alterações dinâmicas de resolução. Use um player do Alibaba Cloud para garantir compatibilidade.
Música de fundo
O SDK suporta reprodução de música de fundo, mixagem, remoçã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 somente após o início da 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()doAlivcLivePusherpara 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 o som. Com base nas suas necessidades de negócios, chame a API
mAlivcLivePusher.setMute(true or false)para determinar se o áudio deve ser capturado 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 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 reconecta automaticamente em breves flutuações de rede dentro dos limites de tempo limite e tentativas definidos em AlivcLivePushConfig.
onConnectFail: A ingestão de stream falhou. Verifique a URL de ingestão quanto à validade, 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 reconecta automaticamente, acionandoonReconnectStart. Se as tentativas excederemconfig.connectRetryCount,onReconnectFailserá 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 interface do usuário.onNetworkRecovery: A rede foi recuperada.onReconnectFail: A reconexão automática falhou após exceder os limites de tempo limite e tentativas no AlivcLivePushConfig. ChamemAlivcLivePusher.reconnectPushAsyncpara reconectar manualmente após a recuperação da rede.onSendDataTimeout: O envio de dados atingiu o tempo limite. Verifique a rede e, em seguida, pare e reinicie a ingestão de stream.onPushURLAuthenticationOverdue: A autenticação da URL de ingestão expirou. 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 que consomem muitos 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: A música de fundo falhou ao iniciar. Verifique o caminho e o formato do arquivo e, em seguida, chamestartBGMAsyncnovamente.onDownloadTimeout: A reprodução da música atingiu o tempo limite, 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. |
Integre o retoque
Importe a biblioteca de retoque e configure os callbacks para ativar o retoque.
O retoque requer uma licença para o SDK de retoque. Obtain a license for Queen SDK.
-
Importe a biblioteca de retoque via Maven. Adicione o seguinte ao seu arquivo
build.gradle. Consulte o Demo mais recente para a versão do SDK.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 da demonstração:
Arquivo ou pasta
Descrição
live_beauty
A classe abstrata base para retoque.
queen_beauty
Controles de interface do usuário base para retoque.
-
Obtenha a biblioteca do plug-in de retoque LiveBeauty.
-
Use o comando
clonepara baixar o código da biblioteca do plug-in relacionado 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 do 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 do móduloLiveBeauty:dependencies { implementation project(':LiveBeauty') implementation project(':LiveBeauty:live_queenbeauty') } Clique em
File > Sync Project with Gradle Files. Após a conclusão da sincronização do Gradle, você pode usar o móduloLiveBeauty.
-
-
Configure o módulo de interface do usuário 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 o
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 os 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 os 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 houver modificações.
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 o troubleshooting tool 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 do Alibaba Cloud, FFplay ou VLC após iniciar a ingestão. Generate ingest and streaming URLs.