Как добиться моментального воспроизведения потокового m3u8 файла на IOS?

Ссылка скопирована
15 февраля 2026 1 ответ

Здравствуйте. Вывожу трек длинной в 2 часа в плерее в формате m3u8 (пооковый), работает просто идеально на ПК, на Android но не на IOS конечно-же! На IOS после нажатия на Play трек грузится минут 5-10 потом только начинается воспроизведение! Нажал на паузу, снова на play и снова 5-10 минут!
На android / windows все летает моментально.

m3u8 создаю так:

ffmpeg -y -i "Rompasso.mp3" -c:a aac -b:a 128k -muxdelay 0 -f segment -sc_threshold 0 -segment_time 5 -segment_list "playlist.m3u8" -segment_format mpegts "file%d.m4a"

ffmpeg -y -i "Rompasso.mp3" -c:a aac -b:a 128k -muxdelay 0 -f segment -sc_threshold 0 -segment_time 5 -segment_list "playlist.m3u8" -segment_format mpegts "file%d.m4a"

Плеер на сайте работает так:
<audio id="audioPlayer" controls></audio>

Подключаю

&lt;script src="https://cdn.jsdelivr.net/npm/hls.js@latest"&gt;&lt;/script&gt;

&lt;script src="https://cdn.jsdelivr.net/npm/hls.js@latest"&gt;&lt;/script&gt;

как раз для android / windows. IOS это не поддерживает, как указано "Он итак работает с hls", оно и видно как...

var audioPlayer = document.getElementById('audioPlayer'); 	var hls = new Hls(); 	var streamURL = 'playlist.m3u8';  	if (Hls.isSupported()) { 		hls.loadSource(streamURL); 		hls.attachMedia(audioPlayer); 	} else { 		audioPlayer.src = 'playlist.m3u8'; 	}

var audioPlayer = document.getElementById('audioPlayer'); var hls = new Hls(); var streamURL = 'playlist.m3u8'; if (Hls.isSupported()) { hls.loadSource(streamURL); hls.attachMedia(audioPlayer); } else { audioPlayer.src = 'playlist.m3u8'; }

Дополнительно:

a) hls.on(Hls.Events.MANIFEST_PARSED .... play (похожий евент сделать ветке исполнения IOS)
b) .m3u8 MIME Type: vnd.apple.mpegURL (в ответе сервера, и если мне память не изменяет для кроссустройств должен быть другой тип, не помню какой именно)
Сложно сказать, что у Вас происходит не видя чуть более полного кода. Можно предположить что IOS подгружает полностью аудио и стартует после этого.
P.S. у ТС проблема с IOS решилась заменой формата сегментов

ffmpeg  -i Rompasso.mp3  -vn -ac 2 -acodec aac  -f segment -segment_format mpegts -segment_time 10  -segment_list audio_pl.m3u8  audio_segment%05d.ts

