程序化摄像头控制

除了自定义按钮API,你可以程序化地控制摄像头录像机,像是无需用户操作。你应该把程序化摄像头控制和onWebcamStatusChange回调结合起来, 这样你的代码状态,就能和摄像头录像机的真实状态同步化。 自定义按钮APIprocess.open() 呼叫,返回一个 Javascript Promise函数,这样在Clipchamp小部件出现时,能导入摄像头API对象中:

<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>

我们建议在开始时呼叫areRecordingDevicesReady() 函数,在我们成功进入摄像头时导入,并能进行录像。 你可以利用这个呼叫,当作是一种”起飞前”的检查,以确认接下来的呼叫能够运行。 请注意areRecordingDevicesReady可能会需要用户操作,批准浏览器的弹出功能 ,进而授权浏览器域名api.clipchamp.com进入摄像头和麦克风。 批准之后,相应的授权通常会储存在浏览器档案中,但是可能会在用户清除缓存,或是使用无痕模式时被清除掉,新的硬件出现,或其他事件也可能造成授权取消。 因此,我们建议在每一个程序化摄像头控制API呼叫以前,先进行一个areRecordingDevicesReady() 呼叫。程序化摄像头控制API的其他功能有:

  • startRecording(): 如果Clipchamp 小部件显示摄像头荧幕,以及摄像头拍摄开启时,开始录像。
  • pauseRecording(): 如果录像已经开始,当前还未暂停时,进行暂停功能。
  • resumeRecording():如果录像已经开始,当前处在暂停状态时,恢复录像。
  • finishRecording(): 结束录像并启动接下来的视频流程。
  • cancelRecording(): 终止录像并关闭Clipchamp小部件。

所有的函数都是异步执行,并且可能在相应的操作完成前就返回。请使用onWebcamStatusChange回调以同步化你这边的状态,和摄像头录像机的真实状态。如果呼叫了摄像头控制API的一个函数,摄像头录像机处在不相容的状态,在摄像头录像机达到正确的状态时,呼叫可能不会排列在稍后执行的队伍中。例如,当你呼叫startRecording(),但是onWebcamStatusChange 回调之前没有提示摄像头的录制已成功开启(capture_started),那么摄像头控制API的行为就无法被定义。