You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

142 lines
4.4 KiB

  1. var RTCPeerConnection = null;
  2. var getUserMedia = null;
  3. var attachMediaStream = null;
  4. var reattachMediaStream = null;
  5. var webrtcDetectedBrowser = null;
  6. var webrtcDetectedVersion = null;
  7. function trace(text) {
  8. // This function is used for logging.
  9. if (text[text.length - 1] == '\n') {
  10. text = text.substring(0, text.length - 1);
  11. }
  12. console.log((performance.now() / 1000).toFixed(3) + ": " + text);
  13. }
  14. if (navigator.mozGetUserMedia) {
  15. console.log("This appears to be Firefox");
  16. webrtcDetectedBrowser = "firefox";
  17. webrtcDetectedVersion =
  18. parseInt(navigator.userAgent.match(/Firefox\/([0-9]+)\./)[1], 10);
  19. // The RTCPeerConnection object.
  20. RTCPeerConnection = mozRTCPeerConnection;
  21. // The RTCSessionDescription object.
  22. RTCSessionDescription = mozRTCSessionDescription;
  23. // The RTCIceCandidate object.
  24. RTCIceCandidate = mozRTCIceCandidate;
  25. // Get UserMedia (only difference is the prefix).
  26. // Code from Adam Barth.
  27. getUserMedia = navigator.mozGetUserMedia.bind(navigator);
  28. navigator.getUserMedia = getUserMedia;
  29. // Creates iceServer from the url for FF.
  30. createIceServer = function(url, username, password) {
  31. var iceServer = null;
  32. var url_parts = url.split(':');
  33. if (url_parts[0].indexOf('stun') === 0) {
  34. // Create iceServer with stun url.
  35. iceServer = { 'url': url };
  36. } else if (url_parts[0].indexOf('turn') === 0) {
  37. if (webrtcDetectedVersion < 27) {
  38. // Create iceServer with turn url.
  39. // Ignore the transport parameter from TURN url for FF version <=27.
  40. var turn_url_parts = url.split("?");
  41. // Return null for createIceServer if transport=tcp.
  42. if (turn_url_parts.length === 1 ||
  43. turn_url_parts[1].indexOf('transport=udp') === 0) {
  44. iceServer = { 'url': turn_url_parts[0],
  45. 'credential': password,
  46. 'username': username };
  47. }
  48. } else {
  49. // FF 27 and above supports transport parameters in TURN url,
  50. // So passing in the full url to create iceServer.
  51. iceServer = { 'url': url,
  52. 'credential': password,
  53. 'username': username };
  54. }
  55. }
  56. return iceServer;
  57. };
  58. // Attach a media stream to an element.
  59. attachMediaStream = function(element, stream) {
  60. console.log("Attaching media stream");
  61. element.mozSrcObject = stream;
  62. element.play();
  63. };
  64. reattachMediaStream = function(to, from) {
  65. console.log("Reattaching media stream");
  66. to.mozSrcObject = from.mozSrcObject;
  67. to.play();
  68. };
  69. // Fake get{Video,Audio}Tracks
  70. if (!MediaStream.prototype.getVideoTracks) {
  71. MediaStream.prototype.getVideoTracks = function() {
  72. return [];
  73. };
  74. }
  75. if (!MediaStream.prototype.getAudioTracks) {
  76. MediaStream.prototype.getAudioTracks = function() {
  77. return [];
  78. };
  79. }
  80. } else if (navigator.webkitGetUserMedia) {
  81. console.log("This appears to be Chrome");
  82. webrtcDetectedBrowser = "chrome";
  83. webrtcDetectedVersion =
  84. parseInt(navigator.userAgent.match(/Chrom(e|ium)\/([0-9]+)\./)[2], 10);
  85. // Creates iceServer from the url for Chrome.
  86. createIceServer = function(url, username, password) {
  87. var iceServer = null;
  88. var url_parts = url.split(':');
  89. if (url_parts[0].indexOf('stun') === 0) {
  90. // Create iceServer with stun url.
  91. iceServer = { 'url': url };
  92. } else if (url_parts[0].indexOf('turn') === 0) {
  93. // Chrome M28 & above uses below TURN format.
  94. iceServer = { 'url': url,
  95. 'credential': password,
  96. 'username': username };
  97. }
  98. return iceServer;
  99. };
  100. // The RTCPeerConnection object.
  101. RTCPeerConnection = webkitRTCPeerConnection;
  102. // Get UserMedia (only difference is the prefix).
  103. // Code from Adam Barth.
  104. getUserMedia = navigator.webkitGetUserMedia.bind(navigator);
  105. navigator.getUserMedia = getUserMedia;
  106. // Attach a media stream to an element.
  107. attachMediaStream = function(element, stream) {
  108. if (typeof element.srcObject !== 'undefined') {
  109. element.srcObject = stream;
  110. } else if (typeof element.mozSrcObject !== 'undefined') {
  111. element.mozSrcObject = stream;
  112. } else if (typeof element.src !== 'undefined') {
  113. element.src = URL.createObjectURL(stream);
  114. } else {
  115. console.log('Error attaching stream to element.');
  116. }
  117. };
  118. reattachMediaStream = function(to, from) {
  119. to.src = from.src;
  120. };
  121. } else {
  122. console.log("Browser does not appear to be WebRTC-capable");
  123. }