過去何度も繰り返して来た『WebRTC による WEBカメラ表示』ですが、いろいろ変遷ありつつこのような形で現在動作確認しています。Chrome と Edge で確認したところによると、旧 API でも動作しています。 デモページ ▼ MDN 資料 MediaDevices - Web API インターフェイス | MDN Taking still photos with WebRTC - Web APIs | MDN 今回、iPhone の iOS11 で 動作確認したところ、旧 API 側で動作したようです。しかし、iOS12 では Safari 側でカメラとマイクを利用すると設定した上で、実行時に許可する必要があるのですが( iOS11 未確認 : PCでは基本的に皆そうです )、うまく動作せず検証は保留となっています( デバイス所持者が自分以外なので ) ※ 共通事項 : インターネット上では SSL である事 ※ WebRTC が使えない場合は動画で代替え
<!DOCTYPE html>
<html>
<head>
<meta content="width=device-width initial-scale=1.0 minimum-scale=1.0 maximum-scale=1.0 user-scalable=no" name="viewport">
<meta charset="UTF-8">
<link rel="shortcut icon" href="https://winofsql.jp/WinOfSql.ico">
<title>WEBカメラの表示</title>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/4.1.1/css/bootstrap.css">
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/toastr.js/2.1.4/toastr.min.css">
<script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/toastr.js/2.1.4/toastr.min.js"></script>
<style>
@media screen and ( min-width:480px ) {
#content {
padding: 20px;
}
#camera {
width: 480px;
height: 360px;
}
}
@media screen and ( max-width:479px ) {
#content {
padding: 0px;
}
#camera {
width: 100%;
}
}
</style>
</head>
<body>
<div id="content">
<video id="camera" autoplay></video>
<a class="btn btn-secondary btn-sm float-right ml-4"
href=".">フォルダ</a>
<a class="btn btn-secondary btn-sm float-right ml-4"
onclick="$('#camera').css({'width':'100%', 'height':'100%'})"
href="#">100%</a>
<a class="btn btn-secondary btn-sm float-right"
onclick="$('#camera').css({'width':'auto', 'height':'auto'})"
href="#">auto</a>
</div>
<script>
// *************************************
// 簡易スマホチェック
// *************************************
jQuery.isMobile = (/android|webos|iphone|ipad|ipod|blackberry|iemobile|opera mini/i.test(navigator.userAgent.toLowerCase()));
toastr.options={"closeButton":false,"debug":false,"newestOnTop":false,"progressBar":false,"positionClass":"toast-bottom-center","preventDuplicates":false,"onclick":null,"showDuration":"300","hideDuration":"1000","timeOut":"3000","extendedTimeOut":"1000","showEasing":"swing","hideEasing":"linear","showMethod":"fadeIn","hideMethod":"fadeOut"};
if ( !$.isMobile ) {
toastr.options.positionClass = "toast-top-center";
}
// *************************************
// localhost 以外では SSL で処理する
// *************************************
if ( location.host != "localhost" ) {
if ( location.protocol == "http:" ) {
location.protocol = "https:"
}
}
// *************************************
// カメラ参照
// *************************************
// カメラ用 video 要素(DOM オブジェクト)
var camera;
camera = $("#camera").get(0);
// *************************************
// 最新 API
// *************************************
if ( navigator.mediaDevices ) {
// カメラ表示
navigator.mediaDevices.getUserMedia({video: true})
.then(function(stream){
// カメラのストリームを表示
camera.srcObject = stream;
})
.catch(function(err){
// ブラウザで使用を拒否した場合等( 動画で代替 )
errorVideo();
});
}
// *************************************
// 旧 API
// *************************************
else {
// 旧 WebRTCチェック用
var api = [
"webkitGetUserMedia", "mozGetUserMedia","msGetUserMedia"
]
$.each(api,function(idx){
if (navigator.getUserMedia = navigator.getUserMedia || navigator[api[idx]]) {
return false;
}
});
// WebRTC 使用可能
if ( navigator.getUserMedia ) {
// スマホでは、幅いっぱいに使う
if ( $.isMobile ) {
$("#camera").css("width","100%");
}
// カメラの表示
navigator.getUserMedia({video: true},
function(stream) {
// カメラのストリームを表示
camera.srcObject = stream;
// ▼ 旧実装
// camera.src = window.URL.createObjectURL(stream);
},
function(err){
// ブラウザで使用を拒否した場合等( 動画で代替 )
errorVideo();
}
);
}
else {
// 動画で代替
errorVideo();
}
}
// *************************************
// 動画で代替
// *************************************
function errorVideo() {
toastr.error( "WebRTC を使用できません");
$("#camera")
.prop({
"loop" : true, "muted" : true, "controls" : true,
"src" : "TriggerRally.mp4"
})
.css({"border": "solid 1px #000"});
}
</script>
</body>
</html>
参考 Apple Safari の WebRTC について WebRTC で URL.createObjectURLはまもなく使えなくなる
|
|
【APIの最新記事】
- PHP で Mastodon にアプリを登録して投稿する手順
- Google スプレッドシートの内容を JSON として localhost で取得する手順
- WebRTC による WEBカメラ表示を canvas にコピーして画像に変換し、サーバへアップロードする
- WebRTC による WEBカメラ表示
- Amazon API の 503エラー の対処について
- ドコモ デベロッパーサポートで API使いたいと思ってサインアップしようとしたら・・・・。法人情報は後から登録しましょう
- GitHub の yahoojapan/yconnect-php-sdk( PHP ) を使用して、Yahoo! にログインさせてユーザ情報を取得する( OPENID )
- 手動で Facebook API の 60日間の アクセストークンを取得する
- Facebook Graph API Explorer でカスタムプライバシー設定をした投稿を行う
- C#(.NET) : Google Spreadsheets API version 3.0でGoogleスプレッドシートを参照
- Twitpic の画像URLを取得する API が変わっているようなのですが






