Видео MP4 не воспроизводится в Firefox в теге ‹video›, воспроизводится при прямом открытии

У меня есть небольшой домашний сервер, на котором размещено несколько элементов, в том числе несколько образцов видео в формате MP4.

Я использовал простой тег <video> для воспроизведения видео, и он хорошо работал в Firefox, Chrome и Internet Explorer.

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

Все работало нормально, за исключением того, что теперь Firefox отказывается воспроизводить видео MP4 при использовании тега <video>, показывая только сообщение No video with supported format and MIME type found. Открытие файла напрямую (Viev video в Firefox) работает, так как видео воспроизводится правильно.

Chrome (последняя версия) и Internet Explorer (последняя версия W7, не знаю точное число) работают нормально.

Поскольку я не менял браузер, а только программное обеспечение / конфигурацию сервера, я подозреваю, что проблема заключается исключительно в сервере.

Я поискал и нашел несколько предложений, таких как добавление правильного mime в файлы Apache .htaccess и проверка заголовков на предмет возможных указаний. Я следил за каждой идеей, которая казалась мне стоящей, за исключением перекодирования видео, но ни одна из них не сработала.

Еще факты:

  • Я использую тот же браузер и компьютер, на котором воспроизводились видео до сбоя, чтобы попытаться воспроизвести видео сейчас.
  • Это видео воспроизводится нормально, и я не вижу никакой разницы между ним и моим.
  • Вот пример видео с моей машины: http://silviu.audiozone.ro (косая черта) record.html - прошу прощения за плохую обфускацию, которую я использовал.

Это заголовок, возвращаемый сервером при попытке воспроизвести файл из тега видео:

Accept-Ranges: bytes
Connection: Keep-Alive
Content-Length: 17709423
Content-Range: bytes 0-17709422/17709423
Content-Type: video/mp4
Date: Fri, 18 Dec 2015 15:00:20 GMT
Etag: "20081-10e394f-5272d4fd62880;17709423"
Keep-Alive: timeout=5, max=99
Last-Modified: Fri, 18 Dec 2015 14:54:10 GMT
Server: Apache/2.2.22 (Debian)
X-Mod-H264-Streaming: version=2.2.7

Это заголовок, возвращаемый сервером при попытке напрямую воспроизвести файл (путем доступа к его URL-адресу):

Accept-Ranges: bytes
Connection: Keep-Alive
Content-Length: 17709423
Content-Type: video/mp4
Date: Fri, 18 Dec 2015 15:45:00 GMT
Etag: "20081-10e394f-5272d4fd62880;17709423"
Keep-Alive: timeout=5, max=100
Last-Modified: Fri, 18 Dec 2015 14:54:10 GMT
Server: Apache/2.2.22 (Debian)
X-Mod-H264-Streaming: version=2.2.7

Я не вижу здесь серьезных различий.

Кроме того, я нашел более старый ответ (от декабря 2012 г.), в котором указывалось, что Firefox не воспроизводит файлы MP4 в теге <video> из-за некоторых проблем с отчислениями, но поскольку видео, используемые для воспроизведения, и Образец видео HTML5 воспроизводится нормально, я подозреваю, что это уже не так.

Я бы предпочел не перекодировать свои видео, учитывая, что в прошлом они отлично работали в Firefox.


person Silviu G    schedule 18.12.2015    source источник
comment
возможно ответили здесь: stackoverflow.com/a/34235450/5641669   -  person Johannes    schedule 18.12.2015


Ответы (3)


Firefox сообщает вам о проблеме в сообщении об ошибке в консоли. Это формат 3GP, а не MP4:

HTTP Content-Type для video / 3gpp не поддерживается. Загрузка медиаресурса ... record.mp4 не удалась.

Вы можете подтвердить это с помощью ffprobe. Я обрезал вывод.

  Metadata:
    major_brand     : isom
    minor_version   : 0
    compatible_brands: isom3gp4
    creation_time   : 2015-12-18 14:54:58
    location        : +44.4413+026.0771/
    location-eng    : +44.4413+026.0771/
  Duration: 00:00:08.22, start: 0.000000, bitrate: 17235 kb/s
    Stream #0:0(eng): Video: h264 (High) (avc1 / 0x31637661), yuv420p, 1920x1080, 17106 kb/s, 30.05 fps, 30 tbr, 90k tbn, 180k tbc (default)
    Metadata:
      creation_time   : 2015-12-18 14:54:58
      handler_name    : VideoHandle
    Stream #0:1(eng): Audio: aac (LC) (mp4a / 0x6134706D), 48000 Hz, stereo, fltp, 123 kb/s (default)
    Metadata:
      creation_time   : 2015-12-18 14:54:58
      handler_name    : SoundHandle

