<html>
|
<body>
|
AppRTC Url:<input id="server" type="text" size="50" /></br>
|
Room id:<input id="room" type="text" /></br>
|
WebRTC stream:<input id="rtcstream" type="text" size="50" value="rtsp://217.17.220.110/axis-media/media.amp" /></br>
|
<input type="button" value="connect" onclick="connect()" />
|
<input type="button" value="disconnect" onclick="disconnect()" />
|
</body>
|
<script src="libs/request.min.js"></script>
|
<script src="apprtc.json" ></script>
|
<script>
|
function sendRequest(request,method,headers,data,onSuccess,onFailure,scope) {
|
|
console.log("HTTP call "+ method);
|
var verb = "GET";
|
if (data) {
|
verb = "POST";
|
data = JSON.stringify(data);
|
}
|
request(verb , method,
|
{
|
body: data,
|
headers: headers
|
}).done( function (response) {
|
if (response.statusCode === 200) {
|
if (onSuccess) {
|
onSuccess.call(scope,JSON.parse(response.body));
|
}
|
}
|
else if (onFailure) {
|
onFailure.call(scope,response.statusCode);
|
}
|
}
|
);
|
}
|
|
// set default value
|
document.querySelector('#server').value = apprtcConfig.url;
|
document.querySelector('#room').value = apprtcConfig.roomId;
|
|
var clientid = null;
|
var peerid = Math.random().toString();
|
var messages = null;
|
|
function write(text) {
|
var textNode = document.createElement("li");
|
textNode.textContent = text;
|
document.body.appendChild(textNode);
|
}
|
|
function onError (error) {
|
write("onError:" + error)
|
}
|
|
function onJoin(answer) {
|
write("onJoin result:" + answer.result)
|
if (answer.params.client_id) {
|
write("onJoin client_id:" + answer.params.client_id)
|
clientid = answer.params.client_id;
|
|
messages = answer.params.messages;
|
for (var i=0; i < messages.length; i++) {
|
var msg = JSON.parse(messages[i]);
|
if (msg.type === "offer") {
|
var webrtcStream = document.querySelector('#rtcstream').value;
|
sendRequest(request, "/api/call?peerid="+ peerid+"&url="+encodeURIComponent(webrtcStream), null, msg, onCall, onError, this);
|
}
|
}
|
}
|
}
|
|
function onGetIceCandidate(dataJson) {
|
write("onGetIceCandidate:" + JSON.stringify(dataJson))
|
|
var serverName = document.querySelector('#server').value;
|
var roomName = document.querySelector('#room').value;
|
|
var candidates = [];
|
for (var i=0; i<dataJson.length; i++) {
|
// send ICE candidate to Janus
|
var msg = { "id": dataJson[i].sdpMid, "label": dataJson[i].sdpMLineIndex, "candidate": dataJson[i].candidate };
|
candidates.push(msg);
|
}
|
|
var url = serverName + "/message/" + roomName + "/" + clientid;
|
var body = { messages: candidates };
|
sendRequest(request, url, null, body, null , onError, this);
|
}
|
|
function onCall(sdp) {
|
write("onCall:" + JSON.stringify(sdp))
|
|
var serverName = document.querySelector('#server').value;
|
var roomName = document.querySelector('#room').value;
|
|
var body = { messages: [ sdp ] };
|
var url = serverName + "/message/" + roomName + "/" + clientid;
|
sendRequest(request, url, null, body, null , onError, this);
|
|
|
if (messages) {
|
for (var i=0; i < messages.length; i++) {
|
var msg = JSON.parse(messages[i]);
|
if (msg.type === "candidate") {
|
var mymsg = { "sdpMid": msg.id, "sdpMLineIndex": msg.label, "candidate": msg.candidate };
|
sendRequest(request, "/api/addIceCandidate?peerid="+ peerid, null, mymsg, null, onError, this);
|
}
|
}
|
}
|
sendRequest(request, "/api/getIceCandidate?peerid="+ peerid, null, null, onGetIceCandidate, onError, this);
|
}
|
|
|
function connect() {
|
var serverName = document.querySelector('#server').value;
|
var roomName = document.querySelector('#room').value;
|
|
var body = { messages: [""] };
|
var url = serverName + "/join/" + roomName;
|
sendRequest(request, url, null, body, onJoin , onError, this);
|
}
|
|
function disconnect() {
|
var serverName = document.querySelector('#server').value;
|
var roomName = document.querySelector('#room').value;
|
if (clientid) {
|
var body = { messages: [] };
|
var url = serverName + "/leave/" + roomName + "/" + clientid;
|
sendRequest(request, url, null, body, null , onError, this);
|
}
|
}
|
|
window.onbeforeunload = function() {
|
disconnect();
|
};
|
</script>
|
</html>
|