Contrôle programmatique de la webcam

Avec le Bouton API personnalisé, vous pouvez contrôle de manière programmatique l’enregistreur de webcam, c’est-à-dire sans avoir la nécessite d’interagir avec les utilisateurs. Vous devez combiner le contrôle programmatique de la webcam avec le rappel de code onWebcamStatusChange, ce qui vous permettra de garder l’état dans votre code en synchronisation avec l’état actuel de l’enregistreur de webcam. L’appel process.open() du Bouton API personnalisé renvoie une Promise Javascript, qui se résout en un objet API webcam lorsque le widget Clipchamp est affiché :

<script type="text/javascript">
    var process = clipchamp({
        inputs: ['camera'], // go directly to the webcam
        enable: [
            'no-thank-you', // close widget after upload and skip final 'Thank you' screen
            'no-user-retry', // directly upload video after finishing recording
            'mobile-webcam-format-fallback' // use inline recorder in Chrome on Android
        ],
        onWebcamStatusChange: function(status) {
            // handle current webcam and recording status (optional)
        }
    });
    process.open().then(function(remote) {
        // Webcam widget is now open.
        // First check if webcam/phone camera is ready:
        remote.areRecordingDevicesReady().then(function() {
            // Webcam/camera can be used on this browser/device.
            // Now call remote.startRecording() to start recording.
        }).catch(function() {
            // webcam/camera not accessible on this browser/device
        });
    });
</script>

Nous recommandons d’appeler initialement la fonction areRecordingDevicesReady(), qui se résout si la webcam est accessible et si l’enregistrement est généralement possible. Vous pouvez utiliser cet appel comme une vérification de « pré-vol » pour confirmer que les appels suivants peuvent être éffectués. Veuillez noter que areRecordingDevicesReady peuvent nécessiter une interaction utilisateur afin d’approuver une fenêtre pop-up dans le navigateur qui invite le navigateur à approuver le domaine api.clipchamp.com afin d’avoir accès à la webcam et au microphone. Après approbation, la permission correspondante est typiquement enregistrée dans le profil du navigateur. Mais, elle peut être révoquée à tout moment quand l’utilisateur efface le contenu en cache du navigateur, en utilisant le mode incognito du navigateur, quand de nouveaux équipements deviennent disponibles ou d’autres incidents. Dès lors, cela peut être une bonne idée de faire précéder chaque invocation de l’API de contrôle programmatique de webcam par un appel areRecordingDevicesReady(). Les autres fonctions de l’API de contrôle programmatique de webcam sont :

  • startRecording() : démarrage de l’enregistrement si le widget Clipchamp affiche l’écran de la webcam et si la capture de la webcam est active.
  • pauseRecording() : mise en pause de l’enregistrement si un enregistrement a précédemment démarré et s’il n’est pas actuellement en pause.
  • resumeRecording() : reprise de l’enregistrement si un enregistrement a précédemment démarré et s’il est actuellement en pause.
  • finishRecording() : arrêt de l’enregistrement et déclenchement du traitement de la vidéo.
  • cancelRecording() : arrêt d’un enregistrement et fermeture du widget Clipchamp.

Toutes ces fonctions sont asynchrones et elles peuvent être rappelées avant que l’action correspondante soit terminée. Veuillez utiliser le rappel onWebcamStatusChange afin de synchroniser un état de votre côté avec l’état actuel de l’enregistreur de webcam. Si une fonction de l’API de contrôle de webcam est appelée et que l’enregistreur de webcam est dans un état incompatible, l’appel peut ne pas être mis en file d’attente pour une exécution ultérieure quand l’enregistreur de webcam a atteint l’état correct. Par exemple, le comportement de l’API de contrôle de webcam n’est pas défini quand vous appelez startRecording(), mais le rappel onWebcamStatusChange n’a pas précédemment signalé que la capture de webcam avait été activée avec succès (capture_started).