@@ -43,7 +43,7 @@ var PHONE = window.PHONE = function(config) {
43
43
// -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
44
44
// Local Microphone and Camera Media (one per device)
45
45
// -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
46
- navigator . getUserMedia =
46
+ navigator . getUserMedia =
47
47
navigator . getUserMedia ||
48
48
navigator . webkitGetUserMedia ||
49
49
navigator . mozGetUserMedia ||
@@ -178,6 +178,7 @@ var PHONE = window.PHONE = function(config) {
178
178
talk . ended = function ( cb ) { talk . end = cb ; return talk } ;
179
179
talk . connected = function ( cb ) { talk . connect = cb ; return talk } ;
180
180
talk . message = function ( cb ) { talk . usermsg = cb ; return talk } ;
181
+ talk . media = function ( cb ) { talk . mediachanged = cb ; return talk } ;
181
182
182
183
// Add Local Media Streams Audio Video Mic Camera
183
184
talk . pc . addStream ( mystream ) ;
@@ -253,6 +254,21 @@ var PHONE = window.PHONE = function(config) {
253
254
return talk ;
254
255
} ;
255
256
257
+ // -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
258
+ // Update Media - Mute/Unmute, Stop Video
259
+ // -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
260
+ PHONE . updateMedia = function ( media ) {
261
+ mediaconf = media || { audio : true , video : true } ;
262
+ update_tracks ( mystream , mediaconf . audio , mediaconf . video ) ;
263
+ PUBNUB . each ( conversations , function ( number , talk ) {
264
+ transmit ( number , {
265
+ media : true ,
266
+ video : mediaconf . video ,
267
+ audio : mediaconf . audio
268
+ } )
269
+ } ) ;
270
+ } ;
271
+
256
272
// -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
257
273
// Send Image Snap - Send Image Snap to All Calls or a Specific Call
258
274
// -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
@@ -346,15 +362,12 @@ var PHONE = window.PHONE = function(config) {
346
362
// Visually Display New Stream
347
363
// -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
348
364
function onaddstream ( obj ) {
349
- var vid = document . createElement ( 'video' ) ;
350
365
var stream = obj . stream ;
351
366
var number = ( obj . srcElement || obj . target ) . number ;
352
367
var talk = get_conversation ( number ) ;
353
368
354
- vid . setAttribute ( 'autoplay' , 'autoplay' ) ;
355
- vid . src = URL . createObjectURL ( stream ) ;
356
-
357
- talk . video = vid ;
369
+ talk . video = create_video ( stream ) ;
370
+ talk . stream = stream ;
358
371
talk . connect ( talk ) ;
359
372
}
360
373
@@ -451,6 +464,11 @@ var PHONE = window.PHONE = function(config) {
451
464
// If Hangup Request
452
465
if ( message . packet . hangup ) return talk . hangup ( false ) ;
453
466
467
+ // Update Media
468
+ if ( message . packet . media && talk . stream ) {
469
+ return update_media ( talk , message ) ;
470
+ }
471
+
454
472
// If Peer Calling Inbound (Incoming)
455
473
if ( message . packet . sdp && ! talk . received ) {
456
474
talk . received = true ;
@@ -530,10 +548,43 @@ var PHONE = window.PHONE = function(config) {
530
548
) ;
531
549
}
532
550
551
+ // -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
552
+ // Update the stream media and call the session callback
553
+ // -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
554
+ function update_media ( talk , message ) {
555
+ update_tracks ( talk . stream , message . packet . audio , message . packet . video ) ;
556
+ talk . mediachanged ( talk )
557
+ }
558
+
559
+ // -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
560
+ // Update the stream video and audio tracks
561
+ // -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
562
+ function update_tracks ( stream , audio , video ) {
563
+ var audioTracks = stream . getAudioTracks ( ) ;
564
+ var videoTracks = stream . getVideoTracks ( ) ;
565
+
566
+ // if MediaStream has reference to microphone
567
+ if ( audioTracks [ 0 ] ) {
568
+ audioTracks [ 0 ] . enabled = audio ;
569
+ }
570
+
571
+ // if MediaStream has reference to webcam
572
+ if ( videoTracks [ 0 ] ) {
573
+ videoTracks [ 0 ] . enabled = video ;
574
+ }
575
+ }
576
+
577
+ function create_video ( stream ) {
578
+ var video = document . createElement ( 'video' ) ;
579
+ video . src = URL . createObjectURL ( stream ) ;
580
+ video . setAttribute ( 'autoplay' , 'autoplay' ) ;
581
+ return video ;
582
+ }
583
+
533
584
// -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
534
585
// Main - Request Camera and Mic
535
586
// -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
536
- getusermedia ( )
587
+ getusermedia ( ) ;
537
588
538
589
return PHONE ;
539
590
} ;
0 commit comments