less than 1 minute read

1줄 요약

버그 아님

환경

iOS safari (버전 무관)

현상

iOS safari 브라우저에서 사용자 제스처 없이 unmute 상태의 video element를 프로그래밍적으로 재생을 시도했을 때(videoElement.play()),

video가 순간적으로 재생되려다가 취소되면서 NotAllowedError를 뱉는 경우가 있다.

영상 재생을 막을 것이면 처음부터 막을 것이지, 왜 영상 재생을 시작했다가 취소시키는 것일까? 내가 뭔가 잘못한 것은 아닐까? 사용자 제스처 없이도 video autoplay가 가능한 방법이 있는 것은 아닐까?

라는 희망을 품으며 webkit의 소스코드를 분석해 보았다.

원인

webkit 2.5 기준, HTMLMediaElement의 소스코드를 살펴보면

https://github.com/WebKit/WebKit/blob/webkitglib/2.50/Source/WebCore/html/HTMLMediaElement.cpp#L4355

video element를 프로그래밍적으로 play()할 경우,

현재 재생 중이더라도 세션이 ‘playbackPermitted()’를 통과 못 하면, play() 프라미스를 NotAllowedError로 거절한다.

결론

HTML video 자동 재생(autoplay)에는 사용자 제스처(user gesture)가 반드시 필요하다.

헛된 희망을 버려라.

EOD

20250826

Tags:

Categories:

Updated:

Leave a comment