@@ -24,6 +24,7 @@ export default class TransmuxerInterface {
24
24
private observer : HlsEventEmitter ;
25
25
private frag : Fragment | null = null ;
26
26
private part : Part | null = null ;
27
+ private useWorker : boolean ;
27
28
private worker : any ;
28
29
private onwmsg ?: Function ;
29
30
private transmuxer : Transmuxer | null = null ;
@@ -36,18 +37,18 @@ export default class TransmuxerInterface {
36
37
onTransmuxComplete : ( transmuxResult : TransmuxerResult ) => void ,
37
38
onFlush : ( chunkMeta : ChunkMetadata ) => void
38
39
) {
40
+ const config = hls . config ;
39
41
this . hls = hls ;
40
42
this . id = id ;
43
+ this . useWorker = ! ! config . enableWorker ;
41
44
this . onTransmuxComplete = onTransmuxComplete ;
42
45
this . onFlush = onFlush ;
43
46
44
- const config = hls . config ;
45
-
46
47
const forwardMessage = ( ev , data ) => {
47
48
data = data || { } ;
48
49
data . frag = this . frag ;
49
50
data . id = this . id ;
50
- hls . trigger ( ev , data ) ;
51
+ this . hls . trigger ( ev , data ) ;
51
52
} ;
52
53
53
54
// forward events to main thread
@@ -63,7 +64,7 @@ export default class TransmuxerInterface {
63
64
// navigator.vendor is not always available in Web Worker
64
65
// refer to https://developer.mozilla.org/en-US/docs/Web/API/WorkerGlobalScope/navigator
65
66
const vendor = navigator . vendor ;
66
- if ( config . enableWorker && typeof Worker !== 'undefined' ) {
67
+ if ( this . useWorker && typeof Worker !== 'undefined' ) {
67
68
logger . log ( 'demuxing in webworker' ) ;
68
69
let worker ;
69
70
try {
@@ -73,10 +74,12 @@ export default class TransmuxerInterface {
73
74
this . onwmsg = this . onWorkerMessage . bind ( this ) ;
74
75
worker . addEventListener ( 'message' , this . onwmsg ) ;
75
76
worker . onerror = ( event ) => {
76
- hls . trigger ( Events . ERROR , {
77
+ this . useWorker = false ;
78
+ logger . warn ( 'Exception in webworker, fallback to inline' ) ;
79
+ this . hls . trigger ( Events . ERROR , {
77
80
type : ErrorTypes . OTHER_ERROR ,
78
81
details : ErrorDetails . INTERNAL_EXCEPTION ,
79
- fatal : true ,
82
+ fatal : false ,
80
83
event : 'demuxerWorker' ,
81
84
error : new Error (
82
85
`${ event . message } (${ event . filename } :${ event . lineno } )`
@@ -159,6 +162,7 @@ export default class TransmuxerInterface {
159
162
chunkMeta . transmuxing . start = self . performance . now ( ) ;
160
163
const { transmuxer, worker } = this ;
161
164
const timeOffset = part ? part . start : frag . start ;
165
+ // TODO: push "clear-lead" decrypt data for unencrypted fragments in streams with encrypted ones
162
166
const decryptdata = frag . decryptdata ;
163
167
const lastFrag = this . frag ;
164
168
0 commit comments