2017-02-14 15 views
0

今、私は教育のために「スナップチャット」の種類のWebアプリケーションを作成しようとしています。 アプリでは、動画やキャンバスなどのHTML5タグを使用しています。携帯電話の画面全体を埋め込むHTMLビデオタグ

次に、getUserMediaを使用してカメラの出力を取得しますが、私の問題はビデオタグを取得して画面全体を満たすことができないことです。

私は幅:100%からすべてを試しました。高さ:100%、高さ:100vh、jqueryですが、それはgetUserMedia関数を乱してしまい、動作しませんでした。

は今のところ、これは私のコードです: HTMLファイル:

<!doctype html> 
<html lang="da"> 
    <head> 
     <title>Camera output</title> 
     <meta charset="utf-8"> 
     <meta name="viewport" content="width=device-width, initial-scale=1"> 
     <link href="css/style.css" type="text/css" rel="stylesheet"> 
     <script src="jquery-3.1.1.min.js"></script> 
    </head> 
    <body> 
     <video id="video" autoplay></video> 
     <button id="snap" class="snapButton">Snap Photo</button> 
     <canvas id="canvas" width="640" height="480"></canvas> 

     <script src="js/script.js" type="text/javascript"></script> 
    </body> 
</html> 

CSSファイル:

* { 
    margin: 0; 
    padding: 0; 
} 

#video { 
    -webkit-transition: all 1s ease; 
    -moz-transition: all 1s ease; 
    -o-transition: all 1s ease; 
    transition: all 1s ease; 
    transform-origin: center center; 
} 

JSファイル:

function setElementFullScreen(selector) { 
    var ele= $(selector); 
    // Set left/top, can be done in directly in css 
    ele.css('top',0).css('left',0); 
    // Set size from window 
    ele.height($(window).height()).width($(window).width()); 
} 

$(document).ready(function() { 
    setElementFullScreen('video'); 
}); 

// Add resize event 
$(window).on('resize', function() { 
    setElementFullScreen('video'); 
}); 

// Put event listeners into place 
window.addEventListener("DOMContentLoaded", function() { 
    // Grab elements, create settings, etc. 
    var canvas = document.getElementById('canvas'); 
    var context = canvas.getContext('2d'); 
    var video = document.getElementById('video'); 
    var mediaConfig = { video: true }; 
    var errBack = function(e) { 
     console.log('An error has occurred!', e) 
    }; 

    // Put video listeners into place 
    if(navigator.mediaDevices && navigator.mediaDevices.getUserMedia) { 
     navigator.mediaDevices.getUserMedia(mediaConfig).then(function(stream) { 
      video.src = window.URL.createObjectURL(stream); 
      video.play(); 
     }); 
    } 

    /* Legacy code below! */ 
    else if(navigator.getUserMedia) { // Standard 
     navigator.getUserMedia(mediaConfig, function(stream) { 
      video.src = stream; 
      video.play(); 
     }, errBack); 
    } else if(navigator.webkitGetUserMedia) { // WebKit-prefixed 
     navigator.webkitGetUserMedia(mediaConfig, function(stream){ 
      video.src = window.webkitURL.createObjectURL(stream); 
      video.play(); 
     }, errBack); 
    } else if(navigator.mozGetUserMedia) { // Mozilla-prefixed 
     navigator.mozGetUserMedia(mediaConfig, function(stream){ 
      video.src = window.URL.createObjectURL(stream); 
      video.play(); 
     }, errBack); 
    } 

    // Trigger photo take 
    document.getElementById('snap').addEventListener('click', function() { 
     context.drawImage(video, 0, 0, 640, 480); 
    }); 
}, false); 

だから私の質問がある:ありビデオタグを電話画面のあらゆるビットに埋め込む方法はありますか?私は机上で試してみましたが、水平に塗っても問題ありませんでした。

ありがとうございます。

答えて

0

<video id="video" autoplay></video> 

<script> 
    var elem = document.getElementById("myvideo"); 
    if(elem.requestFullscreen) { 
     elem.requestFullscreen(); 
    } 
</script> 

これは、ビデオの再生にフルスクリーンを使用するようにブラウザを聞いてきます、これを試してみてください。私はあなたがモバイルデバイス上のブラウザの互換性にいくつかの問題があると思う。

参考: https://developer.mozilla.org/en-US/docs/Web/API/Fullscreen_API

編集:

ele.height($(window).height()).width($(window).width());あなたにトラブルを与えているようです。 window.height()window.width()をデバッグコンソールに記録して、返される内容を判断してください。

あなたがまだの場合は、これを見て:ここで

https://www.w3schools.com/tags/canvas_drawimage.asp

は、同様のアプリケーションの例とチュートリアルです:

ここ

https://www.html5rocks.com/en/tutorials/getusermedia/intro/

