Découvrez comment enregistrer, configurer et utiliser le Push SDK pour Android afin d'ingérer des flux en direct, avec des exemples pour la capture caméra, le partage d'écran, les retouches et bien plus encore.
Fonctionnalités
Prend en charge l'ingestion de flux via le protocole Real-Time Messaging Protocol (RTMP).
Prend en charge l'ingestion et la lecture de flux RTS basées sur la communication en temps réel (RTC).
Prend en charge la diffusion conjointe et les battles.
Utilise le codec H.264 pour l'encodage vidéo et AAC pour l'encodage audio.
Permet de personnaliser la configuration de fonctionnalités telles que le contrôle du débit binaire, la résolution et le mode d'affichage.
Prend en charge diverses opérations de caméra.
Offre des retouches en temps réel et des effets de retouche personnalisés.
Permet d'ajouter et de supprimer des autocollants animés sous forme de filigranes.
Permet de diffuser des enregistrements d'écran.
Prend en charge les entrées audio et vidéo externes dans différents formats, tels que YUV et PCM (modulation par impulsions et codage).
Prend en charge le mixage de plusieurs flux.
Permet l'ingestion de flux audio uniquement, vidéo uniquement, ainsi que l'ingestion de flux en arrière-plan.
Prend en charge la musique de fond.
Prend en charge la capture d'instantanés vidéo.
Gère automatiquement la reconnexion et les erreurs.
Intègre les algorithmes de contrôle automatique du gain (AGC), de réduction automatique du bruit (ANR) et d'annulation d'écho acoustique (AEC).
Permet de basculer entre les modes d'encodage logiciel et matériel pour les fichiers vidéo, améliorant ainsi la stabilité du module d'encodage.
Limitations
Tenez compte des limitations suivantes avant d'utiliser le Push SDK pour Android :
Vous devez configurer l'orientation de l'écran avant l'ingestion du flux. Il est impossible de faire pivoter l'écran pendant le streaming en direct.
Vous devez désactiver la rotation automatique de l'écran pour l'ingestion de flux en mode paysage.
En mode d'encodage matériel, la valeur de la résolution de sortie doit être un multiple de 16 pour assurer la compatibilité avec l'encodeur. Par exemple, si vous définissez la résolution sur 540p, la résolution de sortie sera de 544 × 960. Vous devez adapter la taille de l'écran du lecteur à la résolution de sortie pour éviter l'apparition de bandes noires.
Référence de l'API
Procédure
Utilisation des fonctionnalités
Enregistrer le SDK
Pour obtenir et configurer une licence, intégrez une licence Push SDK.
L'enregistrement du SDK est obligatoire avant toute utilisation des fonctionnalités d'ingestion de flux.
Appelez l'API d'enregistrement de licence au début du cycle de vie de votre application, avant d'utiliser le Push SDK pour Android.
AlivcLiveBase.setListener(new AlivcLiveBaseListener() {
@Override
public void onLicenceCheck(AlivcLivePushConstants.AlivcLiveLicenseCheckResultCode result, String reason) {
Log.e(TAG, "onLicenceCheck: " + result + ", " + reason);
}
});
AlivcLiveBase.registerSDK();
Utilisez la classe
AlivcLiveBasepour définir les niveaux de journalisation, spécifier les chemins d'accès locaux aux journaux et obtenir la version du SDK.Vous devez appeler la méthode
registerSDKdans AlivcLiveBase pour enregistrer la licence du SDK.-
Implémentez le rappel
onLicenceCheckdans l'interfaceAlivcLiveBase#setListenerpour vérifier de manière asynchrone la configuration de la licence.RemarqueCe rappel n'est déclenché qu'après l'initialisation de l'instance de l'outil de push.
Configurer les paramètres d'ingestion de flux
Les paramètres d'ingestion de flux disposent de valeurs par défaut qui ne nécessitent aucune configuration supplémentaire.
// 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");
Définissez la résolution sur 540p pour obtenir un équilibre optimal entre les performances de l'appareil et la bande passante.
La désactivation du contrôle du débit binaire fige le débit à sa valeur initiale sans adaptation aux conditions réseau, ce qui peut provoquer des saccades lors de la lecture.
Ingérer un flux caméra
-
Initialisation.
Appelez la méthode
initaprès avoir configuré les paramètres d'ingestion de flux :AlivcLivePusher mAlivcLivePusher = new AlivcLivePusher(); mAlivcLivePusher.init(mContext, mAlivcLivePushConfig);RemarqueAlivcLivePusherne prend pas en charge les instances multiples. Chaque appel àinitdoit être associé à un appel àdestroy. -
Enregistrez les rappels de prévisualisation.
Appelez la méthode
setLivePushInfoListenerpour enregistrer les rappels de prévisualisation :/** * 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 //.... //.... }); -
Démarrez la prévisualisation.
Démarrez la prévisualisation en transmettant le
SurfaceViewpour la prévisualisation de la caméra :mAlivcLivePusher.startPreview(mSurfaceView); // Starts the preview. You can also call the asynchronous startPreviewAsync method based on your needs. -
Démarrez l'ingestion de flux.
Ajoutez le code suivant dans la méthode de rappel onPreviewStarted.
mAlivcLivePusher.startPush(mPushUrl);RemarqueLes URL d'ingestion pour RTMP et RTS (artc://) sont prises en charge. Pour obtenir les URL, consultez la section Générer des URL d'ingestion et de diffusion.
ApsaraVideo Live rejette les demandes d'ingestion de flux concurrentes vers la même URL.
Méthodes courantes d'ingestion de flux
Le SDK fournit des méthodes pour contrôler le cycle de vie du flux : démarrage, arrêt, pause, reprise, redémarrage, reconnexion et suppression.
/* 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();
Opérations de caméra
Basculez entre les caméras, activez ou désactivez le flash, et ajustez la mise au point, le zoom et la mise en miroir pendant l'ingestion de flux, la pause ou la reconnexion :
/* 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);
Les API de caméra sont disponibles uniquement après le démarrage de la prévisualisation.
Ingérer un flux de partage d'écran
Le partage d'écran utilise MediaProjection et nécessite l'autorisation de l'utilisateur. Transmettez les données de résultat de l'autorisation au SDK. La caméra est désactivée par défaut pendant le partage d'écran.
Configurer le partage d'écran
// resultData is the screen sharing system intent.
mAlivcLivePushConfig.setMediaProjectionPermissionResultData(resultData);
Configurer la rotation de l'écran
Définissez l'angle de rotation de l'écran pour prendre en charge l'enregistrement en mode paysage et portrait pendant le partage d'écran :
mAlivcLivePusher.setScreenOrientation(0);
Vous devez écouter l'événement OrientationEventListener au niveau de la couche application et définir l'angle de rotation via cette API lorsque l'orientation de l'écran change.
Configurer la protection de la vie privée
Activez la protection de la vie privée pendant le partage d'écran pour masquer les saisies sensibles, telles que les mots de passe :
mAlivcLivePusher.pauseScreenCapture(); // Enable privacy protection.
mAlivcLivePusher.resumeScreenCapture(); // Disable privacy protection.
Cette action met en pause le partage d'écran. Si setPausePushImage est défini dans la configuration, les spectateurs voient l'image spécifiée. Sinon, ils voient la dernière image avant la pause.
Ingérer des flux caméra et de partage d'écran
Vous pouvez activer l'ingestion caméra pendant le partage d'écran. Deux approches sont disponibles :
-
Le diffuseur dispose d'une prévisualisation caméra.
Le diffuseur et les spectateurs peuvent tous deux voir le flux de la caméra.
-
Le diffuseur ne dispose pas de prévisualisation caméra.
Par exemple, lors d'une diffusion de jeu, le diffuseur peut ne pas souhaiter que la vue de la caméra obstrue le jeu. Cependant, les spectateurs peuvent toujours voir le flux de la caméra du diffuseur dans le flux final.
Le diffuseur peut voir la prévisualisation caméra
Une fois le partage d'écran démarré, appelez l'API pour démarrer ou arrêter la prévisualisation caméra.
mAlivcLivePusher.startCamera(surfaceView); // Start the camera preview.
mAlivcLivePusher.stopCamera(); // Stop the camera preview.
Définissez le rapport d'aspect de la prévisualisation caméra
surfaceViewsur 1:1 pour éviter les ajustements lors de la rotation de l'écran.Si le rapport d'aspect n'est pas de 1:1, vous devez ajuster le ratio du
surfaceViewlors de la rotation de l'écran, puis appelerstopCamerasuivi destartCamera.Si le diffuseur n'a pas besoin de prévisualisation, définissez
surfaceviewsur null.
Le diffuseur ne peut pas voir la prévisualisation caméra
Activez le mixage du flux caméra pour inclure le flux de la caméra dans la diffusion sans prévisualisation locale.
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.
Mode d'affichage de la prévisualisation
Trois modes d'affichage de prévisualisation sont disponibles. Le mode d'affichage n'affecte pas l'ingestion de flux.
ALIVC_LIVE_PUSHER_PREVIEW_SCALE_FILL : La vidéo remplit la fenêtre de prévisualisation. Si les rapports d'aspect de la vidéo et de la fenêtre diffèrent, la prévisualisation apparaît déformée.
ALIVC_LIVE_PUSHER_PREVIEW_ASPECT_FIT : Le rapport d'aspect de la vidéo est préservé. Si les rapports d'aspect de la vidéo et de la fenêtre diffèrent, des bandes noires apparaissent dans la prévisualisation.
ALIVC_LIVE_PUSHER_PREVIEW_ASPECT_FILL : La vidéo est recadrée pour s'adapter au rapport d'aspect de la fenêtre. Si les rapports d'aspect diffèrent, la vidéo est recadrée.
Le code suivant fournit un exemple :
mAlivcLivePushConfig.setPreviewDisplayMode(AlivcPreviewDisplayMode.ALIVC_LIVE_PUSHER_PREVIEW_ASPECT_FIT);
Ingestion de flux d'images
Le SDK peut ingérer une image de remplacement lorsque l'application est en arrière-plan ou que le réseau est de mauvaise qualité.
Lorsque l'application passe en arrière-plan, l'ingestion vidéo est mise en pause tandis que l'audio continue. Affichez une image de remplacement pour informer les spectateurs :
mAlivcLivePushConfig.setPausePushImage("path/to/background.png"); // Set the image for background stream ingest.
Le SDK ingère cette image lorsqu'il détecte un faible débit binaire, réduisant ainsi les saccades vidéo :
mAlivcLivePushConfig.setNetworkPoorPushImage("path/to/network_poor.png"); // Set the image to ingest in poor network conditions.
Ingestion de flux audio uniquement
mAlivcLivePushConfig.setAudioOnly(true);
Ingérer des flux audio et vidéo externes
Le SDK prend en charge l'ingestion d'audio et de vidéo provenant de sources externes, telles que des fichiers vidéo.
Activez d'abord l'entrée audio et vidéo personnalisée :
L'ingestion de flux audio et vidéo externes est prise en charge à partir du SDK 7.8.0. Les opérations principales sont setExternMainStream (active l'entrée audio et vidéo personnalisée), inputStreamAudioData (ingère un flux audio externe) et inputStreamVideoData (ingère un flux vidéo externe). Le SDK 7.11.0 optimise principalement la logique d'expiration de l'authentification client et ajoute un rappel d'erreur de capture vidéo ; il n'introduit pas l'ingestion de flux externes, vous n'avez donc pas besoin de mettre à niveau uniquement pour cette fonctionnalité.
/**
* 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);
Après avoir activé l'entrée audio et vidéo personnalisée, vous pouvez ingérer des flux externes.
Ingérer un flux audio externe
/**
* 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);
Ingérer un flux vidéo externe
/**
* 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);
Le Push SDK ne prend pas en charge le protocole RTSP. Pour ingérer un flux RTSP depuis une caméra réseau (caméra IP), décodez d'abord le flux au format YUV/PCM, puis ingérez-le à l'aide des API inputStreamAudioData/inputStreamVideoData.
Outils de décodage disponibles :
FFmpeg : Prend en charge l'entrée RTSP et peut décoder en YUV420p et PCM s16le. Exemple de commande :
ffmpeg -rtsp_transport tcp -i rtsp://camera_ip/stream -an -c:v rawvideo -pix_fmt yuv420p output.yuvGStreamer : Prend en charge l'entrée RTSP et peut décoder en YUV420p et PCM s16le.
MediaCodec : Une API du framework Android (
android.media.MediaCodec) qui prend en charge le décodage matériel H.264 vers YUV à partir d'Android 4.1 (niveau d'API 16).
Le format des données décodées doit correspondre à votre configuration SDK : définissez le format vidéo sur IMAGE_FORMAT_YUVNV12 et le format audio sur SOUND_FORMAT_S16.
Configurer les filigranes
Ajoutez un ou plusieurs filigranes au format PNG :
mAlivcLivePushConfig.addWaterMark(waterPath,0.1,0.2,0.3); // Add a watermark.
Les paramètres x, y et width sont des valeurs relatives. Par exemple, x=0,1 signifie que la coordonnée x du filigrane se situe à 10 % de la largeur du flux. Si la résolution du flux est de 540x960, la coordonnée x du filigrane sera de 54.
La hauteur de l'image du filigrane est mise à l'échelle proportionnellement en fonction de son rapport d'aspect d'origine et de la valeur de largeur fournie.
Pour implémenter un filigrane textuel, convertissez d'abord le texte en image, puis utilisez cette API pour l'ajouter en tant que filigrane.
Configurer la qualité vidéo
Trois modes de qualité vidéo sont pris en charge : mode Priorité à la résolution, mode Priorité à la fluidité et mode Personnalisé.
Pour définir la qualité vidéo, vous devez activer le contrôle du débit binaire : mAlivcLivePushConfig.setEnableBitrateControl(true);
Mode Priorité à la résolution (par défaut)
Le SDK privilégie la clarté vidéo en configurant automatiquement les paramètres de débit binaire.
mAlivcLivePushConfig.setQualityMode(AlivcQualityModeEnum.QM_RESOLUTION_FIRST); // Prioritize resolution.
Mode Priorité à la fluidité
Le SDK privilégie la fluidité vidéo en configurant automatiquement les paramètres de débit binaire.
mAlivcLivePushConfig.setQualityMode(AlivcQualityModeEnum.QM_FLUENCY_FIRST); // Prioritize fluency.
Mode Personnalisé
Le SDK utilise vos paramètres de débit binaire. Définissez les valeurs de débit binaire initial, minimum et cible.
Débit binaire cible : Dans de bonnes conditions réseau, le débit binaire augmente progressivement jusqu'au débit cible pour améliorer la clarté vidéo.
Débit binaire minimum : Dans de mauvaises conditions réseau, le débit binaire diminue progressivement jusqu'au débit minimum pour réduire les saccades vidéo.
Débit binaire initial : Le débit binaire au début du streaming en direct.
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
Reportez-vous aux paramètres de débit binaire recommandés suivants :
Tableau 1. Paramètres recommandés pour le mode Priorité à la résolution
|
Résolution |
initialVideoBitrate |
minVideoBitrate |
targetVideoBitrate |
|
360p |
600 |
300 |
1000 |
|
480p |
800 |
300 |
1200 |
|
540p |
1000 |
600 |
1400 |
|
720p |
1500 |
600 |
2000 |
|
1080p |
1800 |
1200 |
2500 |
Tableau 1. Paramètres recommandés pour le mode Priorité à la fluidité
|
Résolution |
initialVideoBitrate |
minVideoBitrate |
targetVideoBitrate |
|
360p |
400 |
200 |
600 |
|
480p |
600 |
300 |
800 |
|
540p |
800 |
300 |
1000 |
|
720p |
1000 |
300 |
1200 |
|
1080p |
1500 |
1200 |
2200 |
Résolution adaptative
La résolution adaptative réduit automatiquement la résolution lorsque les conditions réseau sont dégradées afin d'améliorer la fluidité :
mAlivcLivePushConfig.setEnableAutoResolution(true); // Enable adaptive resolution. Default is false.
La résolution adaptative fonctionne uniquement en mode Priorité à la résolution ou Priorité à la fluidité, et non en mode Personnalisé.
Certains lecteurs ne prennent pas en charge les changements dynamiques de résolution. Utilisez un lecteur Alibaba Cloud pour garantir la compatibilité.
Musique de fond
Le SDK prend en charge la lecture de musique de fond, le mixage audio, la réduction du bruit, la surveillance in-ear (retour casque) et la mise en sourdine :
/* 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);
Les API de musique de fond sont disponibles uniquement après le démarrage de l'aperçu.
Capture d'écran du flux
Effectuez une capture d'écran du flux vidéo 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();
}
}
});
Exécution en arrière-plan et verrouillage de l'écran
Lorsque votre application passe en arrière-plan ou que l'écran est verrouillé, appelez les méthodes
pause()ouresume()deAlivcLivePusherpour suspendre ou reprendre l'ingestion de flux.Pour les appels audio et vidéo hors système, le SDK capture et ingère le son. Selon vos besoins métier, utilisez l'API
mAlivcLivePusher.setMute(true or false)pour déterminer si l'audio doit être capturé lorsque l'application est en arrière-plan ou que l'écran est verrouillé.
Rappels (Callbacks)
|
Type de rappel |
Nom de la classe de rappel |
Méthode de configuration |
|
AlivcLivePushInfoListener |
|
|
|
AlivcLivePushNetworkListener |
|
|
|
AlivcLivePushErrorListener |
|
|
|
AlivcLivePushBGMListener |
|
Rappels d'ingestion de flux
Les rappels d'ingestion de flux notifient l'application des changements d'état du SDK : démarrage de l'aperçu, rendu de la première image, envoi de la première image, démarrage de l'ingestion et arrêt de l'ingestion.
onPushStarted: indique une connexion réussie au serveur.onFirstFramePushed: indique que la première image audio ou vidéo a été envoyée avec succès.Les rappels
onPushStartedetonFirstFramePushedconfirment que le SDK a démarré l'ingestion de flux avec succès.
Rappels liés au réseau
Les rappels réseau signalent l'état de la connexion. Le SDK tente automatiquement de se reconnecter lors de brèves fluctuations du réseau, dans les limites de délai et de tentatives définies dans AlivcLivePushConfig.
onConnectFail: l'ingestion de flux a échoué. Vérifiez la validité de l'URL d'ingestion, les problèmes d'authentification, les limites de flux simultanés ou le statut de liste de blocage. Codes d'erreur : 0x30020901–0x30020905, 0x30010900–0x30010901.onConnectionLost: perte de connexion. Le SDK tente automatiquement de se reconnecter, ce qui déclencheonReconnectStart. Si le nombre de tentatives dépasseconfig.connectRetryCount,onReconnectFailest appelé.onNetworkPoor: le réseau est insuffisant pour une ingestion stable, mais le flux n'est pas interrompu. Utilisez cet événement pour afficher une notification dans l'interface utilisateur.onNetworkRecovery: le réseau est rétabli.onReconnectFail: la reconnexion automatique a échoué après avoir dépassé les limites de délai et de tentatives définies dans AlivcLivePushConfig. AppelezmAlivcLivePusher.reconnectPushAsyncpour vous reconnecter manuellement une fois le réseau rétabli.onSendDataTimeout: délai d'envoi des données expiré. Vérifiez le réseau, puis arrêtez et redémarrez l'ingestion de flux.onPushURLAuthenticationOverdue: l'authentification de l'URL d'ingestion a expiré. Fournissez une nouvelle URL au SDK.
Rappels d'erreur
onSystemError: erreur système ou matérielle. Libérez le moteur et réessayez.-
onSDKError: gérez l'erreur en fonction du code d'erreur :Erreur 805438211 : performances matérielles insuffisantes avec un faible taux d'encodage. Informez le diffuseur et arrêtez les opérations gourmandes en ressources, telles que les retouches avancées.
Gérez les erreurs d'autorisation manquante : 268455940 (microphone) et 268455939 (caméra).
Journalisez toutes les autres erreurs.
Rappels de musique de fond
onOpenFailed: le démarrage de la musique de fond a échoué. Vérifiez le chemin d'accès au fichier et le format, puis appelez à nouveaustartBGMAsync.onDownloadTimeout: délai de lecture de la musique expiré, généralement lors de la diffusion depuis une URL. Vérifiez le réseau et appelez à nouveaustartBGMAsync.
Méthodes et API courantes
Méthodes courantes
/* 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();
API courantes
|
Classe |
Description |
|
AlivcLivePushConfig |
Configuration initiale pour l'ingestion de flux. |
|
AlivcLivePusher |
Classe pour les fonctionnalités d'ingestion de flux. |
|
AlivcLivePusherErrorListener |
Rappel pour les erreurs. |
|
AlivcLivePusherNetworkListener |
Rappel pour les notifications liées au réseau. |
|
AlivcLivePusherInfoListener |
Rappel pour les informations d'ingestion de flux. |
|
AlivcLivePusherBGMListener |
Rappel pour la musique de fond. |
|
AlivcLivePushCustomFilter |
Rappel pour les filtres personnalisés. |
|
AlivcLivePushCustomDetect |
Rappel pour la reconnaissance faciale personnalisée. |
|
AlivcSnapshotListener |
Rappel pour les captures d'écran. |
Intégrer la retouche
Importez la bibliothèque de retouche et configurez les rappels pour activer la fonctionnalité.
La retouche nécessite une licence pour le SDK de retouche. Obtenir une licence pour Queen SDK.
-
Importez la bibliothèque de retouche via Maven. Ajoutez les éléments suivants à votre fichier
build.gradle. Consultez la dernière Démo pour connaître la version du 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' }Vous pouvez également intégrer le module LiveBeauty de la démo :
Fichier ou dossier
Description
live_beauty
Classe abstraite de base pour la retouche.
queen_beauty
Contrôles d'interface utilisateur de base pour la retouche.
-
Obtenez la bibliothèque de plug-ins de retouche LiveBeauty.
-
Utilisez la commande
clonepour télécharger le code de la bibliothèque de plug-ins associée depuis le chemin LiveBeauty vers votre machine locale.git clone https://github.com/MediaBox-Demos/amdemos-android-live.git -
Ouvrez la ligne de commande dans le répertoire racine de votre projet Android Studio. Exécutez le code suivant, puis utilisez
File > New > Import Modulepour importer le moduleLiveBeautydans votre projet Android.git submodule add https://github.com/MediaBox-Demos/amdemos-android-live.git ***/***/***RemarqueDans l'exemple de code, */**** est un espace réservé pour le chemin d'accès au module
LiveBeauty. -
Dans le fichier
settings.gradledu projet, ajoutez le chemin du module :include ':app', ':LiveBeauty', ':LiveBeauty:live_queenbeauty'RemarqueDans l'exemple de code, « app » est le module principal.
-
Également, dans le fichier
build.gradledu module principal du projet, ajoutez une dépendance au moduleLiveBeauty:dependencies { implementation project(':LiveBeauty') implementation project(':LiveBeauty:live_queenbeauty') } Cliquez sur
File > Sync Project with Gradle Files. Une fois la synchronisation Gradle terminée, vous pouvez utiliser le moduleLiveBeauty.
-
-
Configurez le module d'interface utilisateur du plug-in de retouche.
-
Ajoutez le contrôle
QueenBeautyMenuau fichier XML de mise en page de votre projet. Par exemple :<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" /> -
Initialisez
QueenBeautyMenudans l'Activity. Par exemple :// 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);
-
-
Définissez les rappels de reconnaissance faciale et de retouche.
Si vous devez intégrer une bibliothèque de retouche tierce, définissez les rappels
setCustomDetectetsetCustomFilter.Dans
customDetectProcess, le paramètredataest un pointeur vers les données capturées pour le traitement tiers.Dans
customFilterProcess, le paramètreinputTextureest la texture d'image à traiter. Renvoyez l'ID de texture traité, ou lainputTextured'origine si elle n'a pas été modifiée.
Remarques d'utilisation
|
Élément |
Description |
|
Règles d'obfuscation |
Ajoutez le nom du package du SDK à votre liste d'exclusion ProGuard pour éviter les problèmes d'obfuscation.
|
|
Séquence d'appel d'API |
|
FAQ
Pourquoi l'ingestion de flux échoue-t-elle ?
Utilisez l'outil de dépannage pour valider votre URL d'ingestion.
Comment obtenir des informations sur les flux actifs ?
Consultez et gérez les flux actifs sur la page de gestion des flux.
Comment tester la lecture du flux ?
Testez la lecture avec un lecteur Alibaba Cloud, FFplay ou VLC après avoir démarré l'ingestion. Générer des URL d'ingestion et de diffusion.