Почему Safari не воспроизводит файлы без расширения в ‹video›?

У меня есть файл с именем 52bbb58c без расширения, и это видео в формате mp4.

Когда я пытаюсь добавить его как &<source> в <video> с типом атрибута (видео / mp4), он не воспроизводится.

Это работает в Chrome и Firefox. Как мне исправить это для Safari?


person user3715186    schedule 12.05.2015    source источник


Ответы (4)


Safari чрезвычайно требователен к воспроизведению потокового мультимедиа, такого как видео и аудио. Он имеет следующие требования

  • Сервер / приложение, на котором размещен носитель, ДОЛЖНЫ поддерживать диапазоны байтов. Safari выполнит пробную загрузку 2 байта, чтобы определить длину носителя, а затем загрузит носитель одним или несколькими фрагментами в зависимости от размера файла. Это не будет хорошо, если вы просто отправите ему все данные.
  • Диапазон контента, возвращаемый медиа-сервером, должен включать цифру для общего размера медиа, а не только «*».
  • URL-адрес носителя ДОЛЖЕН иметь суффикс, соответствующий типу носителя. Это похоже на IE снова и снова: получение правильного типа mime - бесполезное занятие, потому что Safari не будет следовать правилам здесь и будет игнорировать тип mime.

Обратите внимание, что Safari не сообщает вам, в чем проблема, если при воспроизведении происходит сбой, просто возникает ошибка мультимедиа без дополнительной информации.

Для mpeg 4 video / h.264 работает суффикс .mp4 Для mpeg 4 audio / aac работает суффикс .aac

Если вы разработчик Safari, подумайте об исправлении этих вещей.

Это проверено на Safari 11.1.2.

person David    schedule 17.08.2018

Посмотрев на эту проблему в другом месте более подробно (см. Ссылку ниже), я думаю, что наиболее вероятная причина заключается в том, что Chrome и IE предполагают, что информация 'type = video / mp4' в HTML верна и, следовательно, интерпретирует содержимое, возвращаемое с сервера. таким образом, в то время как Safari смотрит на тип контента в ответе, чтобы принять решение.

Другими словами, Chrome воспроизводит возвращенный файл как видео, даже если HTTP-ответ от сервера имеет заголовок «Content-Type: application / octet-stream», а не «Content-Type: video / mp4».

Вы можете проверить это, посмотрев заголовки ответов для вашего примера и проверив, установлен ли тип контента на «application / octet-stream», а не на «video / mp4».

Связанный ответ: https://stackoverflow.com/a/32967365/334402

person Mick    schedule 07.10.2015
comment
Тип содержимого моего видео API уже является видео / mp4, но видео не воспроизводятся в Safari / MacOs. - person Sibeesh Venu; 25.11.2019
comment
@SibeeshVenu - взгляните на недавний ответ Дэвида. В нем содержится более свежая информация и подробности, которые могут вам помочь. Если нет, то, вероятно, лучше всего задать вопрос и, если возможно, указать ссылку на пример видео, которое не будет воспроизводиться. - person Mick; 25.11.2019

Я столкнулся с подобной проблемой. В моем случае он хорошо работает в Chrome и Firefox или когда я добавляю расширение к файлу. Если я правильно изменю тип пантомимы, она все равно не пройдет.

На самом деле у меня был сервер, который мы развернули, возвращая заголовок ответа, как показано ниже.

HTTP/1.1 206 Partial Content
Date: Mon, 05 Mar 2018 08:33:49 GMT
Server: gunicorn/19.7.1
X-Powered-By: Express
content-type: video/mp4
accept-ranges: bytes
content-length: 2
content-range: bytes 0-1/37475549
Cache-Control: public, max-age=0
Connection: keep-alive

Сам заголовок ответа, безусловно, правильный.

Однако была разница между размером, возвращаемым нашим сервером, и размером content-length и content-range. Так что на данный момент это работает хорошо, потому что я это исправил. Если вы находитесь в той же ситуации, что и я, ошибка будет воспроизведена с curl --range 0-1 <target URL>.

Он скажет так error 18: transfer closed with outstanding read data remaining

Итак, ответ - правильно подтвердить значения, возвращаемые вашим сервером.