+0

私はあなたが誤解だと思います。要素の上にボタンがあるので、フルスクリーンにしたくない。私はそれが電話の全体の背景/画面を埋めるようにしたい – Ismail

+0

それは私があなたの質問を知っていたものでは全くありませんでした。あなたのコードをもっと投稿できますか?具体的には、あなたの 'CSS'とビデオとボタンオーバーレイのラッパーに興味があります。 – bowl0stu

+0

申し訳ありませんが私の質問は明らかではなかった場合。私は自分のhtml、css、jsファイルで質問を更新しました。 – Ismail

0

あなたが作業例とsnippletを持っています。

function setElementFullScreen(selector) { 
 
    var ele = $(selector); 
 
    // Get window size 
 
    var maxWidth = $(window).width(); 
 
    var maxHeight = $(window).height(); 
 
    // Get video size 
 
    var videoWidth = ele.width(); 
 
    var videoHeight = ele.height(); 
 
    // Calcul relative size 
 
    if (maxWidth > maxHeight) { 
 
     var relatifWidth = videoWidth/(videoHeight/maxHeight); 
 
     var relatifHeight = maxHeight; 
 
    } else { 
 
     var relatifWidth = maxWidth; 
 
     var relatifHeight = videoHeight/(videoWidth/maxWidth); 
 
    } 
 
    // Check if result size is not bigger than canvas size 
 
    if (relatifWidth > maxWidth) { 
 
     relatifWidth = maxWidth; 
 
     relatifHeight = (relatifWidth * videoHeight)/videoWidth; 
 
    } else if (relatifHeight > maxHeight) { 
 
     relatifHeight = maxHeight; 
 
     relatifWidth = (relatifHeight * videoWidth)/videoHeight; 
 
    } 
 
    // Set size from window 
 
    ele.height(relatifHeight).width(relatifWidth); 
 
} 
 

 
$(document).ready(function() { 
 
    setElementFullScreen('#video'); 
 

 
    // Put event listeners into place 
 
    window.addEventListener("DOMContentLoaded", function() { 
 
     // Grab elements, create settings, etc. 
 
     var canvas = document.getElementById('canvas'); 
 
     var context = canvas.getContext('2d'); 
 
     var video = document.getElementById('video'); 
 
     var mediaConfig = {video: true}; 
 
     var errBack = function (e) { 
 
      console.log('An error has occurred!', e) 
 
     }; 
 

 
     // Put video listeners into place 
 
     if (navigator.mediaDevices && navigator.mediaDevices.getUserMedia) { 
 
      navigator.mediaDevices.getUserMedia(mediaConfig).then(function (stream) { 
 
       video.src = window.URL.createObjectURL(stream); 
 
       video.play(); 
 
      }); 
 
     } 
 

 
     /* Legacy code below! */ 
 
     else if (navigator.getUserMedia) { // Standard 
 
      navigator.getUserMedia(mediaConfig, function (stream) { 
 
       video.src = stream; 
 
       video.play(); 
 
      }, errBack); 
 
     } else if (navigator.webkitGetUserMedia) { // WebKit-prefixed 
 
      navigator.webkitGetUserMedia(mediaConfig, function (stream) { 
 
       video.src = window.webkitURL.createObjectURL(stream); 
 
       video.play(); 
 
      }, errBack); 
 
     } else if (navigator.mozGetUserMedia) { // Mozilla-prefixed 
 
      navigator.mozGetUserMedia(mediaConfig, function (stream) { 
 
       video.src = window.URL.createObjectURL(stream); 
 
       video.play(); 
 
      }, errBack); 
 
     } 
 

 
     // Trigger photo take 
 
     document.getElementById('snap').addEventListener('click', function() { 
 
      context.drawImage(video, 0, 0, 640, 480); 
 
     }); 
 
    }, false); 
 

 
}); 
 

 
// Add resize event 
 
$(window).on('resize', function() { 
 
    setElementFullScreen('video'); 
 
});
video { 
 
     margin: 0; 
 
     padding: 0; 
 
     top: 0; 
 
     left: 0; 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<video id="video" autoplay> 
 
    <source src="http://techslides.com/demos/sample-videos/small.mp4" type="video/mp4"> 
 
</video> 
 
<br> 
 
<button id="snap" class="snapButton">Snap Photo</button> 
 
<br> 
 
<canvas id="canvas" width="640" height="480"></canvas>

+0

それは動作していないようでした。セレクタをビデオからマイボタンに変更すると、それが機能し、ボタンが画面に表示されますが、ビデオ要素は同じサイズのままです。あなたが見たいと思えば、私は完全なコードで私の質問を更新しました。 – Ismail

+0

私は何かを試して、それがあなたを助けるかどうか教えてください。 – Camille

関連する問題