Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Audio glitch at the end of first segment/start of the second #1419

Closed
4 tasks done
epastor opened this issue Nov 6, 2017 · 3 comments
Closed
4 tasks done

Audio glitch at the end of first segment/start of the second #1419

epastor opened this issue Nov 6, 2017 · 3 comments

Comments

@epastor
Copy link

epastor commented Nov 6, 2017

Environment
Steps to reproduce
  1. Please provide clear steps to reproduce your problem.
    Try the URL to playable M3U8 in the demo 0.8.5 demo page with default settings, wait until 00:06 (which is the end of first segment/start of the second), you'll hear an audio glitch.
  2. If the bug is intermittent, give a rough frequency if possible
    Not intermittent, the bug is reproducible 100% of the time.
Expected behavior

Video should play continuously across segment boundaries without audible glitches

Actual behavior

Video presents an audible glitch at the end of the first segment/start of the second

Console output
[log] > loadSource:https://s3-us-west-2.amazonaws.com/epastor2/hlsbug/master.m3u8
logger.js:37 [log] > trigger BUFFER_RESET
logger.js:37 [log] > set autoLevelCapping:-1
logger.js:37 [log] > attachMedia
logger.js:37 [log] > media source opened
logger.js:37 [log] > manifest loaded,3 level(s) found, first bitrate:275000
logger.js:37 [log] > 2 sourceBuffer(s) expected
logger.js:37 [log] > startLoad(-1)
logger.js:37 [log] > switching to level 1
logger.js:37 [log] > loading playlist for level 1
logger.js:37 [log] > main stream:STOPPED->IDLE
logger.js:37 [log] > audio tracks updated
logger.js:37 [log] > switching to audioTrack 0
logger.js:37 [log] > audio stream:STOPPED->PAUSED
logger.js:37 [log] > audio stream:PAUSED->IDLE
logger.js:37 [log] > (re)loading playlist for audioTrack 0
logger.js:37 [log] > loading playlist for audioTrack 0
logger.js:37 [log] > subtitle tracks updated
logger.js:37 [log] > level 1 loaded [0,1],duration:10.466666999999998
logger.js:37 [log] > Loading 0 of [0 ,1],level 1, currentTime:0.000,bufferEnd:0.000
logger.js:37 [log] > demuxing in webworker
logger.js:37 [log] > main stream:IDLE->FRAG_LOADING
(index):370 parsing level duration :260us,count:1
logger.js:37 [log] > track 0 loaded [0,1],duration:10.432000000000002
logger.js:37 [log] > Loading 0, cc: 0 of [0 ,1],track 0, currentTime:0,bufferEnd:0.000
logger.js:37 [log] > audio stream:IDLE->FRAG_LOADING
logger.js:37 [log] > audioTrack 0 loaded
logger.js:37 [log] > Loaded  0 of [0 ,1],level 1
logger.js:37 [log] > main stream:FRAG_LOADING->PARSING
logger.js:37 [log] > Parsing 0 of [0 ,1],level 1, cc 0
logger.js:37 [log] > main:discontinuity detected
logger.js:37 [log] > main:switch detected
logger.js:37 [log] > InitPTS for cc:0 found from video track:132000
logger.js:37 [log] > main track:video,container:video/mp4,codecs[level/parsed]=[avc1.4d001f/avc1.4d401f]
logger.js:37 [log] > Parsed video,PTS:[0.067,6.067],DTS:[0.000/6.000],nb:180,dropped:0
logger.js:37 [log] > main stream:PARSING->PARSED
logger.js:37 [log] > audio stream:FRAG_LOADING->PARSING
logger.js:37 [log] > demuxing in webworker
logger.js:37 [log] > Demuxing 0 of [0 ,1],track 0
logger.js:37 [log] > audio:discontinuity detected
logger.js:37 [log] > audio:switch detected
blob:http://streambox.fr/bac25eea-a6d3-4e95-bc42-c8bfd44c39ab:516 [log] > manifest codec:mp4a.40.2,ADTS data:type:2,sampleingIndex:3[48000Hz],channelConfig:1
blob:http://streambox.fr/bac25eea-a6d3-4e95-bc42-c8bfd44c39ab:516 [log] > parsed codec:mp4a.40.5,rate:48000,nb channel:1
blob:http://streambox.fr/bac25eea-a6d3-4e95-bc42-c8bfd44c39ab:516 [log] > audio sampling rate : 48000
logger.js:37 [log] > creating sourceBuffer(video/mp4;codecs=avc1.4d001f)
logger.js:37 [log] > creating sourceBuffer(audio/mp4;codecs=mp4a.40.5)
logger.js:37 [log] > alternate track found, use video.buffered to schedule main fragment loading
logger.js:37 [log] > audio track:audio,container:audio/mp4,codecs[level/parsed]=[mp4a.40.5/mp4a.40.5]
logger.js:37 [log] > main buffered : [0.000,6.000]
logger.js:37 [log] > latency/loading/parsing/append/kbps:158/53/25/70/2398
logger.js:37 [log] > main stream:PARSED->IDLE
logger.js:37 [log] > switching to level 2
logger.js:37 [log] > loading playlist for level 2
logger.js:37 [log] > main stream:IDLE->WAITING_LEVEL
logger.js:37 [log] > parsed audio,PTS:[0.000,6.077],DTS:[0.000/6.077],nb:288
logger.js:37 [log] > audio stream:PARSING->PARSED
logger.js:37 [log] > audio buffered : [0.000,6.144]
logger.js:37 [log] > audio stream:PARSED->IDLE
logger.js:37 [log] > Loading 1, cc: 0 of [0 ,1],track 0, currentTime:0,bufferEnd:6.144
logger.js:37 [log] > audio stream:IDLE->FRAG_LOADING
logger.js:37 [log] > Updating mediasource duration to 10.467
logger.js:37 [log] > target start position:0
logger.js:37 [log] > adjust currentTime from 0.002991 to 0
logger.js:37 [log] > media seeking to 0.000
logger.js:37 [log] > level 2 loaded [0,1],duration:10.466666999999998
logger.js:37 [log] > main stream:WAITING_LEVEL->IDLE
logger.js:37 [log] > Loading 1 of [0 ,1],level 2, currentTime:0.000,bufferEnd:6.000
logger.js:37 [log] > main stream:IDLE->FRAG_LOADING
(index):370 parsing level duration :190us,count:2
logger.js:37 [log] > media seeked to 0.000
logger.js:37 [log] > audio stream:FRAG_LOADING->PARSING
logger.js:37 [log] > Demuxing 1 of [0 ,1],track 0
logger.js:37 [log] > parsed audio,PTS:[6.077,10.493],DTS:[6.077/10.493],nb:207
logger.js:37 [log] > audio stream:PARSING->PARSED
logger.js:37 [log] > audio buffered : [0.000,10.493]
logger.js:37 [log] > audio stream:PARSED->IDLE
logger.js:37 [log] > audio sourceBuffer now EOS
logger.js:37 [log] > audio stream:IDLE->ENDED
logger.js:37 [log] > Loaded  1 of [0 ,1],level 2
logger.js:37 [log] > main stream:FRAG_LOADING->PARSING
logger.js:37 [log] > Parsing 1 of [0 ,1],level 2, cc 0
logger.js:37 [log] > main:switch detected
blob:http://streambox.fr/23a68ed7-8e1b-445a-8627-8a09c3539e8c:516 [log] > reparse from beginning
logger.js:37 [log] > main track:video,container:video/mp4,codecs[level/parsed]=[avc1.4d001f/avc1.4d401f]
logger.js:37 [log] > Parsed video,PTS:[6.067,10.533],DTS:[6.000/10.467],nb:134,dropped:0
logger.js:37 [log] > main stream:PARSING->PARSED
logger.js:37 [log] > main buffered : [0.000,10.467]
logger.js:37 [log] > latency/loading/parsing/append/kbps:76/32/13/1/7617
logger.js:37 [log] > main stream:PARSED->IDLE
logger.js:37 [log] > video sourceBuffer now EOS
logger.js:37 [log] > all media data available, signal endOfStream() to MediaSource and stop loading fragment
logger.js:37 [log] > main stream:IDLE->ENDED
logger.js:37 [log] > media source ended
logger.js:37 [log] > media ended
@mangui
Copy link
Member

mangui commented Nov 30, 2017

I could indeed spot weird audio frame duration at the beginning of the second fragment in the remuxed fmp4 (analyzed by ffprobe)
image

but the output of the remuxer seems correct.
really strange. i will dig further

mangui added a commit that referenced this issue Dec 1, 2017
these samples are not playable anyway.
if we don't remove these samples, they will shift all audio samples forward, leading to audio overlap between current / next fragment

related to #1419
mangui added a commit that referenced this issue Dec 1, 2017
related to #1419
@mangui
Copy link
Member

mangui commented Dec 1, 2017

should be fixed, you can recheck with latest dist/demo

@epastor
Copy link
Author

epastor commented Dec 13, 2017

This fixed the issue, thank you!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants