パンチルトズームカメラAPIを使用する



何がPTZ APIですか?
PTZ APIは、カメラAPIの拡張であり、クロムバージョン87で追加された、それは開発者がパン、チルト、ウェブカメラのズーム機能にアクセスすることができます.

それはどのように私はそれを使用しますか?
このAPIはかなり新しいので、ブラウザがこのAPIをサポートしているかどうか最初にチェックしてください.
const supports = navigator.mediaDevices.getSupportedConstraints();

if (supports.pan && supports.tilt && supports.zoom) {
  // Browser supports camera PTZ.
}
ブラウザーがそれをサポートするならば、我々は「使用&移動する」カメラにユーザの許可を要求しなければなりません.navigator.mediaDevices.getUserMedia()を呼び出すことでこれを行うことができます.
async function requestPTZ() {
  try {
  // First we request permission from the user, if they accept it will yield a MediaStream object
  const opts = {video: {pan: true, tilt: true, zoom: true}};
  const stream = await navigator.mediaDevices.getUserMedia(opts);
  // Secondly we can bind this stream to a <video> element on the page.
  document.querySelector("#video").srcObject = stream;

  // Lastly we want to get the capabilities of our webcam, the current settings of it and the videotrack itself.
  const [videoTrack] = stream.getVideoTracks();
  const capabilities = videoTrack.getCapabilities();
  const settings = videoTrack.getSettings();

  // ...
 } catch (error) {
  throw new Error(error)
  // User denies prompt, or
  // matching media is not available.
 }
}

それで、我々は現在、ユーザーのウェブカメラを見て、コントロールする能力を持っています、我々は現在、パンの傾きを変えるか、このようにズームするために、videoTrack.aplyConstraintsに引数を通過することができます
async function changeZoom(capabilities, settings, videoTrack) {
  await videoTrack.applyConstraints({
   advanced: [{ zoom: capabilities.zoom.max }]
  })
}

if ('zoom' in settings) {
  changeZoom();
}

デモ
私はCodepenの短い対話型のデモを書いたので、ブラウザのAPIダイアログを確認するためにユーザを必要としたので、embedが動作しないことに注意してください.