ffmpeg -i Rompasso.mp3 -vn -ac 2 -acodec aac -f segment -segment_format mpegts -segment_time 10 -segment_list audio_pl.m3u8 audio_segment%05d.ts

  • Так и есть, воспроизведение после загрузки т.к. короткое аудио воспроизводит моментально и работает нормально.

    В ответе от сервера на .m3u8 файл:

    Accept-Ranges: bytes Content-Length: 21661 Content-Type: application/vnd.apple.mpegurl Date: Sun, 05 Nov 2023 16:54:03 GMT Etag: "549d-6096a1c79ebdb" Last-Modified: Sun, 05 Nov 2023 16:20:09 GMT Server: Apache

    Accept-Ranges: bytes Content-Length: 21661 Content-Type: application/vnd.apple.mpegurl Date: Sun, 05 Nov 2023 16:54:03 GMT Etag: "549d-6096a1c79ebdb" Last-Modified: Sun, 05 Nov 2023 16:20:09 GMT Server: Apache

  • Из документации Эппла, попробуйте с точностью до символа указать. По ощущениям HLS не распознается.

    Как добиться моментального воспроизведения потокового m3u8 файла на IOS?

  • GetQuestion Дополню, а какая сетевая активность за эти "грузится минут 5-10" ?
  • Daemon23RUS, понятия не имею, с iphone консоль браузера не посмотришь). Сейчас попробую MIME указать точно
  • GetQuestion,

    Как добиться моментального воспроизведения потокового m3u8 файла на IOS?

    Еще посмотрите когда наступают Events от HTMLMediaElement, будет хоть какое то представление о том что же происходит в реальности.

  • Daemon23RUS, Content-Type: application/vnd.apple.mpegURL не помогло...
    Еще что заметил, после загрузки html плеер на странице начинает воспроизведение будто в самом конце трека на iphone...
  • GetQuestion, Тогда качать утилиты от эппла и смотреть что не так. Возможно чего то не хватает в плейлисте. There are several tools available that can help you set up an HTTP Live Streaming service. The tools include a media stream segmenter, a media file segmenter, a stream validator, an id3 tag generator, and a variant playlist generator.

    The tools are frequently updated, so you should download the current version of the HTTP Live Streaming Tools from the Apple Developer website. You can access them if you are a member of the iOS Developer Program. One way to navigate to the tools is to log onto developer.apple.com, then use the search feature.

  • Daemon23RUS, команда
    ffmpeg -y -i "Rompasso.mp3" -c:a aac -b:a 128k -muxdelay 0 -f segment -sc_threshold 0 -segment_time 5 -segment_list "playlist.m3u8" -segment_format mpegts "file%d.m4a"

    ffmpeg -y -i "Rompasso.mp3" -c:a aac -b:a 128k -muxdelay 0 -f segment -sc_threshold 0 -segment_time 5 -segment_list "playlist.m3u8" -segment_format mpegts "file%d.m4a"

    генерирует такие файлы, пример:
    https://cloud.mail.ru/public/tk5V/t6CzheyNY
    https://cloud.mail.ru/public/krw1/5wgRpR8bj

  • Daemon23RUS, Получилось, когда сгенерировал m3u8 совместно с .ts файлами, а не с m4a такой командой:

    ffmpeg
    -i Rompasso.mp3
    -vn -ac 2 -acodec aac
    -f segment -segment_format mpegts -segment_time 10
    -segment_list audio_pl.m3u8
    audio_segment%05d.ts

    И теперь на ios работает все быстро. Но не поддерживается для android / windows такой плейлист XD Но это уже не проблема.

  • GetQuestion, Можно сервить 2 файла m3u8, или разобраться как это делается внутри m3u8, да и с Content-Type "поиграть"
Нужно решить такую задачу?

Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.

Заказать помощь
Лучший ответ
1
Андрей PHP Ответ

Для достижения моментального воспроизведения потокового m3u8 файла на устройствах IOS, вам необходимо использовать HLS (HTTP Live Streaming) - протокол потоковой передачи видео и аудио контента, разработанный Apple. Ниже приведены несколько шагов, которые помогут вам реализовать это:

1. Создайте m3u8 файл: Вам необходимо создать файл плейлиста m3u8, который будет содержать ссылки на различные сегменты видео и информацию о потоке. Вы можете использовать различные инструменты для создания этого файла, такие как FFmpeg или онлайн-сервисы.

2. Разместите файлы на сервере: После создания m3u8 файла, загрузите все сегменты видео на ваш сервер и убедитесь, что они доступны по URL-адресам.

3. Используйте тег video в HTML: Для воспроизведения потокового видео на устройствах IOS, вам необходимо использовать тег video в HTML. Ниже приведен пример кода:

<video controls>
 
</video>

<video controls> </video>

4. Убедитесь, что ваш сервер поддерживает HLS: Для того чтобы видео воспроизводилось корректно на устройствах IOS, ваш сервер должен поддерживать протокол HLS. Убедитесь, что сервер правильно настроен для передачи потокового видео.

5. Тестирование и отладка: После реализации вышеперечисленных шагов, протестируйте воспроизведение видео на устройствах IOS и убедитесь, что все работает корректно. В случае возникновения проблем, используйте инструменты для отладки, такие как Safari Web Inspector.

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

Другие ответы (0)

Пока нет других ответов. Будьте первым, кто поможет автору.

Ответить на вопрос

комментарий

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

Вам также может быть интересно