@@ -4,6 +4,7 @@ import { ILogFunction, enableLogs, logger } from '../utils/logger';
44import { EventEmitter } from 'eventemitter3' ;
55import type { RemuxedTrack , RemuxerResult } from '../types/remuxer' ;
66import type { TransmuxerResult , ChunkMetadata } from '../types/transmuxer' ;
7+ import { ErrorDetails , ErrorTypes } from '../errors' ;
78
89export default function TransmuxerWorker ( self ) {
910 const observer = new EventEmitter ( ) ;
@@ -59,21 +60,51 @@ export default function TransmuxerWorker(self) {
5960 data . state
6061 ) ;
6162 if ( isPromise ( transmuxResult ) ) {
62- transmuxResult . then ( ( data ) => {
63- emitTransmuxComplete ( self , data ) ;
64- } ) ;
63+ self . transmuxer . async = true ;
64+ transmuxResult
65+ . then ( ( data ) => {
66+ emitTransmuxComplete ( self , data ) ;
67+ } )
68+ . catch ( ( error ) => {
69+ forwardMessage ( Events . ERROR , {
70+ type : ErrorTypes . MEDIA_ERROR ,
71+ details : ErrorDetails . FRAG_PARSING_ERROR ,
72+ chunkMeta : data . chunkMeta ,
73+ fatal : false ,
74+ error,
75+ err : error ,
76+ reason : `transmuxer-worker push error` ,
77+ } ) ;
78+ } ) ;
6579 } else {
80+ self . transmuxer . async = false ;
6681 emitTransmuxComplete ( self , transmuxResult ) ;
6782 }
6883 break ;
6984 }
7085 case 'flush' : {
7186 const id = data . chunkMeta ;
72- const transmuxResult = self . transmuxer . flush ( id ) ;
73- if ( isPromise ( transmuxResult ) ) {
74- transmuxResult . then ( ( results : Array < TransmuxerResult > ) => {
75- handleFlushResult ( self , results as Array < TransmuxerResult > , id ) ;
76- } ) ;
87+ let transmuxResult = self . transmuxer . flush ( id ) ;
88+ const asyncFlush = isPromise ( transmuxResult ) ;
89+ if ( asyncFlush || self . transmuxer . async ) {
90+ if ( ! isPromise ( transmuxResult ) ) {
91+ transmuxResult = Promise . resolve ( transmuxResult ) ;
92+ }
93+ transmuxResult
94+ . then ( ( results : Array < TransmuxerResult > ) => {
95+ handleFlushResult ( self , results as Array < TransmuxerResult > , id ) ;
96+ } )
97+ . catch ( ( error ) => {
98+ forwardMessage ( Events . ERROR , {
99+ type : ErrorTypes . MEDIA_ERROR ,
100+ details : ErrorDetails . FRAG_PARSING_ERROR ,
101+ chunkMeta : data . chunkMeta ,
102+ fatal : false ,
103+ error,
104+ err : error ,
105+ reason : `transmuxer-worker flush error` ,
106+ } ) ;
107+ } ) ;
77108 } else {
78109 handleFlushResult (
79110 self ,
0 commit comments