Integre o ApsaraVideo Live Push SDK ao seu aplicativo Android para capturar entradas de câmera e microfone e enviar um stream ao vivo para um endpoint de ingestão.
Como funciona
O Push SDK gerencia todo o pipeline, da captura de mídia à entrega:
O SDK captura vídeo da câmera e áudio do microfone.
O aplicativo chama o SDK para inicializar um stream de envio com a URL de ingestão do ApsaraVideo Live.
O SDK codifica e transmite o stream para o endpoint de ingestão em tempo real.
Os espectadores conectam-se à URL de reprodução para assistir ao stream ao vivo.
Pré-requisitos
Antes de começar, certifique-se de ter:
Conta Alibaba Cloud com o ApsaraVideo Live ativado
Projeto Android direcionado ao Android 5.0 (API level 21) ou superior
Android Studio 3.0 ou superior
URL de ingestão válida obtida no console do ApsaraVideo Live
Integrar o SDK
Adicionar a dependência Maven
O Push SDK é distribuído via Maven. Adicione a dependência conforme a versão do seu Android Gradle Plugin (AGP).
Para AGP 7.1.0 ou superior, adicione o repositório Maven no arquivo settings.gradle:
dependencyResolutionManagement {
repositories {
maven { url 'https://maven.aliyun.com/repository/central' }
}
}
Para versões do AGP anteriores à 7.1.0, adicione o repositório Maven no arquivo build.gradle do nível do projeto:
allprojects {
repositories {
maven { url 'https://maven.aliyun.com/repository/central' }
}
}
Se dependencyResolutionManagement não estiver presente no arquivo settings.gradle, sua versão do AGP é anterior à 7.1.0. Nesse caso, use a abordagem via build.gradle.
Em seguida, adicione a dependência do SDK no arquivo build.gradle do nível do aplicativo:
dependencies {
implementation 'com.aliyun.video.android:pusher:x.x.x'
}
Substitua x.x.x pela versão mais recente do SDK. Para verificar a versão atual, consulte as notas de lançamento do ApsaraVideo Live.
Declarar permissões
Adicione as seguintes permissões ao arquivo AndroidManifest.xml:
<!-- Camera access for video capture -->
<uses-permission android:name="android.permission.CAMERA" />
<!-- Microphone access for audio capture -->
<uses-permission android:name="android.permission.RECORD_AUDIO" />
<!-- Network access for stream delivery -->
<uses-permission android:name="android.permission.INTERNET" />
<!-- Network state detection for adaptive bitrate -->
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<!-- Wi-Fi state detection -->
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<!-- Read local media files -->
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<!-- Keep screen on during streaming -->
<uses-permission android:name="android.permission.WAKE_LOCK" />
<!-- Background streaming support -->
<uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
No Android 6.0 (API level 23) e superior, as permissões CAMERA e RECORD_AUDIO são classificadas como perigosas e exigem solicitação em tempo de execução. Solicite-as antes de iniciar o stream de envio.
Configure o ProGuard
Se o aplicativo usar redução de código, adicione as regras abaixo ao arquivo de configuração do ProGuard:
-keep class com.alivc.** { *; }
-keep class com.aliyun.** { *; }
-dontwarn com.alivc.**
-dontwarn com.aliyun.**
Iniciar um stream de envio
Inicializar o pusher
Crie uma instância de AlivcLivePusher e configure-a com AlivcLivePushConfig:
Java
AlivcLivePushConfig config = new AlivcLivePushConfig();
config.setResolution(AlivcResolutionEnum.RESOLUTION_540P);
config.setFps(AlivcFpsEnum.FPS_20);
config.setEnableBitrateControl(true);
AlivcLivePusher pusher = new AlivcLivePusher();
pusher.init(context, config);
Kotlin
val config = AlivcLivePushConfig().apply {
resolution = AlivcResolutionEnum.RESOLUTION_540P
fps = AlivcFpsEnum.FPS_20
isEnableBitrateControl = true
}
val pusher = AlivcLivePusher()
pusher.init(context, config)
Adicionar uma superfície de pré-visualização
Vincule uma SurfaceView ao pusher para exibir a pré-visualização da câmera:
Java
SurfaceView previewView = findViewById(R.id.preview_surface);
pusher.startPreview(previewView);
Kotlin
val previewView = findViewById<SurfaceView>(R.id.preview_surface)
pusher.startPreview(previewView)
Iniciar e parar a transmissão
Chame startPush com a URL de ingestão para começar a transmitir. Substitua <your-ingest-domain> e <stream-name> pelos valores correspondentes no console do ApsaraVideo Live.
Java
String ingestUrl = "rtmp://<your-ingest-domain>/live/<stream-name>";
pusher.startPush(ingestUrl);
Kotlin
val ingestUrl = "rtmp://<your-ingest-domain>/live/<stream-name>"
pusher.startPush(ingestUrl)
Para interromper o stream e liberar recursos:
Java
pusher.stopPush();
pusher.destroy();
Kotlin
pusher.stopPush()
pusher.destroy()
Gerenciar o ciclo de vida do pusher
Chame os métodos a seguir nos callbacks de ciclo de vida da Activity para evitar vazamento de recursos:
Java
@Override
protected void onResume() {
super.onResume();
pusher.resumePush();
}
@Override
protected void onPause() {
super.onPause();
pusher.pausePush();
}
@Override
protected void onDestroy() {
super.onDestroy();
pusher.stopPush();
pusher.destroy();
}
Kotlin
override fun onResume() {
super.onResume()
pusher.resumePush()
}
override fun onPause() {
super.onPause()
pusher.pausePush()
}
override fun onDestroy() {
super.onDestroy()
pusher.stopPush()
pusher.destroy()
}
Verifique o stream
Após chamar startPush, confirme se o stream está ativo:
Acesse o console do ApsaraVideo Live.
Navegue até Live Management > Streams.
Verifique se o nome do stream aparece na lista de streams ativos.
Teste a reprodução usando a URL de reprodução em um player de mídia ou navegador.
Próximas etapas
Configure qualidade e taxa de bits do stream — ajuste resolução, taxa de quadros e bitrate para diferentes condições de rede.
Adicionar filtros de beleza — aplique embelezamento facial e filtros em tempo real.
Tratar eventos e erros de envio — implemente
AlivcLivePusherErrorListenerpara monitorar a integridade do stream e recuperar-se de falhas.