ブラウザからWebRTC APIを利用してカメラを操作し、ズーム(拡大縮小)を行いたい。
ブラウザから、WebRTC API を使って、撮影するページを作成中です。
PC、Android、iOS(iPadOS)のブラウザで動作を確認しています。
カメラ動作、および撮影したデータをファイル保存までは実装出来たのですが、
ズーム機能を付けようとしたところ、Android(Chrome)以外で動作しませんでした。
具体的には、getSettings() メソッドで取得した情報で、zoom が利用不可となっていました。
恐らくiOSなどでは、別の方法での実装が必要かと思うのですが、
何か良いサンプルか、方式がありましたら、教えてきただけないでしょうか?
なお、以下のサイトを参考に実装しています。
https://googlechrome.github.io/samples/image-capture/update-camera-zoom.html
該当ソースコード(抜粋)
Javascript
1【Javascript部分】 2 3window.onload = () => { 4 const video = document.querySelector("#camera"); 5 /** 6 * カメラを<video>と同期 7 */ 8 navigator.mediaDevices.getUserMedia(constraints) 9 .then( (stream) => { 10 video.srcObject = stream; 11 video.onloadedmetadata = (e) => { 12 video.play(); 13 }; 14 }) 15 .catch( (err) => { 16 console.log(err.name + ": " + err.message); 17 }); 18 /** 19 * ズーム(-)ボタン 20 */ 21 document.querySelector("#zoomDown").addEventListener("click", () => { 22 zoom(video, -1); 23 }); 24 /** 25 * ズーム(+)ボタン 26 */ 27 document.querySelector("#zoomUp").addEventListener("click", () => { 28 zoom(video, +1); 29 }); 30}; 31 32function zoom(video, scale) { 33 if (video.srcObject !== undefined && video.srcObject !== null) { 34 if (video.srcObject.active) { 35 var tracks = video.srcObject.getTracks(); 36 if (tracks.length > 0) { 37 var settings = tracks[0].getSettings(); 38 var capabilities = tracks[0].getCapabilities(); 39 var zoom = settings.zoom; 40 if (capabilities.zoom !== undefined) { 41 if (settings.zoom !== undefined) { 42 if (scale > 0) { 43 // 引数が0より大きい場合、拡大する 44 zoomSize = zoomSize + capabilities.zoom.step; 45 if (zoomSize > capabilities.zoom.max) { 46 zoomSize = capabilities.zoom.max; 47 } 48 } else { 49 // 引数が0より小さい場合、縮小する 50 zoomSize = zoomSize - capabilities.zoom.step; 51 if (zoomSize < capabilities.zoom.min) { 52 zoomSize = capabilities.zoom.min; 53 } 54 } 55 tracks[0].applyConstraints({ advanced : [{ zoom: zoomSize }] }); 56 } 57 } else { 58 // WebRTCズーム非対応の場合 59 } 60 document.querySelector("#log").value = log; 61 } 62 } 63 } 64} 65 66【HTML Body以下】 67 <video autoplay muted playsinline id="camera" width="600" height="600"></video> 68 <form> 69 <button type="button" id="zoomDown" >ズーム(-)</button> 70 <button type="button" id="zoomUp" >ズーム(+)</button><br/> 71 </form> 72
あなたの回答
tips
プレビュー