15

私は html5/javascript getUserMedia API を使って、利用可能な場合にデバイスのカメラを使用する js アプリを作成しています。私は Modernizr を使用して、(ブラウザーの) 機能を次のように検出しています。

if (Modernizr.getusermedia) {

そして真のブロック内:

navigator.getUserMedia(
    {   // we would like to use video but not audio
        // This object is browser API specific! - some implementations require boolean properties, others require strings!
        video: true, 
        audio: false
    },
    function(videoStream) {
        // 'success' callback - user has given permission to use the camera
        // my code to use the camera here ... 
    },
    function() {
        // 'no permission' call back
        console.log("user did not give access to the camera");
    }               
);

これはうまくいきます。しかし、私が見つけたのは、デバイスに実際にカメラがあるかどうかではなく、API をサポートするブラウザーに基づいて Modernizer.getUserMedia 呼び出しが true を返すことです。

すなわち。iSight カメラと現在のバージョンの Chrome を搭載した私の MacBook では、Modernizr.getUserMedia は true を返し、navigator.getUserMedia(...) はカメラを使用する許可を求めます。優秀な

ただし、カメラがなくても現在のバージョンの Chrome がインストールされている別のマシンでは、Modernizr.getUserMedia は true を返します。これは、navigator.getUserMedia(...) がデバイスにないカメラを使用する許可を求めていることを意味します。それほど優れていません!

カメラの存在を検出できるかどうか知っている人はいますか? 理想的には、ユーザーがカメラを持っていない場合に、カメラへのアクセス許可を求めるプロンプトを表示したくありません!

乾杯

ネイサン

4

5 に答える 5

6

MediaStreamTrack.getSources を使用できます。これは、PC に接続されているビデオおよびオーディオ デバイスのリストを返します。これにはユーザーの許可は必要ありません。

その後、ID を getUserMedia に渡して、目的のメディア デバイスを取得できます。

于 2014-02-03T12:05:19.993 に答える
3

これは私を助けました:

function(videoStream) {
    // 'success' callback - user has given permission to use the camera
    if (videoStream.getVideoTracks().length > 0) {
        // my code to use the camera here ... 
    }
}
于 2014-03-05T08:21:22.317 に答える
0

getUserMedia API はまだ公開されたばかりで、この問題のようにバグや改善すべき点がいくつかあります。

しかし、現時点では、コンピューターに実際にカメラが搭載されているかどうかを確認する方法がわかりません。Flash :-( を使用して検出することもできますが...

于 2012-11-15T18:22:05.900 に答える