<html>
|
<head>
|
<title>WebRTC Streamer Info</title>
|
<link rel="icon" type="image/png" href="info.png" />
|
<script src="libs/ag-grid.min.js"></script>
|
<script src="webrtcconfig.js" ></script>
|
<script src="webrtcstreamer.js" ></script>
|
<style type="text/css">
|
.cell {
|
display: flex;
|
align-items: center;
|
justify-content: center;
|
}
|
footer {
|
text-align: center;
|
}
|
</style>
|
</head>
|
<body>
|
<div>
|
log <select id="log" onchange="fetch('api/log?level='+this.value)" >
|
<option>0</option>
|
<option>1</option>
|
<option>2</option>
|
<option>3</option>
|
<option>4</option>
|
</select>
|
</div>
|
<div id="myGrid" style="height: 80%;" class="ag-fresh"></div>
|
<footer id="footer"></footer>
|
</body>
|
<script>
|
// columns
|
var columnDefs = [
|
{ headerName: "PeerId" , field: "peerid", cellClass: "cell", headerClass: "cell" },
|
{ headerName: "StreamId", field: "streamid", cellClass: "cell", headerClass: "cell" },
|
{ headerName: "Size", field: "size", cellClass: "cell", headerClass: "cell" },
|
{ headerName: "Ice State", field: "ice_state", cellClass: "cell", headerClass: "cell" },
|
{ headerName: "Nb Candidates", field: "nbCandidates", cellClass: "cell", headerClass: "cell" },
|
{ headerName: "PC State", field: "pc_state", cellClass: "cell", headerClass: "cell" },
|
{ headerName: "Action" , field: "action", cellClass: "cell", headerClass: "cell",
|
cellRenderer: function(params) {
|
const eDiv = document.createElement('div');
|
const eButton = document.createElement('button');
|
eButton.innerText = params.value;
|
eDiv.appendChild(eButton);
|
eButton.addEventListener('click', () => fetch( webrtcConfig.url + "/api/hangup?peerid=" + params.data.peerid ));
|
|
return eDiv;
|
}
|
}
|
];
|
|
// options
|
var gridOptions = {
|
enableFilter: true,
|
enableSorting: true,
|
enableColResize: true,
|
columnDefs: columnDefs,
|
onGridReady: function(event) { event.api.sizeColumnsToFit(); }
|
};
|
|
// fill grid
|
new agGrid.Grid(document.querySelector('#myGrid'), gridOptions);
|
|
// ------------------------------------------
|
// init device list
|
// ------------------------------------------
|
function onGetPeerConnectionList(peerConnectionList) {
|
|
var rowData = [];
|
peerConnectionList.forEach(function(item) {
|
const peerConnection = Object.values(item)[0];
|
|
let streamid = "";
|
let frameHeight = 0;
|
let frameWidth = 0;
|
if (peerConnection && peerConnection.hasOwnProperty("streams")){
|
streamid = Object.keys(peerConnection.streams)[0];
|
|
var stream = Object.values(peerConnection.streams)[0];
|
Object.entries(stream).forEach( ([key, value]) => {
|
if (value.hasOwnProperty("width")) {
|
frameHeight = value.width;
|
}
|
if (value.hasOwnProperty("height")) {
|
frameWidth = value.height;
|
}
|
});
|
}
|
|
rowData.push({peerid: Object.keys(item)[0] , streamid, size:frameHeight+"x"+frameWidth, action:"hangup", nbCandidates: Object.values(item)[0].candidateList.length, ... Object.values(item)[0] })
|
});
|
gridOptions.api.setRowData(rowData);
|
}
|
|
// ------------------------------------------
|
// Fill version
|
// ------------------------------------------
|
function onVersion(version) {
|
document.getElementById("footer").innerHTML = "<p><a href='https://github.com/mpromonet/webrtc-streamer'>WebRTC-Streamer</a>"
|
+ " " + version.split(" ")[0] + "</p>";
|
}
|
|
function getPeerConnectionList() {
|
fetch(webrtcConfig.url + "/api/getPeerConnectionList")
|
.then( (response) => response.json() )
|
.then( (response) => onGetPeerConnectionList( response ))
|
}
|
|
// load
|
window.onload = function() {
|
getPeerConnectionList();
|
window.setInterval(()=> { getPeerConnectionList(); }, 2000);
|
fetch(webrtcConfig.url + "/api/version")
|
.then( (response) => response.text() )
|
.then( (response) => onVersion( response ))
|
fetch('api/log')
|
.then( (response) => response.text() )
|
.then( (response)=> document.getElementById("log").value = response )
|
}
|
|
// unload
|
window.onbeforeunload = function() {
|
}
|
</script>
|
</html>
|