Player may get stuck in audio-only mode
Kjeld commented on Dec 18, 2017, 4:23 PM UTC:
Description
The issue is that our 4K UHD stream doesn't play video. It only reads (and plays back) the audio .ts chucks. We think it is related to a undefined width and height issue.
Sources
https://content.streamone.io/embed/item=TpZBf-QKi4e2/bbbuhd60p.html https://media.streamone.io/hls/account=MpBJPKUJ4Y6i/item=TpZBf-QKi4e2/TpZBf-QKi4e2.m3u8
Steps to reproduce
- In Chrome (Version 63.0.3239.84 High Sierra) https://content.streamone.io/embed/item=TpZBf-QKi4e2/bbbuhd60p.html
- https://videojs.github.io/videojs-contrib-hls/ source https://media.streamone.io/hls/account=MpBJPKUJ4Y6i/item=TpZBf-QKi4e2/TpZBf-QKi4e2.m3u8
- Check the Chrome developer Tools
Results
Expected
Playback of 60fps UHD video.
videojs-contrib-hls version
It can be reproduced on you latest release https://videojs.github.io/videojs-contrib-hls/
Browsers
Chrome Firefox
Platforms
High Sierra Debian 8
PS: The item is currently transcoding on a test account for you to publicly access, it will be there in 60 minutes from now. 12:23 UTC+1 == NOW()
This issue was moved by forbesjo from videojs/videojs-contrib-hls#1309.
forbesjo commented on Jul 2, 2018, 4:59 PM UTC:
This is related to #1435, closing this in favor of the other issue
squarebracket commented on Jul 12, 2018, 11:32 PM UTC:
Reopening as it's unrelated to #1435 (segment size isn't what's causing the describing problem per se).
Kjeld your playlist confuses me. You have an EXT-X-MEDIA for the audio with no URI, but then have an audio-only EXT-X-STREAM-INF later. Is there a reason you're not just using it as the URI attribute of the EXT-X-MEDIA?
In any case, what's happening here is that the initial bandwidth is low enough and the video playlist's BANDWIDTH is high enough that the initial playlist selector is choosing the audio-only playlist by default. Once that happens, it's locked into audio-only; the source buffers are made only once, and since the first playlist it selects only has audio, it only creates an audio source buffer.
If you feed in a pre-programmed bandwidth to use during initial playlist selection, à-la
videojs('videojs-contrib-hls-player', {html5: {hls: {bandwidth: 30000000}}})
it will select the audio+video playlist and everything will work out.
Perhaps we should add something to the initial playlist selection that disregards any audio-only variants if there are any audio+video variants.
That being said, unless you need it, you should consider dropping the only audio-only variant playlist. Note that Apple no longer recommends using an audio-only playlist in its HLS authoring guidelines; it now recommends a playlist with low-bitrate audio and video. Alternatively, simply encode more variants that have lower-bandwidth streams.
forbesjo commented on Aug 1, 2018, 8:09 PM UTC:
Moving this to VHS and we can fix this initial playlist selection logic there
/move to http-streaming
Renaming this issue to clarify what the bug is
We can fix this by making sure not to select the audio-only playlist if we know that there are video+audio playlists available. The player may still get in this state if the manifest does not specify codec information.
Bug is still ocurring on my end, but setting html5.hls.enableLowInitialPlaylist to true, makes it work.
Here is the .m3u8 used (generated by Azure Media Service):
#EXTM3U
#EXT-X-VERSION:4
#EXT-X-MEDIA:TYPE=AUDIO,GROUP-ID="audio",NAME="audio",DEFAULT=YES,URI="QualityLevels(196000)/Manifest(audio,format=m3u8-aapl)"
#EXT-X-STREAM-INF:BANDWIDTH=4474284,RESOLUTION=1920x1080,CODECS="avc1.4d402a,mp4a.40.2",AUDIO="audio"
QualityLevels(4166000)/Manifest(video,format=m3u8-aapl)
#EXT-X-I-FRAME-STREAM-INF:BANDWIDTH=4474284,RESOLUTION=1920x1080,CODECS="avc1.4d402a",URI="QualityLevels(4166000)/Manifest(video,format=m3u8-aapl,type=keyframes)"
#EXT-X-STREAM-INF:BANDWIDTH=208472,CODECS="mp4a.40.2",AUDIO="audio"
QualityLevels(196000)/Manifest(audio,format=m3u8-aapl)
Disabling the audio-only track also fixes the problem like mentionned in this issue. For anyone using Azure Media Service, you can disable it by adding audio-only=false to your dynamic manifest link:
https://{your-endpoint}.streaming.media.azure.net/{generated-id}/{generated-ism-id}.ism/manifest(format=m3u8-aapl,audio-only=false)
@malandles Sometimes it's working but sometimes still the player plays audio only. as I can't see any progress on this issue here. need fix.
Same here with videos 8 and Wowza Streaming Server. Only audio and black video...