Skip to content

Commit

Permalink
Fixed #347 Updated DetectRTC. Fixed pre-recorded media streaming demo.
Browse files Browse the repository at this point in the history
  • Loading branch information
muaz-khan committed Mar 8, 2017
1 parent 56eddfc commit c3d8dd3
Show file tree
Hide file tree
Showing 7 changed files with 257 additions and 149 deletions.
6 changes: 3 additions & 3 deletions Gruntfile.js
Expand Up @@ -9,7 +9,9 @@ module.exports = function(grunt) {

var versionNumber = grunt.file.readJSON('package.json').version;

var banner = '// Last time updated: <%= grunt.template.today("UTC:yyyy-mm-dd h:MM:ss TT Z") %>\n\n';
var banner = '\'use strict\';\n\n';

banner += '// Last time updated: <%= grunt.template.today("UTC:yyyy-mm-dd h:MM:ss TT Z") %>\n\n';

banner += '// _________________________\n';
banner += '// RTCMultiConnection v' + versionNumber + '\n\n';
Expand All @@ -21,8 +23,6 @@ module.exports = function(grunt) {
banner += '// MIT License - www.WebRTC-Experiment.com/licence\n';
banner += '// --------------------------------------------------\n\n';

banner += '\'use strict\';\n\n';

// configure project
grunt.initConfig({
// make node configurations available
Expand Down
4 changes: 2 additions & 2 deletions demos/Pre-recorded-Media-Streaming.html
Expand Up @@ -101,6 +101,8 @@ <h1>Pre-recorded media streaming using RTCMultiConnection</h1>
<script src="https://cdn.webrtc-experiment.com/getMediaElement.js"></script>

<script>
var connection = new RTCMultiConnection(); // to get window.DetectRTC object

// ......................................................
// .......................UI Code........................
// ......................................................
Expand Down Expand Up @@ -189,8 +191,6 @@ <h1>Pre-recorded media streaming using RTCMultiConnection</h1>
// ..................RTCMultiConnection Code.............
// ......................................................

var connection = new RTCMultiConnection();

connection.dontCaptureUserMedia = true;

// by default, socket.io server is assumed to be deployed on your own URL
Expand Down
154 changes: 96 additions & 58 deletions dev/DetectRTC.js
@@ -1,4 +1,4 @@
// Last time updated: 2016-11-12 6:02:08 AM UTC
// Last time updated: 2017-03-05 5:56:31 AM UTC

// Latest file can be found here: https://cdn.webrtc-experiment.com/DetectRTC.js

Expand All @@ -18,6 +18,12 @@

var browserFakeUserAgent = 'Fake/5.0 (FakeOS) AppleWebKit/123 (KHTML, like Gecko) Fake/12.3.4567.89 Fake/123.45';

var isNodejs = typeof process === 'object' && typeof process.versions === 'object' && process.versions.node;
if (isNodejs) {
var version = process.versions.node.toString().replace('v', '');
browserFakeUserAgent = 'Nodejs/' + version + ' (NodeOS) AppleWebKit/' + version + ' (KHTML, like Gecko) Nodejs/' + version + ' Nodejs/' + version
}

(function(that) {
if (typeof window !== 'undefined') {
return;
Expand Down Expand Up @@ -189,7 +195,6 @@
interval = 10,
isTimeout = false;
var id = window.setInterval(

function() {
if (isDone()) {
window.clearInterval(id);
Expand Down Expand Up @@ -220,64 +225,68 @@
function detectPrivateMode(callback) {
var isPrivate;

if (window.webkitRequestFileSystem) {
window.webkitRequestFileSystem(
window.TEMPORARY, 1,
function() {
isPrivate = false;
},
function(e) {
isPrivate = true;
}
);
} else if (window.indexedDB && /Firefox/.test(window.navigator.userAgent)) {
var db;
try {
db = window.indexedDB.open('test');
db.onerror = function() {
return true;
};
} catch (e) {
isPrivate = true;
}

if (typeof isPrivate === 'undefined') {
retry(
try {

function isDone() {
return db.readyState === 'done' ? true : false;
if (window.webkitRequestFileSystem) {
window.webkitRequestFileSystem(
window.TEMPORARY, 1,
function() {
isPrivate = false;
},
function next(isTimeout) {
if (!isTimeout) {
isPrivate = db.result ? false : true;
}
function(e) {
isPrivate = true;
}
);
}
} else if (isIE10OrLater(window.navigator.userAgent)) {
isPrivate = false;
try {
if (!window.indexedDB) {
} else if (window.indexedDB && /Firefox/.test(window.navigator.userAgent)) {
var db;
try {
db = window.indexedDB.open('test');
db.onerror = function() {
return true;
};
} catch (e) {
isPrivate = true;
}
} catch (e) {
isPrivate = true;
}
} else if (window.localStorage && /Safari/.test(window.navigator.userAgent)) {
try {
window.localStorage.setItem('test', 1);
} catch (e) {
isPrivate = true;
}

if (typeof isPrivate === 'undefined') {
if (typeof isPrivate === 'undefined') {
retry(
function isDone() {
return db.readyState === 'done' ? true : false;
},
function next(isTimeout) {
if (!isTimeout) {
isPrivate = db.result ? false : true;
}
}
);
}
} else if (isIE10OrLater(window.navigator.userAgent)) {
isPrivate = false;
window.localStorage.removeItem('test');
try {
if (!window.indexedDB) {
isPrivate = true;
}
} catch (e) {
isPrivate = true;
}
} else if (window.localStorage && /Safari/.test(window.navigator.userAgent)) {
try {
window.localStorage.setItem('test', 1);
} catch (e) {
isPrivate = true;
}

if (typeof isPrivate === 'undefined') {
isPrivate = false;
window.localStorage.removeItem('test');
}
}

} catch (e) {
isPrivate = false;
}

retry(

function isDone() {
return typeof isPrivate !== 'undefined' ? true : false;
},
Expand Down Expand Up @@ -464,12 +473,30 @@
var osName = 'Unknown OS';
var osVersion = 'Unknown OS Version';

if (isMobile.any()) {
osName = isMobile.getOsName();
} else {
var osInfo = detectDesktopOS();
function getAndroidVersion(ua) {
ua = (ua || navigator.userAgent).toLowerCase();
var match = ua.match(/android\s([0-9\.]*)/);
return match ? match[1] : false;
}

var osInfo = detectDesktopOS();

if (osInfo && osInfo.osName && osInfo.osName != '-') {
osName = osInfo.osName;
osVersion = osInfo.osVersion;
} else if (isMobile.any()) {
osName = isMobile.getOsName();

if (osName == 'Android') {
osVersion = getAndroidVersion();
}
}

var isNodejs = typeof process === 'object' && typeof process.versions === 'object' && process.versions.node;

if (osName === 'Unknown OS' && isNodejs) {
osName = 'Nodejs';
osVersion = process.versions.node.toString().replace('v', '');
}

var isCanvasSupportsStreamCapturing = false;
Expand Down Expand Up @@ -675,6 +702,9 @@
audioOutputDevices = [];
videoInputDevices = [];

isWebsiteHasMicrophonePermissions = false;
isWebsiteHasWebcamPermissions = false;

// to prevent duplication
var alreadyUsedDevices = {};

Expand Down Expand Up @@ -794,7 +824,11 @@
// DetectRTC.isChrome || DetectRTC.isFirefox || DetectRTC.isEdge
DetectRTC.browser['is' + DetectRTC.browser.name] = true;

var isNodeWebkit = !!(window.process && (typeof window.process === 'object') && window.process.versions && window.process.versions['node-webkit']);
// -----------
DetectRTC.osName = osName;
DetectRTC.osVersion = osVersion;

var isNodeWebkit = typeof process === 'object' && typeof process.versions === 'object' && process.versions['node-webkit'];

// --------- Detect if system supports WebRTC 1.0 or WebRTC 1.1.
var isWebRTCSupported = false;
Expand Down Expand Up @@ -877,14 +911,13 @@
isGetUserMediaSupported = true;
}
if (DetectRTC.browser.isChrome && DetectRTC.browser.version >= 46 && location.protocol !== 'https:') {
DetectRTC.isGetUserMediaSupported = 'Requires HTTPs';
isGetUserMediaSupported = 'Requires HTTPs';
}
if (DetectRTC.osName === 'Nodejs') {
isGetUserMediaSupported = false;
}
DetectRTC.isGetUserMediaSupported = isGetUserMediaSupported;

// -----------
DetectRTC.osName = osName;
DetectRTC.osVersion = osVersion;

var displayResolution = '';
if (screen.width) {
var width = (screen.width) ? screen.width : '';
Expand Down Expand Up @@ -913,6 +946,11 @@
DetectRTC.isWebSocketsSupported = 'WebSocket' in window && 2 === window.WebSocket.CLOSING;
DetectRTC.isWebSocketsBlocked = !DetectRTC.isWebSocketsSupported;

if (DetectRTC.osName === 'Nodejs') {
DetectRTC.isWebSocketsSupported = true;
DetectRTC.isWebSocketsBlocked = false;
}

DetectRTC.checkWebSocketsSupport = function(callback) {
callback = callback || function() {};
try {
Expand Down
24 changes: 17 additions & 7 deletions dev/RTCPeerConnection.js
Expand Up @@ -207,6 +207,18 @@ function PeerInitiator(config) {
extra: extra,
userid: self.userid
});

if (isFirefox && peer.iceConnectionState.search(/closed|failed/gi) !== -1) {
self.streams.forEach(function(stream) {
var streamEvent = connection.streamEvents[stream.id] || {
streamid: stream.id,
stream: stream,
type: 'remote'
};

connection.onstreamended(streamEvent);
});
}
};

var sdpConstraints = {
Expand Down Expand Up @@ -264,16 +276,14 @@ function PeerInitiator(config) {
event.stream.isScreen = streamToShare.isScreen;
}
event.stream.streamid = event.stream.id;
if (!event.stream.stop) {
if (isFirefox || !event.stream.stop) {
event.stream.stop = function() {
if (isFirefox) {
var streamEndedEvent = 'ended';
var streamEndedEvent = 'ended';

if ('oninactive' in event.stream) {
streamEndedEvent = 'inactive';
}
fireEvent(event.stream, streamEndedEvent);
if ('oninactive' in event.stream) {
streamEndedEvent = 'inactive';
}
fireEvent(event.stream, streamEndedEvent);
};
}
allRemoteStreams[event.stream.id] = event.stream;
Expand Down
10 changes: 8 additions & 2 deletions dev/globals.js
Expand Up @@ -154,15 +154,21 @@ function getRMCMediaElement(stream, callback, connection) {
if (isFirefox) {
var streamEndedEvent = 'ended';

if ('oninactive' in stream) {
if ('oninactive' in mediaElement) {
streamEndedEvent = 'inactive';
}

mediaElement.addEventListener(streamEndedEvent, function() {
// fireEvent(stream, 'ended', stream);
// fireEvent(stream, streamEndedEvent, stream);
currentUserMediaRequest.remove(stream.idInstance);

if (stream.type === 'local') {
streamEndedEvent = 'ended';

if ('oninactive' in stream) {
streamEndedEvent = 'inactive';
}

StreamsHandler.onSyncNeeded(stream.streamid, streamEndedEvent);

connection.attachStreams.forEach(function(aStream, idx) {
Expand Down

0 comments on commit c3d8dd3

Please sign in to comment.