@@ -66,6 +66,7 @@ export interface AudioRenderTaskOptions extends TaskOptions {
66
66
avframeList : pointer < List < pointer < AVFrameRef > > >
67
67
avframeListMutex : pointer < Mutex >
68
68
enableJitterBuffer : boolean
69
+ isLive : boolean
69
70
}
70
71
71
72
type SelfTask = AudioRenderTaskOptions & {
@@ -245,11 +246,15 @@ export default class AudioRenderPipeline extends Pipeline {
245
246
logger . debug ( `got first audio frame, pts: ${ audioFrame . pts } (${ start } ms), taskId: ${ task . taskId } ` )
246
247
}
247
248
248
- task . currentPTS = avRescaleQ ( audioFrame . pts , task . timeBase , AV_MILLI_TIME_BASE_Q )
249
- if ( task . currentPTS > 0n && task . masterTimer . getMasterTime ( ) - task . currentPTS > MASTER_SYNC_THRESHOLD ) {
250
- task . masterTimer . setMasterTime ( task . currentPTS )
249
+ const pts = avRescaleQ ( audioFrame . pts , task . timeBase , AV_MILLI_TIME_BASE_Q )
250
+ if ( pts > 0n && ( task . masterTimer . getMasterTime ( ) - pts > MASTER_SYNC_THRESHOLD ) ) {
251
+ task . masterTimer . setMasterTime ( pts )
251
252
}
252
-
253
+ // 直播差值大于 4s 认为从某一处开始了
254
+ else if ( task . isLive && ( pts - task . currentPTS > 4000n ) ) {
255
+ task . masterTimer . setMasterTime ( pts )
256
+ }
257
+ task . currentPTS = pts
253
258
task . stats . audioFrameRenderCount ++
254
259
255
260
if ( task . lastRenderTimestamp ) {
@@ -891,10 +896,15 @@ export default class AudioRenderPipeline extends Pipeline {
891
896
892
897
next /= ( task . playRate * task . playTempo )
893
898
894
- task . currentPTS = avRescaleQ ( audioFrame . pts , task . timeBase , AV_MILLI_TIME_BASE_Q )
895
- if ( task . currentPTS > 0n && ( task . masterTimer . getMasterTime ( ) - task . currentPTS > MASTER_SYNC_THRESHOLD ) ) {
896
- task . masterTimer . setMasterTime ( task . currentPTS )
899
+ const pts = avRescaleQ ( audioFrame . pts , task . timeBase , AV_MILLI_TIME_BASE_Q )
900
+ if ( pts > 0n && ( task . masterTimer . getMasterTime ( ) - pts > MASTER_SYNC_THRESHOLD ) ) {
901
+ task . masterTimer . setMasterTime ( pts )
902
+ }
903
+ // 直播差值大于 4s 认为从某一处开始了
904
+ else if ( task . isLive && ( pts - task . currentPTS > 4000n ) ) {
905
+ task . masterTimer . setMasterTime ( pts )
897
906
}
907
+ task . currentPTS = pts
898
908
899
909
const diffPts = task . currentPTS - task . masterTimer . getMasterTime ( )
900
910
if ( diffPts > MASTER_SYNC_THRESHOLD ) {
0 commit comments