블로그

iOS에서 YouTube 백그라운드 재생이 실제로 작동하는 방식

talavo 작성5 분 읽기

talavo에서 사람들이 처음 시도해보는 것 중 하나는 동영상이 재생되는 동안 화면을 잠그는 것입니다. 그리고 오디오가 계속 흘러나올 때 살짝 놀라게 됩니다. 기본 iOS Safari에서는 그렇게 되지 않습니다. 실제로 어떤 일이 일어나는지 설명하겠습니다. 「설정을 켰다」는 말보다 솔직한 버전이 훨씬 흥미롭습니다.

제약 조건

talavo는 WKWebView에서 페이지를 렌더링합니다. 이것은 Safari가 사용하는 것과 동일한 WebKit 엔진으로, Apple이 iOS에서 허용하는 유일한 브라우저 엔진입니다. WebKit은 백그라운드 처리에 의도적으로 공격적입니다. 웹 뷰가 포그라운드를 벗어나면 시스템은 타이머를 제한하고 미디어 파이프라인을 중단시킵니다. 이는 배터리에는 좋지만 화면이 꺼진 상태에서 팟캐스트처럼 동영상을 계속 재생하고 싶은 사람에게는 불편합니다. YouTube 자체도 무중단 백그라운드 재생을 Premium 전용으로 유지합니다.

파이프라인 살려두기

비결은 숨겨진 플래그가 아닙니다. 미디어 세션이 종료되지 않도록 하는 것입니다. talavo는 페이지의 미디어 세션을 가로채고, 시스템이 백그라운드 전환 시 재생을 일시 정지하려 할 때 WebKit이 세션을 해제하도록 놔두는 대신 기반 요소를 「실행 중」 상태로 유지합니다. 실제로는 OS가 강제하는 일시 정지를 포착하고 요소가 계속 작동하도록 즉시 유지합니다. 필요하다면 거의 0에 가까운 재생 속도로라도 유지해서 오디오 파이프라인이 활성 상태를 유지하여 가비지 컬렉션 대신 깔끔하게 재개될 수 있도록 합니다.

그 위에 talavo는 표준 iOS 현재 재생 중 컨트롤(잠금 화면, 제어 센터, AirPods)을 활성 동영상에 연결합니다. 그래서 일시 정지, 재생, 탐색이 소리가 나는 웹 페이지가 아니라 네이티브 미디어 앱처럼 작동합니다.

플로팅 미니 플레이어

백그라운드 오디오는 절반의 이야기입니다. 나머지 절반은 플로팅 미니 플레이어입니다. 동영상을 분리하여 다른 탭에서 다른 내용을 읽는 동안에도 계속 재생되는 화면 속 화면 창입니다. Premium 구독 없이도 사용 가능합니다. 시스템 PiP와 같은 아이디어로, talavo가 재생할 수 있는 모든 동영상에 적용됩니다.

솔직한 한계

이것은 프라이빗 API가 아닌 WebKit 위에 쌓인 우회 방법입니다. 두 가지를 의미합니다. 웹 플랫폼이 제공하는 범위 내에 머물며, YouTube가 플레이어 내부를 개편하면 영향을 받을 수 있습니다. 그럴 때 수정합니다. 이것이 변경 내역의 포인트 릴리스가 하는 작업의 대부분입니다. 실제 브라우저 엔진 위에 구축하는 장점은 이것이 실행되는 동안 나머지 웹이 정상적으로 계속 작동한다는 것입니다.