์ด ๋ฌธ์๋ ๋ฌด์์ ์ ๋ฆฌํ๋
Google IMA(Interactive Media Ads)๋ฅผ Android์์ ๋ถ์ผ ๋, ๋ฌธ์/์ํ์์ ์ฉ์ด๊ฐ ์์ฌ ๋ณด์ฌ์(โextensionโ, โlibraryโ, โMedia3โ) ํท๊ฐ๋ฆฌ๊ธฐ ์ฝ๋ค.
์ด ๋ฌธ์๋ ๊ณต์ ๋ฌธ์์์ ์ค์ ๋ก ์ฐ๋ ์ฉ์ด๋ฅผ ๊ธฐ์ค์ผ๋ก ๋ค์์ ์์ฐ์ค๋ฝ๊ฒ ์ดํดํ ์ ์๋๋ก ์ ๋ฆฌํ๋ค.
- IMA SDK๊ฐ โ๋ฌด์์โ ํด์ฃผ๋์ง
- ExoPlayer(ExoPlayer2 vs Media3)์ IMA๊ฐ โ์ด๋ป๊ฒโ ์ฐ๊ฒฐ๋๋์ง
- โํ๋ ์ด์ด๊ฐ ๋ช ๊ฐ๋?โ๋ฅผ ์ ํํ ์ด๋ค ์๋ฏธ๋ก ๋ด์ผ ํ๋์ง
- (๋น๊ต) WebView + IMA HTML5๋ก ๊ด๊ณ ๋ง ๋ถ๋ฆฌํ์ ๋ ๊ตฌ์กฐ๊ฐ ์ด๋ป๊ฒ ๋ฌ๋ผ์ง๋์ง
1) IMA SDK๋ ๋ฌด์์ธ๊ฐ
IMA SDK๋ ๋์์ ๊ด๊ณ ๋ฅผ ๋ถ์ด๊ธฐ ์ํ SDK๋ค. (Client-side/Server-side(DAI) ๋ชจ๋ ์ง์)
Client-side ๊ด์ ์์ IMA๋ ๋ณดํต ๋ค์์ ๋ด๋นํ๋ค.
- VAST/VMAP ๊ฐ์ ad tag ๊ธฐ๋ฐ์ผ๋ก ๊ด๊ณ ์์ฒญ
- ๊ด๊ณ ์ฌ์์ ๋ผ์ดํ์ฌ์ดํด(๋ก๋/์์/์คํต/ํด๋ฆญ/์๋ฃ/์๋ฌ) ์ด๋ฒคํธ ์ ๊ณต
- ๊ด๊ณ UI(์คํต ๋ฒํผ ๋ฑ) ๋ฐ ์ธก์ /ํธ๋ํน ํ๋ฆ
๊ณต์ ๋ฌธ์(๊ฐ์ด๋ ์์์ ): IMA SDKs ๊ฐ์
๊ฐ๋ฐ์ ๊ด์ ์์ฝ: โ๊ด๊ณ ์์ฒด(์์ฒญยท์ฌ์ยท์ธก์ ) ํ์ดํ๋ผ์ธ์ ํ์คํํด์ SDK๋ก ์ ๊ณตํ๋ค.โ
2) โExoPlayer + IMAโ ๊ด๊ณ๋ฅผ ์ดํดํ๊ธฐ ์ํ ๊ฐ์ฅ ์ค์ํ ์ง๋ฌธ
Q. IMA๋ ExoPlayer๋ฅผ โ๋์ฒดโํ๋ ํ๋ ์ด์ด์ธ๊ฐ?
A. ์๋๋ค.
- ExoPlayer๋ ์ฝํ ์ธ (๋ณธํธ) ์ฌ์ ์์ง(ABR/DRM/ํธ๋ ์ ํ/๋ฒํผ๋ง/๋์ฝ๋ฉ ์ถ๋ ฅ ๋ฑ)์ด๋ค.
- IMA๋ ๊ด๊ณ ์์ฒญ/๊ด๊ณ ์ฌ์ ํ๋ก์ฐ/๊ด๊ณ ์ด๋ฒคํธยท์ธก์ ์ ์ ๊ณตํ๋ค.
์ฆ, โIMA vs ExoPlayerโ๊ฐ ์๋๋ผ โExoPlayer(ํ๋ ์ด์ด)์ IMA(๊ด๊ณ ๊ธฐ๋ฅ)๋ฅผ ์ด๋ป๊ฒ ๋ถ์ด๋โ์ ๋ฌธ์ ๋ค. ์ถ๊ฐ๋ก, IMA๋ ํน์ ํ๋ ์ด์ด์ ์ข ์๋ ๊ฐ๋ ์ด ์๋์ด์ ExoPlayer๊ฐ ์๋ ํ๋ ์ด์ด์๋ ํตํฉํ ์ ์๋ค. ๋ค๋ง ExoPlayer(ํนํ Media3)๋ IMA๋ฅผ ์ฝ๊ฒ ๋ถ์ด๊ธฐ ์ํ ํตํฉ ๋ชจ๋์ด ์ ์ ๋ฆฌ๋ผ ์์ด ์ค๋ฌด์์ ๋ง์ด ์ ํ๋๋ค.
3) ๊ณต์ ์ฉ์ด ์ ๋ฆฌ: โExoPlayer IMA extensionโ vs โExoPlayer IMA libraryโ
์ฌ๊ธฐ์๋ถํฐ๊ฐ ๊ฐ์ฅ ํท๊ฐ๋ฆฌ๋ ์ง์ ์ธ๋ฐ, ์๋ ๋ ํํ์ ๊ณต์ ๋ฌธ์์ ์ค์ ๋ก ๋ฑ์ฅํ๋ ๊ณต์ ์ฉ์ด๋ค.
3.1 (Google IMA ๋ฌธ์ ์ฉ์ด) ExoPlayer IMA extension
Google IMA(Android) ๋ฌธ์์๋ **โGet started with the ExoPlayer IMA extensionโ**๋ผ๋ ๊ฐ์ด๋๊ฐ ์๊ณ , ์ฌ๊ธฐ์ ๋งํ๋ โExoPlayer IMA extensionโ์ IMA SDK๋ฅผ ExoPlayer์ ์ฝ๊ฒ ๋ถ์ด๋๋ก ๋ง๋ ํตํฉ ๋ ์ด์ด๋ฅผ ๋ปํ๋ค.
๋ํ DAI(์๋ฒ์ฌ์ด๋) ์ชฝ ๋ฌธ์์์๋ โExoPlayer IMA extensionโ์ด๋ ํํ์ ๊ทธ๋๋ก ์ฌ์ฉํ๋ฉฐ, โextension์ด IMA DAI SDK๋ฅผ ๋ํ(wrap)ํ๋คโ๊ณ ์ค๋ช ํ๋ค.
ํ ์ค: โExoPlayer IMA extensionโ์ Google IMA ๋ฌธ์์์ ์ฐ๋ ํตํฉ ๋ ์ด์ด ์ด๋ฆ์ด๋ค.
3.2 (Android Developers / Media3 ๋ฌธ์ ์ฉ์ด) ExoPlayer IMA library
Android Developers(= Media3 ๋ฌธ์)์์๋ โExoPlayer IMA library๋ผ๋ ํํ์ ์ฌ์ฉํ๋ค.
๋ฌธ์์๋ ์ด ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ImaAdsLoader๋ฅผ ์ ๊ณตํ๊ณ ,
client-side IMA SDK ๊ธฐ๋ฅ์ ๋ํํด์ VAST/VMAP ๊ด๊ณ ์ฝ์
์ ์ฝ๊ฒ ํ๋ค๊ณ ์ค๋ช
๋์ด ์๋ค.
- Android Developers (Media3): Ad insertion โ ExoPlayer IMA library
- Reference: androidx.media3.exoplayer.ima ํจํค์ง
ํ ์ค: โExoPlayer IMA libraryโ๋ Media3(AndroidX) ๋ฌธ์์์ ์ฐ๋ ๊ณต์ ๋ช ์นญ์ด๋ค.
3.3 ๋์ ์ฐจ์ด๋ฅผ โํ ๋ฌธ์ฅโ์ผ๋ก
- โExoPlayer IMA extensionโ์ Google IMA ๋ฌธ์๊ฐ ์ฌ์ฉํ๋ ํตํฉ ๋ ์ด์ด ํํ์ด๊ณ ,
- โExoPlayer IMA libraryโ๋ Media3(AndroidX) ๋ฌธ์๊ฐ ์ฌ์ฉํ๋ ํตํฉ ๋ ์ด์ด ํํ์ด๋ค.
์ค๋ฌด์ ์ผ๋ก๋ โExoPlayer2(๊ตฌ ํจํค์ง) ์ํ๊ณ vs Media3(AndroidX) ์ํ๊ณโ ์ฐจ์ด๋ก ํจ๊ป ์ดํดํ๋ฉด ๊ฐ์ฅ ๋น ๋ฅด๋ค.
4) ExoPlayer2 vs Media3 ExoPlayer: ์ ๊ฐ๋ผ์ก๊ณ ๋ฌด์์ด ๋ค๋ฅธ๊ฐ
Q. ExoPlayer2์ Media3 ExoPlayer๋ โ๋ค๋ฅธ ํ๋ ์ด์ดโ์ผ?
A. ๊ธฐ๋ฅ์ ์ผ๋ก๋ ํ์/์ด์ ๊ด๊ณ์ ๊ฐ๊น๊ณ , ๊ฐ์ฅ ํฐ ์ฐจ์ด๋ โ๋ฐฐํฌ ์ฑ๋(=AndroidX๋ก ์ด๋)โ๊ณผ ๋ค์์คํ์ด์ค๋ค.
Android Developers์ migration guide๋ ExoPlayer์ ์ ํ์ด Jetpack Media3๋ก ์ด๋ํ๊ณ , ExoPlayer2(com.google.android.exoplayer2)์์ Media3(androidx.media3)๋ก ๋ง์ด๊ทธ๋ ์ด์
ํ๋ ๊ฒฝ๋ก๋ฅผ ์๋ดํ๋ค.
Media3๋ AndroidX ๋ฆฌํฌ์งํ ๋ฆฌ์์ ๊ณ์ ๋ฆด๋ฆฌ์ฆ๋๋ค.
๊ฐ๋ฐ์ ๊ด์ ์์ฝ: โExoPlayer์ ํ์ฌ/๋ฏธ๋๋ Media3(AndroidX) ์ชฝ์ ์๊ณ , IMA ํตํฉ๋ ๊ทธ ํ๋ฆ์ ๋ฐ๋ผ๊ฐ๋ค.โ
5) ๊ฐ์ฅ ๋ง์ด ๋์ค๋ ์ค์ ์ง๋ฌธ: โํ๋ ์ด์ด๋ ๋ช ๊ฐ์ผ?โ
์ฌ๊ธฐ์ โํ๋ ์ด์ดโ๋ผ๋ ๋จ์ด๊ฐ ๋ฌด์์ ๋ปํ๋์ง๋ถํฐ ์ ํด์ผ ์คํด๊ฐ ์๋ค.
- (A) ์ฑ ์ฝ๋ ๊ด์ ์ Player ์ธ์คํด์ค(ExoPlayer ๊ฐ์ฒด)
- (B) ํ๋ฉด์ ๋ณด์ด๋ ๋ทฐ(๋ ๋๋ง ๋ทฐ)
- (C) ์ฌ์ ์์ง(๋ค์ดํฐ๋ธ ExoPlayer vs ์น ๋น๋์ค)
Q. ExoPlayer + IMA(ํตํฉ ๋ ์ด์ด)๋ฉด Player ์ธ์คํด์ค๋ 2๊ฐ์ธ๊ฐ?
A. ๋ณดํต 1๊ฐ๋ค.
์ฌ๊ธฐ์ โํตํฉ ๋ ์ด์ดโ๋ ๊ณต์ ๋ฌธ์์์ ๋งํ๋
- (ExoPlayer2 ๊ณ์ด) ExoPlayer IMA extension ๋๋
- (Media3 ๊ณ์ด) ExoPlayer IMA library ์ฒ๋ผ, IMA SDK๋ฅผ ExoPlayer์ ๋ถ์ด๊ธฐ ์ฝ๊ฒ ๋ง๋ ํตํฉ ๋ชจ๋์ ์๋ฏธํ๋ค.
Media3 ๋ฌธ์์์ ์ค๋ช ํ๋ ad insertion ๊ตฌ์กฐ๋ โ๊ด๊ณ ๊ตฌ๊ฐ์ ํ๋ ์ด์ด ํ์๋ผ์ธ์ ํตํฉโํ๋ ๋ฐฉ์์ด๊ณ , ExoPlayer IMA library๊ฐ IMA SDK๋ฅผ ๋ํํ์ฌ ๊ด๊ณ ์ฝ์ ์ ์ฝ๊ฒ ํ๋ค๊ณ ๋ช ์ํ๋ค.
์ฆ ๊ถ์ฅ ํตํฉ(ExoPlayer IMA extension / ExoPlayer IMA library)์์๋ ์ผ๋ฐ์ ์ผ๋ก:
- ExoPlayer ์ธ์คํด์ค 1๊ฐ
- ๊ด๊ณ ๊ตฌ๊ฐ/์ฝํ ์ธ ๊ตฌ๊ฐ์ ๊ฐ์ ํ๋ ์ด์ด๊ฐ ์ฌ์
- IMA๋ ๊ด๊ณ ์์ฒญ/์ด๋ฒคํธ/์ธก์ ์ ์ ๊ณต(ํตํฉ ๋ ์ด์ด๊ฐ ์ฐ๊ฒฐํด์ค)
Q. โIMA SDK๋ฅผ ์ง์ ๋ถ์ด๋ฉดโ 2๊ฐ ํ๋ ์ด์ด๊ฐ ๋ ์๋ ์์ด?
A. ๊ฐ๋ฅํ๋ค(ํ์ง๋ง ํ์๋ ์๋). ๋ํ โ์ง์ ํตํฉโ์ ExoPlayer์ ํ์ ๋์ง ์๋๋ค. IMA SDK๋ ๊ด๊ณ ์์ฒญ/์ด๋ฒคํธ/์ธก์ ์ ์ ๊ณตํ๋ SDK์ด๋ฏ๋ก, ExoPlayer๊ฐ ์๋ ๋ค๋ฅธ ํ๋ ์ด์ด(์: ์ปค์คํ ํ๋ ์ด์ด/๊ธฐ์กด ๋ ๊ฑฐ์ ํ๋ ์ด์ด) ์ ๋ถ์ด๋ ํํ๋ ๊ฐ๋ฅํ๋ค. ๋จ, ์๋ ์์๋ Android ์ฑ์์ ๊ฐ์ฅ ํํ โExoPlayer ๊ธฐ๋ฐโ ์๋๋ฆฌ์ค๋ก ์ค๋ช ํ๋ค.
โ์ง์ ํตํฉโ์ IMA ์ด๋ฒคํธ(๊ด๊ณ ์์/์ข ๋ฃ ๋ฑ)๋ฅผ ์ฑ์ด ์ง์ ๋ฐ์์ ์ ํ์ ์ ์ดํ๊ธฐ ๋๋ฌธ์, ๊ตฌํ ์ ํ์ ๋ฐ๋ผ 1-player๋ ๋๊ณ 2-player๋ ๋ ์ ์๋ค.
-
(์์ 1) ์ง์ ํตํฉ + 1 Player(๊ฐ๋ฅ)
๊ด๊ณ ์์ ์ด๋ฒคํธ๋ฅผ ๋ฐ์ผ๋ฉด ๊ฐ์ ExoPlayer ์ธ์คํด์ค์ ๊ด๊ณ ์์ค๋ฅผ ๋ถ์ฌ ์ฌ์ํ๊ณ , ๊ด๊ณ ์๋ฃ ์ด๋ฒคํธ ํ ๋ค์ ์ฝํ ์ธ ์์ค๋ก ๊ต์ฒดํด ๋ณธํธ์ ์ฌ์ํ๋ค.
โ Player ์ธ์คํด์ค๋ 1๊ฐ์ง๋ง, ๊ด๊ณ /์ฝํ ์ธ ์ ํ ๋ก์ง์ ์ฑ์ด ์ง์ ๊ตฌํํด์ผ ํ๋ค. -
(์์ 2) ์ง์ ํตํฉ + 2 Player(๊ฐ๋ ์ ํ)
contentPlayer(๋ณธํธ)์adPlayer(๊ด๊ณ )๋ฅผ ๋ฐ๋ก ๋๊ณ , ๊ด๊ณ ์ค์๋ adPlayer์ PlayerView๋ฅผ ์ค๋ฒ๋ ์ด๋ก ๋ณด์ฌ์ฃผ๊ณ ๋๋๋ฉด ์จ๊ธด ๋ค contentPlayer๋ฅผ ์ฌ์ํ๋ค.
โ Player ์ธ์คํด์ค๊ฐ 2๊ฐ๊ฐ ๋๋ฉด์ ์ค๋์ค ํฌ์ปค์ค/ํ์คํฌ๋ฆฐ/ํ์ /๋ฐฑ๊ทธ๋ผ์ด๋/์ ํ ํ์ด๋ฐ ๊ฐ์ ์ํ ๋๊ธฐํ๋ฅผ ์ฑ์ด ์ฑ ์์ ธ์ผ ํ๋ค.
๊ทธ๋์ ExoPlayer ๊ธฐ๋ฐ ์ฑ์์๋ ๋ณดํต โExoPlayer IMA extension / ExoPlayer IMA libraryโ ๊ฐ์ ํตํฉ ๋ ์ด์ด๋ฅผ ์จ์ 1-player ๋ชจ๋ธ๋ก ์ด์ ๋ณต์ก๋๋ฅผ ์ค์ด๋ ์ชฝ์ด ์ผ๋ฐ์ ์ด๋ค.
6) (CSAI) Pre-roll ํ๋ฆ์ โ1 Player ๋ชจ๋ธโ๋ก ์ดํดํ๊ธฐ
sequenceDiagram autonumber participant App as App (Player ํ๋ฉด) participant Player as ExoPlayer/Media3 (1๊ฐ) participant Ads as Ads ์ฝ์ ๋ ์ด์ด(IMA ํตํฉ) participant IMA as IMA SDK (Client-side) participant ADS as Ad Server (VAST/VMAP) App->>Player: ์ฝํ ์ธ ์ค๋น (MediaItem + AdsConfiguration(adTagUri)) Player->>Ads: ๊ด๊ณ ์ฝ์ ํ๋ฆ ์์ Ads->>IMA: IMA๋ก ๊ด๊ณ ์์ฒญ/์ด๋ฒคํธ ์ฐ๊ฒฐ IMA->>ADS: VAST/VMAP ์์ฒญ ADS-->>IMA: ๊ด๊ณ ์๋ต IMA-->>Ads: ๊ด๊ณ ์ฌ์ ์ํ/์ด๋ฒคํธ Ads-->>Player: ํ์๋ผ์ธ์ ๊ด๊ณ ๊ตฌ๊ฐ ๋ฐ์ Player-->>App: ๊ด๊ณ ์ฌ์ -> ๋ณธํธ ์ฌ์ (๊ฐ์ Player ์ธ์คํด์ค)
7) WebView + IMA HTML5(๊ด๊ณ ) + ExoPlayer(๋ณธํธ)๋ก ๋ฐ๊พธ๋ฉด ๋ญ๊ฐ ๋ฌ๋ผ์ง๋
WebView ๋ฐฉ์์ โํ๋ ์ด์ด ๊ฐ์โ๋ฅผ (C) ์ฌ์ ์์ง ๊ด์ ์์ ๋ณด๋ฉด ๋ต์ด ๋ช ํํด์ง๋ค.
Q. WebView๋ก ๊ด๊ณ ๋ง ๋๋ฆฌ๋ฉด โ์ฌ์ ์์งโ์ด ๋ช ๊ฐ์ผ?
A. ์ฌ์ค์ 2๊ฐ๋ค.
- ๋ณธํธ: ๋ค์ดํฐ๋ธ ExoPlayer ์์ง
- ๊ด๊ณ : WebView ๋ด๋ถ HTML5
<video>+ IMA HTML5 SDK ์์ง
IMA HTML5 ๊ฐ์ด๋๋ โ๊ฐ๋จํ video player๋ฅผ ๋ง๋ค๊ณ IMA SDK๋ฅผ ๋ถ์ฌ๋ผโ๋ ์ ์ ๋ค.
Q. ๊ทธ๋ผ ๊ด๊ณ ๋ทฐ ํฌ๊ธฐ๊ฐ ExoPlayer PlayerView์ ์๋์ผ๋ก ๋ง์ถฐ์ง๋?
A. ์๋์ผ๋ก โ๋ถ์ด์โ ๋ง์ถฐ์ง๋ ๊ฐ๋
์ ์๋๋ค. ๊ฐ๋ฐ์๊ฐ ๋ง์ถฐ์ผ ํ๋ค.
์ค๋ฌด์์ ๊ฐ์ฅ ํํ ํจํด์:
- ๋์ผ ์ปจํ
์ด๋(FrameLayout ๋ฑ)์
PlayerView์WebView๋ฅผ ์ค๋ฒ๋ ์ด๋ก ์ฌ๋ฆฌ๊ณ - ๊ด๊ณ ์ค์ WebView๋ฅผ
VISIBLE, ๊ด๊ณ ๋๋๋ฉดGONE - ๋ ๋ทฐ ๋ชจ๋
match_parent๋ก ๋์ผ ๋ ์ด์์ ๊ท์น์ ๊ณต์ โ ์ด๋ ๊ฒ ํ๋ฉด โ๊ฐ์ด ๋ฆฌ์ฌ์ด์ฆ๋๋ ๊ฒ์ฒ๋ผโ ๋ง๋ค ์ ์๋ค(ํ์ง๋ง ์ค๊ณ๋ ๊ฐ๋ฐ์ ์ฑ ์).
8) ๊ฒฐ๋ก (์ค๋ฌด ์ ํ ๊ธฐ์ค)
- ExoPlayer ๊ธฐ๋ฐ์ผ๋ก ์ฑ์ ์ด์ํ๋ค๋ฉด, ๊ด๊ณ ์ฝ์ ์ ๋ณดํต โExoPlayer IMA extension / ExoPlayer IMA libraryโ์ฒ๋ผ IMA๋ฅผ ๋ํํ ํตํฉ ๋ ์ด์ด๋ฅผ ์ฌ์ฉํ๋ 1-player ๋ชจ๋ธ์ด ๊ฐ์ฅ ์์ฐ์ค๋ฝ๋ค.
- WebView ๊ด๊ณ ๋ถ๋ฆฌ๋ ์ฌ์ ์์ง์ด 2๊ฐ๊ฐ ๋์ด ์ ํ/์ํ ๋๊ธฐํ/๋ ์ด์์/์ ์ฑ (๋ชจ๋ฐ์ผ ์น ์ ์ฝ) ๋ถ๋ด์ด ์ปค์ง ์ ์๋ค.