@@ -158,7 +158,7 @@ function newMediaStreamId() {
158158}
159159
160160// Save original MediaStream
161- var originalMediaStream = window . MediaStream ;
161+ var originalMediaStream = window . MediaStream || window . Blob ;
162162var originalMediaStreamTrack = MediaStreamTrack . originalMediaStreamTrack ;
163163
164164/**
@@ -171,8 +171,9 @@ function MediaStream(arg, id) {
171171 // new MediaStream(originalMediaStream) // stream
172172 // new MediaStream(originalMediaStreamTrack[]) // tracks
173173 if (
174- ( arg instanceof originalMediaStream && typeof arg . getBlobId === 'undefined' ) ||
175- ( Array . isArray ( arg ) && arg [ 0 ] instanceof originalMediaStreamTrack )
174+ ! ( arg instanceof window . Blob ) &&
175+ ( arg instanceof originalMediaStream && typeof arg . getBlobId === 'undefined' ) ||
176+ ( Array . isArray ( arg ) && arg [ 0 ] instanceof originalMediaStreamTrack )
176177 ) {
177178 return new originalMediaStream ( arg ) ;
178179 }
@@ -181,9 +182,23 @@ function MediaStream(arg, id) {
181182 // new MediaStream(MediaStreamTrack[]) // tracks
182183 // new MediaStream() // empty
183184
184- // TODO attempt CustomMediaStream extend.
185185 // Extend returned MediaTream with custom MediaStream
186- var stream = new ( Function . prototype . bind . apply ( originalMediaStream . bind ( this ) , [ ] ) ) ; // jshint ignore:line
186+ var stream ;
187+ if ( originalMediaStream !== window . Blob ) {
188+ stream = new ( Function . prototype . bind . apply ( originalMediaStream . bind ( this ) , [ ] ) ) ; // jshint ignore:line
189+
190+ // Fallback on Blob if originalMediaStream is not a MediaStream and Emulate EventTarget
191+ } else {
192+ stream = new Blob ( [ ] , {
193+ type : 'stream'
194+ } ) ;
195+
196+ var target = document . createTextNode ( null ) ;
197+ stream . addEventListener = target . addEventListener . bind ( target ) ;
198+ stream . removeEventListener = target . removeEventListener . bind ( target ) ;
199+ stream . dispatchEvent = target . dispatchEvent . bind ( target ) ;
200+ }
201+
187202 Object . defineProperties ( stream , Object . getOwnPropertyDescriptors ( MediaStream . prototype ) ) ;
188203
189204 // Make it an EventTarget.
@@ -1009,9 +1024,13 @@ var
10091024 EventTarget = _dereq_ ( './EventTarget' ) ;
10101025
10111026// Save original MediaStreamTrack
1012- var originalMediaStreamTrack = window . MediaStreamTrack ;
1027+ var originalMediaStreamTrack = window . MediaStreamTrack || function dummyMediaStreamTrack ( ) { } ;
10131028
10141029function MediaStreamTrack ( dataFromEvent ) {
1030+ if ( ! dataFromEvent ) {
1031+ throw new Error ( 'Illegal constructor' ) ;
1032+ }
1033+
10151034 debug ( 'new() | [dataFromEvent:%o]' , dataFromEvent ) ;
10161035
10171036 var self = this ;
0 commit comments