videojs / http-streaming

HLS, DASH, and future HTTP streaming protocols library for video.js
https://videojs-http-streaming.netlify.app/
Other
2.49k stars 422 forks source link

Error when switching bitrate in a HLS stream with AES-128 encryption #1273

Open dagalvao opened 2 years ago

dagalvao commented 2 years ago

Please do not delete the template, by filling out the required information we can investigate your issue more quickly.

Before opening an issue see if your problem can be resolved with the troubleshooting guide.

Description

When switching to a different bitrate in a HLS stream with AES-128 encryption, VideoJS stops playback and throws error: "video append of 86718b failed for segment #0 in playlist 0-QualityLevels(400000)/Manifest(video,format=m3u8-cmaf,encryption=cbc)"

Sometimes, if you load the player again, the bitrate switching will work as intended. If you clear the cache and refresh the page, the issue always occurs on the first bitrate switching.

Sources

https://videojs-http-streaming.netlify.app/?debug=false&autoplay=false&muted=true&fluid=false&minified=false&sync-workers=false&liveui=false&llhls=true&url=https%3A%2F%2Fdagalvaomediaaccount-uswc.streaming.media.azure.net%2F72a9e630-9517-46dc-a07a-2445b9a01fcb%2F6f7b1218-01dd-429e-9eee-30a21b4b4de6.ism%2Fmanifest(format%3Dm3u8-cmaf%2Cencryption%3Dcbc).m3u8&type=application%2Fx-mpegURL&keysystems=&buffer-water=true&exact-manifest-timings=false&pixel-diff-selector=false&network-info=false&dts-offset=false&override-native=true&preload=auto&mirror-source=true

Steps to reproduce

Explain in detail the exact steps necessary to reproduce the issue.

  1. Load URL: https://videojs-http-streaming.netlify.app/?debug=false&autoplay=false&muted=true&fluid=false&minified=false&sync-workers=false&liveui=false&llhls=true&url=https%3A%2F%2Fdagalvaomediaaccount-uswc.streaming.media.azure.net%2F72a9e630-9517-46dc-a07a-2445b9a01fcb%2F6f7b1218-01dd-429e-9eee-30a21b4b4de6.ism%2Fmanifest(format%3Dm3u8-cmaf%2Cencryption%3Dcbc).m3u8&type=application%2Fx-mpegURL&keysystems=&buffer-water=true&exact-manifest-timings=false&pixel-diff-selector=false&network-info=false&dts-offset=false&override-native=true&preload=auto&mirror-source=true
  2. Press play
  3. Observe playback
  4. Click gear icon and switch bitrate from 360p to 540p
  5. Observe as playback stops, and an error pops up

Results

Expected

Video bitrate switches, and playback continues.

Error output

video.core.js:249 VIDEOJS: ERROR: (CODE:4 MEDIA_ERR_SRC_NOT_SUPPORTED) The media could not be loaded, either because the server or network failed or because the format is not supported. MediaErrorcode: 4message: "The media could not be loaded, either because the server or network failed or because the format is not supported."[[Prototype]]: Object (anonymous) @ video.core.js:249

video.core.js:249 VIDEOJS: ERROR: (CODE:3 MEDIA_ERR_DECODE) video append of 86718b failed for segment #0 in playlist 0-QualityLevels(400000)/Manifest(video,format=m3u8-cmaf,encryption=cbc) MediaErrorcode: 3message: "video append of 86718b failed for segment #0 in playlist 0-QualityLevels(400000)/Manifest(video,format=m3u8-cmaf,encryption=cbc)"[[Prototype]]: Object (anonymous) @ video.core.js:249

video.core.js:249 VIDEOJS: ERROR: (CODE:3 MEDIA_ERR_DECODE) The media playback was aborted due to a corruption problem or because the media used features your browser did not support. MediaError

image

Additional Information

videojs-http-streaming version

Version in https://videojs-http-streaming.netlify.app/

Browsers

Chrome 100.0.4896.75 and Edge 100.0.1185.39

video-archivist-bot commented 2 years ago

Hey! We've detected some video files in a comment on this issue. If you'd like to permanently archive these videos and tie them to this project, a maintainer of the project can reply to this issue with the following commands:

welcome[bot] commented 2 years ago

👋 Thanks for opening your first issue here! 👋

If you're reporting a 🐞 bug, please make sure you include steps to reproduce it. We get a lot of issues on this repo, so please be patient and we will get back to you as soon as we can. To help make it easier for us to investigate your issue, please follow the contributing guidelines.

privaloops commented 2 years ago

same here with non-encrypted streams https://videojs-http-streaming.netlify.app/?debug=false&autoplay=false&muted=false&fluid=false&minified=false&sync-workers=false&liveui=true&llhls=false&url=https%3A%2F%2Farte-cmafhls.akamaized.net%2Fam%2Fcmaf-concert-webonly%2F108000%2F108500%2F108548-026-A_VO%2F220610224755%2F108548-026-A_VO_XQ.m3u8&type=application%2Fx-mpegURL&keysystems=&buffer-water=false&exact-manifest-timings=false&pixel-diff-selector=false&network-info=false&dts-offset=false&override-native=true&preload=auto&mirror-source=true To reproduce : empty your cache, and change quality immediately after the stream has begun, this is the best way to optimize chances to reproduce.

fparappa commented 2 years ago

The same thing happens to me but with DRM content in Dash and HLS format.

It always happens at the beginning of the video, but it also happens during playback if I play a bit with the bitrate change.

Logs:

VIDEOJS: DEBUG: VHS: SourceUpdater > changing videoBuffer codec from avc1.64001E to avc1.64001F

VIDEOJS: DEBUG: VHS: SegmentLoader[main] > timinginfo: video - start - 0

VIDEOJS: DEBUG: VHS: SourceUpdater > Appending segment 0's 357204 bytes to videoBuffer

VIDEOJS: DEBUG: VHS: SegmentLoader[main] > WAITING -> APPENDING

VIDEOJS: ERROR: (CODE:3 MEDIA_ERR_DECODE) The media playback was aborted due to a corruption problem or because the media used features your browser did not support. 

VIDEOJS: DEBUG: VHS: SegmentLoader[audio] > Aborting segment [0/52] segment start/end [0 => 3.9938321995464854] startOfSegment [0] duration [3.9938321995464854] timeline [0] selected by [getMediaInfoForTime (currentTime 0.391814)] playlist [0-placeholder-uri-AUDIO-audio-eng]

VIDEOJS: DEBUG: VHS: SegmentLoader[audio] > WAITING -> READY

VIDEOJS: DEBUG: VHS: SegmentLoader[main] > Received non QUOTA_EXCEEDED_ERR on append 

VIDEOJS: DEBUG: VHS: SegmentLoader[main] > error occurred: video append of 357204b failed for segment #0 in playlist 1-placeholder-uri-1

VIDEOJS: DEBUG: VHS: SegmentLoader[main] > APPENDING -> READY

videojs-http-streaming.netlify.app Load URL: https://cutt.ly/YHDgGSQ

PascalThuet commented 2 years ago

Hi, this is also a blocker for us. Do we have any kind of workaround either on the JS side or by changing some settings on our encoding workflows ?