Widget / WebRTC Client PeerJs
This widget receives a video stream via WebRTC. You must have the server widget running in another window, or on a different machine.
HTML
<link rel="stylesheet" href="http://netdna.bootstrapcdn.com/bootstrap/3.1.1/css/bootstrap.min.css">
<script src="http://www.chilipeppr.com/js/require.js"></script>
<div id="com-chilipeppr-widget-camalignment" class="panel panel-default">
<div class="panel-heading">
<div class="btn-toolbar pull-right" role="toolbar">
<div class="btn-group">
<button type="button" class="btn btn-xs btn-default settings" data-toggle="modal" data-target="#com-chilipeppr-widget-camalignment-settings"><span class="glyphicon glyphicon-cog"></span></button>
</div>
<div class="btn-group">
<button type="button" class="btn btn-xs btn-default disconnect"><span class="glyphicon glyphicon-off"></span></button>
</div>
<div class="btn-group">
<button type="button" class="btn btn-xs btn-default hidebody"><span class="glyphicon glyphicon-chevron-up"></span></button>
</div>
<div class="btn-group">
<div class="dropdown">
<button type="button" class="btn btn-xs btn-default dropdown-toggle" data-toggle="dropdown"><span class="caret"></span>
</button>
<ul class="dropdown-menu dropdown-menu-right" role="menu"></ul>
</div>
</div>
</div>
<span class="panel-title" data-toggle="popover">Camera Alignment</span>
</div>
<div id="com-chilipeppr-widget-camalignment-body" class="panel-body">
<!-- Video area -->
<div id="video-container">
<div id="crosshairs" class="hidden"></div>
<video id="video" autoplay class="hidden"></video>
</div>
</div>
<div id="com-chilipeppr-widget-camalignment-ftr" class="panel-footer hidden">
</div>
<div id="com-chilipeppr-widget-camalignment-settings" class="modal fade">
<div class="modal-dialog">
<div class="modal-content">
...
CSS
#com-chilipeppr-widget-camalignment-body {
padding:0;
}
#com-chilipeppr-widget-camalignment .btn {
z-index: 3;
}
#com-chilipeppr-widget-camalignment-body #crosshairs {
display: block;
position: absolute;
top: 0;
left: 0;
bottom: 0;
right: 0;
z-index: 1;
background: url(https://www.ambush-paintball.com/images/crosshairs.png) no-repeat center center;
}
#com-chilipeppr-widget-camalignment #video {
width: 100%;
height: 480px;
max-height: 480px;
background-color: #eee;
}
#com-chilipeppr-widget-camalignment #video-container {
padding: 0;
text-align: center;
margin-bottom:-5px;
}
#step1-error, #step2, #step3 {
display: none;
}
#step1-error {
padding-top:10px;
}
#my-id {
font-weight: bold;
}
#com-chilipeppr-widget-camalignment-body:after {
content:none;
}
JavaScript
requirejs.config({
paths: {
jqueryui: '//chilipeppr.com/js/jquery-ui-1.10.4/ui/jquery.ui.core',
jqueryuiWidget: '//chilipeppr.com/js/jquery-ui-1.10.4/ui/jquery.ui.widget',
jqueryuiMouse: '//chilipeppr.com/js/jquery-ui-1.10.4/ui/jquery.ui.mouse',
jqueryuiResizeable: '//chilipeppr.com/js/jquery-ui-1.10.4/ui/jquery.ui.resizable',
},
shim: {
jqueryuiWidget: ['jqueryui'],
jqueryuiMouse: ['jqueryuiWidget'],
jqueryuiResizeable: ['jqueryuiMouse' ]
}
});
// Test this element. This code is auto-removed by the chilipeppr.load()
cprequire_test(["inline:com-chilipeppr-widget-camalignment"], function (hello) {
console.log("test running of " + hello.id);
hello.init();
} /*end_test*/ );
cpdefine("inline:com-chilipeppr-widget-camalignment", ["chilipeppr_ready", "jquerycookie", 'jqueryuiResizeable'], function () {
return {
id: "com-chilipeppr-widget-camalignment",
url: "http://fiddle.jshell.net/chilipeppr/qWj4f/show/light/",
fiddleurl: "http://jsfiddle.net/chilipeppr/qWj4f/",
name: "Camera Alignment",
desc: "This widget uses a USB camera to align your machine to the the zero X/Y coordinates of your material",
publish: {},
subscribe: {},
foreignPublish: {},
foreignSubscribe: {},
init: function () {
this.configBodyFromCookie();
$('#com-chilipeppr-widget-camalignment .hidebody').click(this.toggleBody.bind(this));
$('#com-chilipeppr-widget-camalignment .disconnect').click(this.toggleConnect.bind(this));
//this.makeCall('tvfzz2donnbwewmi');
this.forkSetup();
this.setupResizeable();
console.log(this.name + " done loading.");
},
setupResizeable: function() {
console.log("setting up resizeable");
// load jquery-ui css, but make sure nobody else loaded it
if...