Загрузка видеофайла не удаётся из-за ошибки JS

Я знаю, что в целом Discourse не предназначен для загрузки видео, но столкнулся с проблемой и надеюсь, что кто-то сможет подсказать, в каком направлении двигаться, чтобы разобраться.

Некоторые загружаемые видеофайлы зависают на этапе «Загрузка 100%» на неопределённый срок. Единственный вариант для пользователя — обновить страницу или закрыть пост, независимо от того, сколько времени прошло или насколько мал размер файла.

Очевидно, что в коде есть проверка или валидация, в которой файл «застревает». Я довольно новичок в разработке на Ruby on Rails / Discourse, поэтому пока не смог определить, на каком именно этапе пути файл застревает. Однако я нашёл способ обойти проблему и загрузить файл без ошибок, хотя и не очень удобным для пользователя способом.

Если взять тот же самый файл, изменить расширение имени файла с .mp4 на .pdf, то загрузка проходит без проблем, и более того, файл добавляется с правильным расширением.

Например:
Если я загружаю PXL_12234563421LS.mp4, файл зависает на неопределённый срок. Если же я загружаю его как PXL_12234563421LS.pdf, загрузка завершается успешно, и даже вставляется правильный видео-разметка в пост:

![PXL_20200811_12234563421LS|video](upload://sxVpgLrc3L2MukaD5eS5QOgPY7j.mp4)

Кто-нибудь знаком с этим процессом и может объяснить, что происходит? Есть ли способ отключить это где-то? Я также готов самостоятельно найти точное место проблемы и, возможно, создать отчёт об ошибке при наличии рекомендаций.

Спасибо.

4 лайка

Возможно, это проблема с интернетом.
Но обычно перезагрузка страницы помогает, и видео загружается?

Я ценю ваш ответ, но проблема не в интернете. Это происходит с любого компьютера и во всех браузерах. Я загружаю файл в той же сети, где запущен экземпляр Discourse, поэтому трафик не выходит в интернет.

Изменение расширения файла приводит к успешной загрузке, даже в том же посте, где оригинальный файл всё ещё находится в статусе «загрузка». Это однозначно указывает на то, что какой-то код в Discourse, предназначенный для видеофайлов, зависает на определённых файлах бесконечно.

1 лайк

Появляется ли ошибка в консоли?

Можете ли вы загрузить видео на try.discourse.org?

1 лайк

Какой размер файла? Я полагаю, что максимальный размер файла составляет 30 МБ.

Я также хотел бы спросить, используете ли вы мобильное устройство или ПК, но вы упоминаете компьютер ниже.

Я пытался сделать это на try.discourse.org, но там не разрешены файлы .mp4, извините, я должен был указать это в своём первоначальном сообщении.

Кроме того, это небольшой файл, всего 8 МБ. Я обнаружил, что размер файла не имеет значения.

Когда вы спрашиваете, возникают ли ошибки в консоли, я смотрю в логи и вижу начало загрузки, но после этого для этого события ничего больше не отображается. Есть ли ещё какое-то место, которое вы имеете в виду под консолью, куда мне стоит посмотреть?

Проблема проявляется и на мобильных устройствах, и на ПК — она точно связана с самими файлами. Если перекодировать файл с помощью ffmpeg, проблема исчезает. Также я пробовал Chrome и Firefox, и в обоих браузерах наблюдается одно и то же.

Для ясности: я просто меняю имя файла с «movie.mp4» на «movie.pdf», и тогда загрузка проходит без зависания на этапе «Загрузка 100%».

Размер файла составляет 8 МБ; любые файлы с таким же расширением, у которых возникает эта проблема, могут быть любого размера. Если бы я мог определить и отследить путь, по которому файл проходит при загрузке, то, вероятно, смог бы точно установить, на каком этапе происходит зависание.

Попробуйте сейчас, я только что добавил их.

Я имею в виду консоль браузера — появляется ли что-то там или в логах сервера (/logs)?

Хорошо, мне удалось воспроизвести проблему. Пришлось найти немного меньший пример, но у меня их много :slight_smile:

На первом скриншоте показано, как я загружаю файл с расширением .mp4, и процесс зависает на “Загрузка 100%”, независимо от того, сколько я жду. Я ждал 5 минут, прежде чем сделать скриншот.

Я оставил пост открытым и в состоянии “Загрузка 100%” на try.discourse.org, пользователь: testdub. Если это поможет с вашей стороны. Я оставлю его открытым, пока не получу ответ.

Вы не разрешаете PDF-файлы, но разрешаете TXT, поэтому я просто переименовал файл в .txt, и загрузка завершилась.

Когда я загружаю тот же файл с расширением .txt, загрузка завершается за секунды, и он отображается как видео в формате markdown.

Для полноты картины вот md5-хэши загруженных мной файлов:

62b865b29c47acbce859c27246c0d7c3  PXL_20240812_174504425.LS.mp4
62b865b29c47acbce859c27246c0d7c3  PXL_20240812_174504425.LS.txt

Вот ошибка, которую я вижу в консоли браузера при попытке загрузить этот файл:

image

Uncaught IndexSizeError: Failed to execute 'getImageData' on 'CanvasRenderingContext2D': The source width is 0.
    at composer-video-thumbnail-uppy.js:80:31

8998f3f964284f7e0ab4007836dbddd736757617.mp4.gz (3.3 MB)

Это проблема на стороне клиента, которую нам нужно исправить.

2 лайка

Да, отлично, спасибо, Майкл!

Я как раз собирался ответить чем-то подобным:


Когда я смотрю в консоль Firefox, я вижу что-то вроде этого:

Media resource blob:https://devsite.net/77e697fe-2ebc-489c-bef3-036d45b9908b could not be decoded, error: Error Code: NS_ERROR_DOM_MEDIA_METADATA_ERR (0x806e0006)

В Chrome я получаю другую, возможно, более понятную ошибку, которая может указывать на то, что происходит:

Uncaught DOMException: Failed to execute 'getImageData' on 'CanvasRenderingContext2D': The source width is 0.
    at https://devsite.net/assets/chunk.d340137c92abde91812c.d41d8cd9.js:74:3649
3 лайка

У меня была похожая проблема на WordPress. Затем MP4-файл оказался поврежден. Я просто загрузил короткий MP4-файл, и всё прошло без проблем. Возможно, стоит проверить сам MP4-файл или процесс, который его создал, если всё заработает?

Удалось решить?

Да, у нас есть человек, который занимается исправлением.

3 лайка

Исправление этой проблемы уже доступно:

3 лайка

Привет, Блейк, спасибо за такую быструю реакцию! Я протестировал это, и всё отлично работает в Chrome, но в Firefox не получается — я всё ещё застревает на «Загрузка 100%», и в консоли появляется следующая ошибка:

Медиа-ресурс blob:https://devsite.net/a2deff66-3376-4c6e-9cca-f18275c312ce не может быть декодирован.
Медиа-ресурс blob:https://devsite.net/a2deff66-3376-4c6e-9cca-f18275c312ce не может быть декодирован, ошибка: Код ошибки: NS_ERROR_DOM_MEDIA_METADATA_ERR (0x806e0006)

Я тестировал это в Firefox 129.0.2.

Дайте знать, если нужна какая-либо дополнительная информация.

1 лайк

Это исправление должно помочь. В данном случае миниатюра для видео не будет создана, но это не помешает его загрузке на этот раз.

3 лайка

Спасибо, мне удалось успешно загрузить файл через Firefox. Я очень ценю быстрый ответ и последующие уточнения!

2 лайка

Эта тема была автоматически закрыта через 3 дня после последнего ответа. Новые ответы больше не принимаются.