Важная часть - compatible_brands: isom3gp4. 3GP похож на MP4 в том, что они оба основаны на базовом медиаформате ISO, но они не то же самое. Браузеры и приложения, которые могут воспроизводить и то, и другое, могут не обращать внимания на то, что формат файла не соответствует формату, указанному в заголовке типа содержимого.

Я думаю, что Firefox мог воспроизводить эти файлы до версии 41, основываясь на других замеченных мной упоминаниях об той же ошибке с файлами, которые, по-видимому, воспроизводились до обновления. Так что я готов поспорить, что это изменение, а не что-то на вашем сервере.

Преобразование видео и аудио в контейнер MP4 приводит к воспроизводимому файлу (хотя высокий битрейт и профиль high h.264 не идеальны для веб-доставки, но это уже другая история).

ffmpeg -i recording.mp4 -codec copy output.mp4

Кстати, я бы не стал рассматривать то, что браузер воспроизводит, когда вы открываете файл напрямую, как репрезентативное для того, что будет в элементе video в том же браузере. Часто они ведут себя иначе.

person misterben    schedule 18.12.2015
comment
Во-первых: есть ли где-нибудь хорошее объяснение того, почему файл воспроизводится непосредственно в Firefox, а не в теге видео? Во-вторых, я использовал формат mp4, поскольку он был потоковым, и это было просто проблемой копирования файла с телефона на сервер, избегая длительного перекодирования. В-третьих: меня не волнует не оптимальный формат, он только для личного пользования :) - person Silviu G; 18.12.2015
comment
1: У меня нет ссылки, но это будет сводиться к попытке применить строгие правила в документе HTML5, чтобы он соответствовал стандартам (даже если в спецификации не указано, какие форматы должны поддерживаться, MP4, WebM Ogg являются обязательными). факт). Когда вы открываете файл напрямую, а браузер используется как обычное средство просмотра файлов, он просто пытается быть максимально совместимым. 2: MP4 (с h.264 и aac или mp3) - хороший выбор. К сожалению, этот файл не является MP4, даже если телефон имеет это расширение. Похоже, твой телефон обманывает тебя. 3: Достаточно честно. - person misterben; 18.12.2015
comment
Кстати, поскольку в файле используются кодеки h.264 и aac, данные могут быть преобразованы (скопированы) в контейнер MP4 без перекодирования. Это быстро. Это делает команда ffmpeg выше. - person misterben; 18.12.2015

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

Но вы сказали, что не хотите перекодировать видео, поэтому можете конвертировать их автоматически. есть несколько пакетов для этого предложения, например:

fluent-ffmpeg: https://github.com/fluent-ffmpeg/node-fluent-ffmpeg

ffmpeg.js: https://github.com/Kagami/ffmpeg.js/tree/master

видеоконвертер: https://www.npmjs.com/package/videoconverter

Между тем, если вы хотите использовать fluent-ffmpeg, у вас должен быть установлен ffmpeg на вашем сервере. Таким образом, вы можете использовать один из этих пакетов для автоматической установки ffmpeg:

ffmpeg-installer: https://www.npmjs.com/package/@ffmpeg-installer/ffmpeg

ffmpeg-static: https://github.com/eugeneware/ffmpeg-static

person Emad Armoun    schedule 29.03.2020
comment
Спасибо за ваш вклад. В итоге я перекодировал видео перед загрузкой, но хорошо знать, что их можно перекодировать на лету. - person Silviu G; 31.03.2020

Попробуйте преобразовать с помощью cmd:

ffmpeg -i origin.mp4 -vcodec libx264 -pix_fmt yuv420p new.mp4

новый файл отлично работает на моем FF.

person gzerone    schedule 17.09.2020
comment
Да, в конце концов, мне пришлось преобразовать файлы ... спасибо. - person Silviu G; 18.09.2020