@@ -81,17 +81,21 @@ shaka.cast.CastProxy = class extends shaka.util.FakeEventTarget {
81
81
this . compiledToExternNames_ = new Map ( ) ;
82
82
83
83
/** @private {shaka.cast.CastSender} */
84
- this . sender_ = new shaka . cast . CastSender (
85
- receiverAppId ,
86
- ( ) => this . onCastStatusChanged_ ( ) ,
87
- ( ) => this . onFirstCastStateUpdate_ ( ) ,
88
- ( targetName , event ) => this . onRemoteEvent_ ( targetName , event ) ,
89
- ( ) => this . onResumeLocal_ ( ) ,
90
- ( ) => this . getInitState_ ( ) ,
91
- androidReceiverCompatible ) ;
92
-
84
+ this . sender_ = null ;
93
85
94
- this . init_ ( ) ;
86
+ if ( window . chrome ) {
87
+ this . sender_ = new shaka . cast . CastSender (
88
+ receiverAppId ,
89
+ ( ) => this . onCastStatusChanged_ ( ) ,
90
+ ( ) => this . onFirstCastStateUpdate_ ( ) ,
91
+ ( targetName , event ) => this . onRemoteEvent_ ( targetName , event ) ,
92
+ ( ) => this . onResumeLocal_ ( ) ,
93
+ ( ) => this . getInitState_ ( ) ,
94
+ androidReceiverCompatible ) ;
95
+ this . init_ ( ) ;
96
+ } else {
97
+ this . initWithoutSender_ ( ) ;
98
+ }
95
99
}
96
100
97
101
/**
@@ -163,6 +167,9 @@ shaka.cast.CastProxy = class extends shaka.util.FakeEventTarget {
163
167
* @export
164
168
*/
165
169
canCast ( ) {
170
+ if ( ! this . sender_ ) {
171
+ return false ;
172
+ }
166
173
return this . sender_ . apiReady ( ) && this . sender_ . hasReceivers ( ) ;
167
174
}
168
175
@@ -171,6 +178,9 @@ shaka.cast.CastProxy = class extends shaka.util.FakeEventTarget {
171
178
* @export
172
179
*/
173
180
isCasting ( ) {
181
+ if ( ! this . sender_ ) {
182
+ return false ;
183
+ }
174
184
return this . sender_ . isCasting ( ) ;
175
185
}
176
186
@@ -179,6 +189,9 @@ shaka.cast.CastProxy = class extends shaka.util.FakeEventTarget {
179
189
* @export
180
190
*/
181
191
receiverName ( ) {
192
+ if ( ! this . sender_ ) {
193
+ return '' ;
194
+ }
182
195
return this . sender_ . receiverName ( ) ;
183
196
}
184
197
@@ -188,6 +201,9 @@ shaka.cast.CastProxy = class extends shaka.util.FakeEventTarget {
188
201
* @export
189
202
*/
190
203
async cast ( ) {
204
+ if ( ! this . sender_ ) {
205
+ return ;
206
+ }
191
207
// TODO: transfer manually-selected tracks?
192
208
// TODO: transfer side-loaded text tracks?
193
209
@@ -208,6 +224,9 @@ shaka.cast.CastProxy = class extends shaka.util.FakeEventTarget {
208
224
* @export
209
225
*/
210
226
setAppData ( appData ) {
227
+ if ( ! this . sender_ ) {
228
+ return ;
229
+ }
211
230
this . sender_ . setAppData ( appData ) ;
212
231
}
213
232
@@ -216,6 +235,9 @@ shaka.cast.CastProxy = class extends shaka.util.FakeEventTarget {
216
235
* @export
217
236
*/
218
237
suggestDisconnect ( ) {
238
+ if ( ! this . sender_ ) {
239
+ return ;
240
+ }
219
241
this . sender_ . showDisconnectDialog ( ) ;
220
242
}
221
243
@@ -224,6 +246,9 @@ shaka.cast.CastProxy = class extends shaka.util.FakeEventTarget {
224
246
* @export
225
247
*/
226
248
forceDisconnect ( ) {
249
+ if ( ! this . sender_ ) {
250
+ return ;
251
+ }
227
252
this . sender_ . forceDisconnect ( ) ;
228
253
}
229
254
@@ -243,6 +268,10 @@ shaka.cast.CastProxy = class extends shaka.util.FakeEventTarget {
243
268
this . receiverAppId_ = newAppId ;
244
269
this . androidReceiverCompatible_ = newCastAndroidReceiver ;
245
270
271
+ if ( ! this . sender_ ) {
272
+ return ;
273
+ }
274
+
246
275
// Destroy the old sender
247
276
this . sender_ . forceDisconnect ( ) ;
248
277
await this . sender_ . destroy ( ) ;
@@ -262,6 +291,15 @@ shaka.cast.CastProxy = class extends shaka.util.FakeEventTarget {
262
291
this . sender_ . init ( ) ;
263
292
}
264
293
294
+ /**
295
+ * Initialize the Proxies without Cast sender.
296
+ * @private
297
+ */
298
+ initWithoutSender_ ( ) {
299
+ this . videoProxy_ = /** @type {Object } */ ( this . localVideo_ ) ;
300
+ this . playerProxy_ = /** @type {Object } */ ( this . localPlayer_ ) ;
301
+ }
302
+
265
303
/**
266
304
* Initialize the Proxies and the Cast sender.
267
305
* @private
0 commit comments