В настоящее время я пытаюсь интегрировать пользовательский аудиофильтр в видеопроигрыватель, обрабатывающий как файлы HLS, так и необработанные файлы MP4. У меня практически нет проблем с интеграцией на Chrome и Firefox - Safari, с другой стороны, не ведет себя соответствующим образом. Я наткнулся на несоответствие способа, с помощью которого safari маршрутизирует аудио из createMediaElementSource
звонка.
Я создал небольшую демонстрацию, чтобы проиллюстрировать проблему (Safari ТОЛЬКО для нативных HLS поддержка), я явно пропустил любой код звукового фильтра, так как он не имеет отношения к основной проблеме:
https://codepen.io/edvincandonus/pen/ZEGVbPG
В демоверсии, однажды audioContext создается и "разблокируется" жестом пользователя, я создаю MediaElementAudioSourceNode с помощью audioCtx.createMediaElementSource(video)
и оставляю его висящим (как в неподключенном). Как следствие, HTMLMediaElement будет перенаправлен в график обработки AudioContext, и, поскольку к audioCtx.destination
не было подключено ни одного соединения, при запуске воспроизведения видео должно отсутствовать воспроизведение.
Это поведение на Firefox. Chrome идет еще дальше и блокирует воспроизведение видео, если MediaElementAudioSourceNode не имеет конечного узла назначения (попробуйте воспроизвести MP4 из демоверсии на chrome)
Что касается Safari: это ожидание выполняется только тогда, когда источником видео является необработанный файл MP4 - но при переключении на поток m3u8 / hls звук HTMLMediaElement не правильно направляется в AudioContext, поскольку вы можете четко слышать звук видео.
Это известное ограничение сафари? Если нет, есть ли у кого-нибудь обходные пути для правильного доступа и маршрутизации аудио из потока HLS с использованием встроенной поддержки Safari для этого протокола?
Я наткнулся на старые ответы stackoverflow, указывающие, что createMediaElementSource имел всегда были ошибки в Safari, но я думаю, они уже исправили бы это.