Chunk demuxer error append failed как исправить
Перейти к содержимому

Chunk demuxer error append failed как исправить

  • автор:

How to fix CHUNK_DEMUXER_ERROR_APPEND_FAILED error when append chunk?

I want to create a video player that can play multiple resolution, so I have to load chunks of different codecs. I tried to append chunk of the same codec and it work. So I tried to use changeType() but when I append the new codec chunk in the video element I found this error «CHUNK_DEMUXER_ERROR_APPEND_FAILED: Append: stream parsing failed.».

const myMediaSource = new MediaSource(); var videoSourceBuffer; var quality=480,qlast=480; var currentSegment = 0; var loading = false; function videos() < myMediaSource.addEventListener('sourceopen', sourceOpen, < once: true>); > function sourceOpen() < setInterval(feedVideo, 500); >function feedVideo() < if (!loading) < try < if (myMediaSource.sourceBuffers.length == 0) < videoSourceBuffer = myMediaSource.addSourceBuffer('video/mp4; codecs="avc1.64001E,mp4a.40.2"'); appendSegment("cinit.mp4", 0); first = true; >else < if (qlast != quality) < videoSourceBuffer = myMediaSource.sourceBuffers[0]; if (quality == 1080) < type = 'video/mp4; codecs="avc1.640028,mp4a.40.2"'; >else if (quality == 720) < type = 'video/mp4; codecs="avc1.64001F,mp4a.40.2"'; >else if (quality == 480) < type = 'video/mp4; codecs="avc1.64001E,mp4a.40.2"'; >else if (quality == 360) < type = 'video/mp4; codecs="avc1.64001E,mp4a.40.2"'; >videoSourceBuffer.changeType(type); videoSourceBuffer.mode = "segments"; qlast = quality; > > if (!first) < appendSegment("c" + currentSegment + ".m4s", currentSegment); >else < first = false; >> catch (error) < console.log('Error! ' + error); >> > function appendSegment(file, resourcesIndex) < loading = true; fetch("http://mysite/video/" + quality + "p/" + file).then(function (response) < return response.arrayBuffer(); >).then(function (videoData) < videoSourceBuffer.appendBuffer(videoData); videoSourceBuffer.addEventListener('updateend', function () < loading = false; >, < once: true >); >); > 

Как правильно хостить и проигрывать видео в 2020?

Добрый вечер!
Мы недавно реализовали проект фестиваля, на сайте которого можно было посмотреть полнометражные фильмы.
В целом все прошло хорошо, но сейчас очень остро стоит вопрос относительно технологий которые для этого использовались, потому что очень явно ощущается, что что-то пошло не так, а на горизонте уже маячат похожие проекты.

Начитавшись того, как «правильно» должна выглядеть подобная реализация, решили заюзать эпловский HLS.
Конвертнули все видео-дорожки для разного качества при помощи ffmpeg. Разбили все файлы на видео-аудио дорожки при помощи mediafilesegmenter, mediasubtitlesegmenter — создали плейлисты при помощи variantplaylistcreator.
Получили класный master.m3u8 файл плейлиста, где все эти конфиги были красиво описаны.
И вроде бы на клиенте получаем полностью работоспособную систему, которая отлично работает. но не тут то было.

Когда на проект запустили пользователей — массово посыпались жалобы, у кого-то не грузит видео, кто-то ловит ошибки декода (chunk_demuxer_error_append_failed append stream parsing failed) у кого-то видео зависает на каких-то этапах и на отказ перестает грузиться. Это при том, что в первый день онлайн был не более 200 одновременных просмотров, а нагрузка по трафику из доступных 3гб\сек не превышала и 1\3.
Другими словами, пошла какая-то лажа.

Так как делать нужно было что-то срочно, решили от m3u8 файлов отказаться и перейти на отдачу цельных файлов сразу. В конфигах просто прописали ссылки на mp4 файлы, в которых сразу находилось всего одна аудио и видео дорожка. И чудо — все ошибки сразу пропали.
То есть получается, что отдача одним файлом и браузерный декод, вышли намного эффективнее чем то, что мы делали через HLS. ¯\_( ツ)_/¯

Мы посмотрели кучу стриминговых сервисов, большая часть из них отдавала все свои стримы в формате m3u8, и никаких проблем при этом люди не испытывали. Соответственно назрела куча вопросов о том, как таки стоит делать и в чем могла быть ошибка и как это исправить на будущее.

1) Как правильно хостить файлы на сервере? Нужна ли разбивка при помощи HLS\DASH? Где-то видел что эти технологии нужно использовать в паре, так как каждая из них имеет свою браузерную поддержку.

2) Должны ли быть на сервере какие-то специфичные настройки, для эффективной отдачи статического медиа-контента?

