non vorrei lavorare

ブログ名の通りです。javascript three.js mruby rust OCaml golang julialang blender

Atom Shellでデスクトップキャプチャーを最速で試す!

こんばんは、バーベキューに息子達を連れて行って、食べるだけ食べて、 片付けには、マンションの検査の立会を理由に参加できなかったkjunichiです。 次男は、半分は寝てましたが、長男は目一杯満喫し、実家への電車で爆睡でした。

2014bbq

はじめに

ChromeブラウザではWebRTCでWebCam以外にデスクトップのキャプチャーがchrome://flags/で設定するか、起動時にコマンドラインで指定することで、出来たり、機能拡張を使うことで任意のウィンドウのキャプチャーが可能。

今回Atom Shellがv0.17.0以降から、デスクトップのキャプチャーがChromeと異なり、特にオプション等を指定することなく、普通に出来るようになった。

やり方

あくまでも、キャプチャーが試せるのみのHTML。録画機能は未実装です。

Atomshelldesktop_capture_2

録画するには

がんばって、ffmpegEmscriptenでjs化する。

他にも、RecordRTC等があるので、これらを使えば良いはず。

ソース

<html>
<meta charset="UTF-8">
<title>Desktop Capture</title>
<div id="out"></div>
<button id="rec">Rec</button>
<button id="stop">Stop</button>

<video id="outV" controls></video>
<script>
var outV = document.getElementById("outV");

var stopBtn = document.getElementById("stop");
    stopBtn.addEventListener("click",function() {
    stop();
},false);

var recBtn = document.getElementById("rec");
recBtn.addEventListener("click",function() {
    start();
},false);
var elm = document.getElementById("out");
var localStream;

function start() {
     var out = document.getElementById("out");
     out.innerHTML = "Capture start!";
     if (navigator.webkitGetUserMedia) {
         navigator.webkitGetUserMedia({
             audio: false,
             video: {
                 mandatory: {
                     chromeMediaSource: 'screen',
                     /*
                     minWidth: screen.width,
                     maxWidth: screen.width,
                     minHeight: screen.height,
                     maxHeight: screen.height*/
                     minWidth: 400,
                     maxWidth: 400,
                     minHeight: 400,
                     maxHeight: 400
                 }
             }
         }, function(stream) {
             elm.innerHTML = "録画中...";
             stream.onended = function() {
                console.log("stream onended.");
                //stop();
                 elm.innerHTML = "";
             };
             localStream = stream;

             var url = window.webkitURL.createObjectURL(stream);
            outV.src = url;
            outV.play();
         }, function(error) {
            elm.innerHTML = error;
         });
     } else if (navigator.getUserMedia) {
         console.log("oops!");
     }
 }

function stop() {
         if (navigator.webkitGetUserMedia) {
             localStream.stop();
             elm.innerHTML = "録画完了";
         }
}

// キャプチャーの開始
start();
</script>
</html>

関連記事