Ссылка

ошибка curl 18 - передача закрыта с оставшимися невыполненными данными чтения < / а>

Требуется ли для iPhone / iPad Safari заголовок Accept-Ranges для видео?

https://developer.mozilla.org/en-US/docs/Web/HTTP/Range_requests

https://developer.apple.com/library/content/documentation/AppleApplications/Reference/SafariWebContent/CreatingVideoforSafarioniPhone/CreatingVideoforSafarioniPhone.html#//apple_ref/doc/14uid/TP400065

https://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html

https://github.com/WebKit/webkit/blob/5277f6fb92b0c03958265d24a7692142f7bdeaf8/LayoutTests/imported/w3c/web-platform-tests/fetch/http-cachet/partial

https://github.com/w3c/web-platform-tests/blob/master/fetch/http-cache/partial.html

person haͣrͬukaͣreͤrͬu    schedule 05.03.2018

На самом деле браузер Safari поддерживает не все видео в формате MP4.

MP4 - это просто формат файла, а не тип видеокодека.

Вы можете использовать ffmpeg для получения информации о видео.

Что касается меня, я обнаружил, что Safari может воспроизводить видео MP4 следующего видеокодека:

ffmpeg -i demo3.mp4 -hide_banner
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'demo3.mp4':
  Metadata:
    major_brand     : isom
    minor_version   : 512
    compatible_brands: isomiso2avc1mp41
    encoder         : Lavf58.20.100
    description     : Codec by Bilibili XCode Worker v4.7.18(fixed_gap:False)
  Duration: 00:00:54.44, start: 0.000000, bitrate: 772 kb/s
    Stream #0:0(und): Video: h264 (High) (avc1 / 0x31637661), yuv420p, 852x480 [SAR 640:639 DAR 16:9], 635 kb/s, 30 fps, 30 tbr, 15360 tbn, 60 tbc (default)
    Metadata:
      handler_name    : VideoHandler
    Stream #0:1(und): Audio: aac (LC) (mp4a / 0x6134706D), 48000 Hz, stereo, fltp, 128 kb/s (default)
    Metadata:
      handler_name    : SoundHandler
At least one output file must be specified

Вы должны заметить KeyWord Video: h264(High)。 И видео не может воспроизводиться в Safari:

ffmpeg -i demo3_mask.mp4 -hide_banner
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'demo3_mask.mp4':
  Metadata:
    major_brand     : isom
    minor_version   : 512
    compatible_brands: isomiso2avc1mp41
    encoder         : Lavf58.20.100
  Duration: 00:00:54.33, start: 0.000000, bitrate: 630 kb/s
    Stream #0:0(und): Video: h264 (High 4:4:4 Predictive) (avc1 / 0x31637661), yuvj444p(pc), 852x480, 627 kb/s, 30 fps, 30 tbr, 15360 tbn, 60 tbc (default)
    Metadata:
      handler_name    : VideoHandler

Ключевое слово: Video: h264(High 4:4:4 Predictive). Что касается типов кодеков, вы можете обратиться к wiki или здесь.

И если это ваша ситуация, вы можете преобразовать тип видеокодека с помощью ffmpeg с помощью следующей команды:

ffmpeg -i demo3_mask.mp4 -vf "scale=2*trunc(iw/2):-2,setsar=1" -profile:v high -pix_fmt yuv420p out2.mp4

И вы можете проверить информацию о новом видео:

ffmpeg -i out2.mp4 -hide_banner
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'out2.mp4':
  Metadata:
    major_brand     : isom
    minor_version   : 512
    compatible_brands: isomiso2avc1mp41
    encoder         : Lavf58.20.100
  Duration: 00:00:54.33, start: 0.000000, bitrate: 221 kb/s
    Stream #0:0(und): Video: h264 (High) (avc1 / 0x31637661), yuv420p, 852x480 [SAR 1:1 DAR 71:40], 218 kb/s, 30 fps, 30 tbr, 15360 tbn, 60 tbc (default)
    Metadata:
      handler_name    : VideoHandler
At least one output file must be specified

Надеюсь на эту помощь.

person FantasyJXF    schedule 13.11.2019