Файл M4A не воспроизводится в Safari, но воспроизводится в Chrome - PullRequest
0 голосов
/ 04 апреля 2020

У меня есть MP3 и файл M4A в тегах <audio>. Файл MP3 хорошо воспроизводится в Safari и Chrome, а файл M4A хорошо воспроизводится в Chrome, но M4A не воспроизводится в Safari. Я вижу элементы управления звуком в Safari для M4A. Я нажимаю на значок воспроизведения, но ничего не происходит.

Даже для файла MP3, который нормально воспроизводится в Safari, при нажатии на вкладку «Сеть» появляется сообщение «Произошла ошибка при загрузке ресурса». сообщение на вкладке Preview. Я заметил, что в Chrome кодировка передачи возвращается в виде фрагментов, но в Safari это идентичность.

Ответ MP3 - Safari:

HTTP/1.1 200 OK
Content-Type: audio/mpeg
Content-Disposition: inline; filename=Audio.mp3
X-XSS-Protection: 1
Transfer-Encoding: Identity
Date: Sat, 04 Apr 2020 00:10:29 GMT
Connection: keep-alive
X-Content-Type-Options: nosniff
Accept-Ranges: bytes
X-Frame-Options: SAMEORIGIN
X-Powered-By: Express
X-RequestID: undefined
X-Permitted-Cross-Domain-Policies: none
Strict-Transport-Security: max-age=3600

Ответ M4A - Safari:

Response
HTTP/1.1 200 OK
Content-Type: audio/mp4
Content-Disposition: inline; filename=Audio.m4a
X-XSS-Protection: 1
Transfer-Encoding: Identity
Date: Sat, 04 Apr 2020 00:10:29 GMT
Connection: keep-alive
X-Content-Type-Options: nosniff
Accept-Ranges: bytes
X-Frame-Options: SAMEORIGIN
X-Powered-By: Express
X-RequestID: undefined
X-Permitted-Cross-Domain-Policies: none
Strict-Transport-Security: max-age=3600

Ответ M4 - Chrome

Accept-Ranges: bytes
Connection: keep-alive
Content-disposition: inline; filename=Audio.m4a
Content-Type: audio/mp4
Date: Sat, 04 Apr 2020 00:15:02 GMT
Strict-Transport-Security: max-age=3600
Transfer-Encoding: chunked
X-Content-Type-Options: nosniff
X-Frame-Options: SAMEORIGIN
X-Permitted-Cross-Domain-Policies: none
X-Powered-By: Express
X-RequestID: undefined
X-XSS-Protection: 1

1 Ответ

0 голосов
/ 27 апреля 2020

Я решил эту проблему, поместив URL двух источников на аудиотег; один и тот же URL с различным способом чтения кодировки:

<audio controls>
    <source src="{.URL}" type="audio/ogg">
    <source src="{.URL}" type="audio/mp4">
</audio>

Сервер, который дает ответ, должен иметь заголовок Accept-Ranges, чтобы передать файл, разделенный на несколько частей. Вы можете увидеть больше в этом ответе: Требуется ли для Safari iPhone / iPad заголовок «Accept-Ranges» для видео?

Я надеюсь, что это поможет.

...