3) Медиа-плеер. Возможно, причина ошибок связана с плеером, который использовали на клиенте? Мы использовали https://flowplayer.com/.
Наслышан о таких плеерах, как Movie.js Shaka Player, jwplayer — возможно есть смысл попробовать какой-то из них? Плеер не обязательно бесплатный, просто хочется использовать технологию, которая сможет дать максимальное покрытие. Например, в этом проекте, люди заходили с телевизора, а на tizen flowplayer не работал, от слова совсем.

4) Шифрование\защита файлов. Как по мне отдача чистых mp4 файлов, небезопасна от слова совсем. Понятное дело, что собрать готовый файл с плейлиста, можно одной командой из ffmpeg, но в той реализации которая вышла, достаточно просто открыть дев. тулзы и получить прямую ссылку на файл который можно сохранить себе на пк.

Помогите на будущее делать хорошо 🙂

  • Вопрос задан более трёх лет назад
  • 2172 просмотра

Saved searches

Use saved searches to filter your results more quickly

Cancel Create saved search

You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session. You switched accounts on another tab or window. Reload to refresh your session.

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

Playback fails with CHUNK_DEMUXER_ERROR_APPEND_FAILED: Append: stream parsing failed #2864

dsander opened this issue Nov 23, 2018 · 4 comments

Playback fails with CHUNK_DEMUXER_ERROR_APPEND_FAILED: Append: stream parsing failed #2864

dsander opened this issue Nov 23, 2018 · 4 comments

Comments

dsander commented Nov 23, 2018

Environment
  • [] The MPD passes the DASH-IF Conformance Tool on https://conformance.dashif.org/
  • The stream has correct Access-Control-Allow-Origin headers (CORS)
  • There are no network errors such as 404s in the browser console when trying to play the stream
  • The issue observed is not mentioned on https://github.com/Dash-Industry-Forum/dash.js/wiki/FAQ
  • The issue occurs in the latest reference client on http://reference.dashif.org/dash.js/ and not just on my page
  • Link to playable MPD file: https://dashdebug.dsander.de/WK-18-782369-0_RN2MAT4U_FF_Hit_Superball___Joystick_b-Fruhstucksfernsehen___Teil_2___Fruhstucksfernsehen__04_07_2003.mxf/stream.mpd
  • Dash.js version: 2.9.3 (development, commit: 1da2ba1)
  • Browser name/version: Chrome 70
  • OS name/version: MacOS
Steps to reproduce
  1. Try to play back the stream

Even though the conformance tool has complains, different streams work fine with previous and current DASH.js versions (https://dashdebug.dsander.de/spoon.mp4/stream.mpd is a working example with the same warnings produced by the conformance tool).

The stream that is not working plays back in other javascripts players, Chrome is also able to play the «raw» mp4.

Console output
[702108][Protection] EME detected on this user agent! (ProtectionModel_21Jan2015) [702108][MediaPlayer] Streaming Initialized [702109][MediaPlayer] Playback Initialized [702113][DashParser] Parsing complete: ( xml2json: 0.600ms, objectiron: 0.00ms, total: 0.000600s) [702114][ManifestUpdater] Manifest has been refreshed at Fri Nov 23 2018 12:24:27 GMT+0100 (Central European Standard Time)[1542972267.556] [702116][Stream] No text data. [702116][Stream] No fragmentedText data. [702116][Stream] No embeddedText data. [702116][Stream] No muxed data. [702116][Stream] No image data. [702117][PlaybackController] Native video element event: play [702117][ScheduleController] Start denied to Schedule Controller [702117][ScheduleController] Start denied to Schedule Controller [702117][PlaybackController] Native video element event: waiting [702133][BufferController] Init fragment finished loading saving to video's init cache [702133][ScheduleController] OnFragmentLoadingCompleted - Url: https://dashdebug.dsander.de/WK-18-782369-0_RN2MAT4U_FF_Hit_Superball___Joy…nsehen___Teil_2___Fruhstucksfernsehen__04_07_2003.mxf/media-video-avc1.mp4 , Range: 0-745 [702134][BufferController] Init fragment finished loading saving to audio's init cache [702134][ScheduleController] OnFragmentLoadingCompleted - Url: https://dashdebug.dsander.de/WK-18-782369-0_RN2MAT4U_FF_Hit_Superball___Joy…en___Teil_2___Fruhstucksfernsehen__04_07_2003.mxf/media-audio-abw-mp4a.mp4 , Range: 0-672 [702134][SourceBufferSink] SourceBufferSink error audio [702135][StreamController] Video Element Error: MEDIA_ERR_SRC_NOT_SUPPORTED (CHUNK_DEMUXER_ERROR_APPEND_FAILED: Append: stream parsing failed. Data size=673 append_window_start=0 append_window_end=inf) [702135][StreamController] [object MediaError] [702140][SourceBufferSink] Failed to remove source buffer from media source. [702140][VideoModel] Caught pending play exception - continuing (NotSupportedError: Failed to load because no supported source was found.) 

The text was updated successfully, but these errors were encountered:

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *