/
stream-diagnostic.js
147 lines (136 loc) · 5.11 KB
/
stream-diagnostic.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
var SESSION_STATUS = Flashphoner.constants.SESSION_STATUS;
var STREAM_STATUS = Flashphoner.constants.STREAM_STATUS;
var localVideo;
var remoteVideo;
var session;
//////////////////////////////////
/////////////// Init /////////////
function init_page() {
//init api
try {
Flashphoner.init({flashMediaProviderSwfLocation: '../../../../media-provider.swf'});
} catch(e) {
$("#notifyFlash").text("Your browser doesn't support Flash or WebRTC technology necessary for work of an example");
return;
}
//local and remote displays
localVideo = document.getElementById("localVideo");
remoteVideo = document.getElementById("remoteVideo");
$("#url").val(setURL() + "/" + createUUID(8));
//set initial button callback
$("#downloadDiv").hide();
onStopped();
}
function onStarted(publishStream, previewStream) {
$("#publishBtn").text("Stop").off('click').click(function(){
$(this).prop('disabled', true);
previewStream.stop();
}).prop('disabled', false);
$("#downloadDiv").hide();
}
function onStopped() {
$("#publishBtn").text("Start").off('click').click(function(){
$(this).prop('disabled', true);
start();
}).prop('disabled', false);
if (session)
session.stopDebug();
}
function start() {
document.getElementById("debug").innerHTML = '';
if (Browser.isSafariWebRTC()) {
Flashphoner.playFirstVideo(localVideo, true);
}
//check if we already have session
if (Flashphoner.getSessions().length > 0) {
startStreaming(Flashphoner.getSessions()[0]);
} else {
//create session
var url = field('url');
log("Create new session with url " + url);
$('#url').prop('disabled', true);
session = Flashphoner.createSession({urlServer: url}).on(SESSION_STATUS.ESTABLISHED, function(session){
//session connected, start streaming
startStreaming(session);
}).on(SESSION_STATUS.DISCONNECTED, function(){
setStatus(SESSION_STATUS.DISCONNECTED);
$('#url').prop('disabled', false);
onStopped();
}).on(SESSION_STATUS.FAILED, function(){
setStatus(SESSION_STATUS.FAILED);
$('#url').prop('disabled', false);
onStopped();
}).on(SESSION_STATUS.DEBUG, function(event){
log("Debug session " + event.status);
if (event.file) {
var link = window.location.protocol + "//" + window.location.host + "/" + event.file;
$("#link").attr("href", link);
$("#downloadDiv").show();
}
});
}
}
function startStreaming(session) {
var streamName = field("url").split('/')[3];
session.startDebug();
session.createStream({
name: streamName,
display: localVideo,
cacheLocalResources: true,
receiveVideo: false,
receiveAudio: false
}).on(STREAM_STATUS.PUBLISHING, function(publishStream){
log("Stream " + streamName + " " + STREAM_STATUS.PUBLISHING);
setStatus(STREAM_STATUS.PUBLISHING);
//play preview
session.createStream({
name: streamName,
display: remoteVideo
}).on(STREAM_STATUS.PLAYING, function(previewStream){
//enable stop button
log("Stream " + streamName + " " + STREAM_STATUS.PLAYING);
onStarted(publishStream, previewStream);
}).on(STREAM_STATUS.STOPPED, function(){
log("Stream " + streamName + " " + STREAM_STATUS.STOPPED);
publishStream.stop();
}).on(STREAM_STATUS.FAILED, function(stream){
log("Stream " + streamName + " " + STREAM_STATUS.FAILED);
//preview failed, stop publishStream
if (publishStream.status() == STREAM_STATUS.PUBLISHING) {
log("Stream " + streamName + " " + STREAM_STATUS.FAILED);
setStatus(STREAM_STATUS.FAILED, stream);
publishStream.stop();
}
}).play();
}).on(STREAM_STATUS.UNPUBLISHED, function(){
setStatus(STREAM_STATUS.UNPUBLISHED);
log("Stream " + streamName + " " + STREAM_STATUS.UNPUBLISHED);
//enable start button
onStopped();
}).on(STREAM_STATUS.FAILED, function(stream){
log("Stream " + streamName + " " + STREAM_STATUS.FAILED);
setStatus(STREAM_STATUS.FAILED, stream);
//enable start button
onStopped();
}).publish();
}
//show connection or local stream status
function setStatus(status, stream) {
var statusField = $("#status");
var infoField = $("#info");
statusField.text(status).removeClass();
if (status == "PUBLISHING") {
statusField.attr("class","text-success");
infoField.text("");
} else if (status == "DISCONNECTED" || status == "UNPUBLISHED") {
statusField.attr("class","text-muted");
} else if (status == "FAILED") {
statusField.attr("class","text-danger");
if (stream){
infoField.text(stream.getInfo()).attr("class","text-muted");
}
}
}
function log(string) {
document.getElementById("debug").innerHTML += string + '</br>';
}