FAST ์ฑ๋์ ์์ ๊ด๊ณ ๋ฅผ ํตํด ์์ต์ ์ฐฝ์ถํฉ๋๋ค. ์ ์ฒด ๋น์ฆ๋์ค ๋ชจ๋ธ์ ๋จ ํ๋์ ๊ฐ์ ์ ๊ธฐ๋ฐ์ ๋๊ณ ์์ต๋๋ค. ์ฑ๋์ด "๊ด๊ณ ๋ก ์ ํ"ํ๋ผ๊ณ ์ง์ํ ๋, ์ฒญ์ทจํ๋ ๋ชจ๋ ๋ค์ด์คํธ๋ฆผ ์์คํ (ad server, SSAI splicer, smart-TV player)์ด ์ ํํ ๊ฐ์ ์๊ฐ, ์ ํํ ๊ฐ์ ์๊ฐ ๋์ ์ด๋ฅผ ๋ฃ๋๋ค๋ ๊ฐ์ ์ ๋๋ค. SCTE-35๋ ์ด ๋ฉ์์ง๋ฅผ ์ ๋ฌํ๋ ํ์ค ํ๋กํ ์ฝ์ ๋๋ค. ์ด๋ฅผ ์กฐ์ฉํ ์๋ชป ์ฒ๋ฆฌํ๋ฉด(๊ทธ๋ฆฌ๊ณ ์นจ๋ฌต์ ๊ธฐ๋ณธ ์คํจ ๋ชจ๋์ ๋๋ค) ๊ด๊ณ ๊ฐ ๋ ๋๋ง๋์ง ์๊ฑฐ๋, ์๋ชป๋ ํ๋ ์์์ ์์๋๊ฑฐ๋, ๊ธธ์ด๊ฐ ์๋ชป๋ ์ ์์ต๋๋ค. ์์ฒญ์๋ ์ฌ๋ ์ดํธ๋ฅผ ๋ณด๊ฒ ๋๊ณ , ์์ต์ ๋ฐ์ํ์ง ์์ต๋๋ค.
์ด๊ฒ์ mStudio์ FAST ์ฑ๋์ด ์ด์์ ์นํ์ ์ธ ์ ๋ ฅ์์ ํ์ค์ ์ค์ํ๋ SCTE-35 ํ๋ฅผ ์ด๋ป๊ฒ ๋ฐฉ์ถํ๋์ง, ๊ทธ๋ฆฌ๊ณ ์ ์ฐ๋ฆฌ๊ฐ ์ด๋ฅผ ํ ๋ฒ์ ๊ด๊ณ ์ฝ์ ๋์ ์ธ ๊ฐ์ ํ๋ก ๊ตฌ์ฑํ๋์ง์ ๋ํ ์์ง๋์ด๋ง ์ด์ผ๊ธฐ์ ๋๋ค.
๋น ๋ฅธ ๊ฐ์
| ์ธก๋ฉด | ์ธ๋ถ ์ ๋ณด |
|---|---|
| ๋๋ฉ์ธ | AWS MediaLive FAST ์ฑ๋์ ์ํ SCTE-35 ๊ด๊ณ ์ค๋จ ์ ํธ |
| ์ด์์ ์ํฌํ๋ก์ฐ | ํ๋ก๊ทธ๋จ๋ณ ๊ด๊ณ ์ค๋จ ํธ์ง๊ธฐ โ ์ด ๋จ์ ์์น, ์ด ๋จ์ ๊ธธ์ด |
| ๊ด๊ณ ์ค๋จ๋น ๋ฐฉ์ถ๋๋ ํ | ์ธ ๊ฐ์ง โ ๊ด๊ณ ์์ TimeSignal, SpliceInsert, ๊ด๊ณ ์ข ๋ฃ TimeSignal |
| ๊ธธ์ด ์ ์ฝ | 10โ120์ด, ๋ฐ์ดํฐ ๊ณ์ธต์์ ๊ฒ์ฆ๋จ |
| ๋ค์ด์คํธ๋ฆผ ์๋น์ | Player, ad server ๋ฐ AWS MediaTailor (์ค๊ณ๋์์ผ๋ ์์ง ์ฐ๊ฒฐ๋์ง ์์)๊ฐ ์์์ ๋๋ค. |
| ์ํ | SCTE-35 ํ ๋ฐฉ์ถ์ ํ๋ก๋์ ์ค; SSAI ํตํฉ์ ์ค๊ณ ์ค |
๋น์ฆ๋์ค ๋ฌธ์
FAST ์ฑ๋์ ๋ชจ๋ ์์ ๊ด๊ณ ๋ ์์ต ์ด๋ฒคํธ์ ๋๋ค. ์ฑ๋์ "์ฌ๊ธฐ์ ๊ด๊ณ ๊ฐ ํ์๋๋ฉฐ, 30์ด ๋์ ์ง์๋ ์์ ์ด๋ ์ค๋นํด ์ฃผ์ธ์."๋ผ๊ณ ์๋ฆฌ๋ ๋ง์ปค๋ฅผ ๋ณด๋ ๋๋ค. Google Ad Manager, AWS MediaTailor, ์ง์ญ ad server, smart-TV player SDK์ ๊ฐ์ ๋ค์ด์คํธ๋ฆผ ์์คํ ์ ์ด ๋ง์ปค๋ฅผ ์ฝ๊ณ ๋ฌด์์ ์ฝ์ ํ ์ง ๊ฒฐ์ ํฉ๋๋ค.
๋ง์ปค๊ฐ ์ฌ๋ฐ๋ฅด๋ฉด ๊ด๊ณ ์ค๋จ์ ๊น๋ํ๊ฒ ์คํ๋๊ณ , ๋ ธ์ถ ์๊ฐ ์ง๊ณ๋๋ฉฐ, ์ด์์๋ ์์ต์ ์ป์ต๋๋ค. ๋ง์ปค๊ฐ ์๋ชป๋๋ฉด(์๋ชป๋ ๊ธธ์ด, ์๋ชป๋ ํํ, ์๋ชป๋ ํ์) ๊ด๊ณ ์์คํ ์ ์ด๋ฅผ ๊ฑฐ๋ถํ๊ฑฐ๋(๊ด๊ณ ๊ฐ ์ ๊ณต๋์ง ์์) ์๋ชป ๋ฐ์๋ค์ ๋๋ค(์๋ชป๋ ๊ธธ์ด์ ๊ด๊ณ ๋๋ ๋ค์ ํ๋ก๊ทธ๋จ์ผ๋ก ๋์ด๊ฐ๋ ๊ด๊ณ ). ๋ ๊ฐ์ง ๊ฒฐ๊ณผ ๋ชจ๋ ์ค์ ๋น์ฉ์ ๋ฐ์์ํค๋ฉฐ, ๋ ๊ฐ์ง ๋ชจ๋ ์กฐ์ฉํ ์คํจํฉ๋๋ค. ์ฑ๋์ ๊ณ์ ์คํธ๋ฆฌ๋ฐ๋๊ณ , ์์ฒญ์๋ ์ฌ๋ ์ดํธ ๋๋ ์ด์ํ ์ปท์ ๋ณด๊ฒ ๋ฉ๋๋ค. ์์ตํ ํ์ดํ๋ผ์ธ์ ๋ ๋ฎ์ ์์น๋ง ์์ฑํ ๋ฟ, ์ถ์ ํ ์ค๋ฅ ๋ฉ์์ง๋ ์์ต๋๋ค.
์์ง๋์ด๋ง ๋ชฉํ๋ "๊ด๊ณ ์ง์"์ด ์๋๋๋ค. ๊ทธ๊ฒ์: ์ด์์๊ฐ ์ ์ํ ๋ชจ๋ ๊ด๊ณ ์ค๋จ์ด ํ์ค์ ์ค์ํ๋ SCTE-35 ์ ํธ๋ก, ์ด์์๊ฐ ์ ํํ ์ ํํ ํ๋ ์์, ํญ์ ๋ชจ๋ ๋ค์ด์คํธ๋ฆผ ์๋น์์๊ฒ ๋๋ฌํด์ผ ํ๋ค๋ ๊ฒ์ ๋๋ค.
SCTE-35๋ ์ค์ ๋ก ๋ฌด์์ธ๊ฐ (90์ด ๋ฒ์ )
SCTE-35๋ ๋น๋์ค ์คํธ๋ฆผ์ ํ ๋ฉ์์ง๋ฅผ ์ฝ์ ํ๊ธฐ ์ํ ํ์ค์ ๋๋ค. ํ๋ ๊ด๊ณ ์ฝํ ์ธ ๋ฅผ ์ ๋ฌํ์ง ์๊ณ , ์ ํธ๋ฅผ ์ ๋ฌํฉ๋๋ค โ "๊ด๊ณ ์ค๋จ์ด ์ฌ๊ธฐ์์ ์์๋ฉ๋๋ค," "๊ด๊ณ ์ค๋จ์ด ์ฌ๊ธฐ์์ ๋๋ฉ๋๋ค," "์ด ์ธ๊ทธ๋จผํธ๋ N์ด ๊ธธ์ด์ ๋๋ค." ๋ค์ด์คํธ๋ฆผ ์์คํ ์ ์ด๋ฌํ ์ ํธ๋ฅผ ์ฝ๊ณ ์ด์ ๋ฐ๋ผ ์๋ํฉ๋๋ค. SSAI ๊ณ์ธต์ ์ค์ ๊ด๊ณ creative๋ฅผ HLS manifest์ ์ฝ์ ํ๊ณ , smart-TV player๋ overlay๋ฅผ ํธ๋ฆฌ๊ฑฐํ๋ฉฐ, ad server๋ ์ฌ๋กฏ ๊ธฐํ๋ฅผ ๊ธฐ๋กํฉ๋๋ค.
๋น์ฌ์ ์ฌ์ฉ ์ฌ๋ก์ ์ค์ํ ๋ ๊ฐ์ง ํ ํํ๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค:
- SpliceInsert โ ์๋ณธ SCTE-35 ํ. SpliceEventId, ์ด ๋จ์ ๊ธธ์ด, ๊ทธ๋ฆฌ๊ณ "out of network" ํ๋๊ทธ๋ฅผ ์ ๋ฌํฉ๋๋ค. ๋๋ถ๋ถ์ ๊ธฐ์กด ad server๊ฐ ์ด๋ฅผ ์ฝ์ต๋๋ค.
- TimeSignal โ ๋ ์๋กญ๊ณ ํํ๋ ฅ์ด ํ๋ถํ ํ. SegmentationTypeId (52 = Provider Ad Start, 53 = Provider Ad End)์ 90,000-tick ๋จ์์ SegmentationDuration์ ํฌํจํ๋ SegmentationDescriptor๋ฅผ ์ ๋ฌํฉ๋๋ค. SSAI ์์คํ ๊ณผ ์ต์ player๋ ์์๊ณผ ๋์ ๊น๋ํ๊ฒ ์ง์ง์ ์ ์๊ธฐ ๋๋ฌธ์ ์ด ํํ๋ฅผ ์ ํธํฉ๋๋ค.
๋ ํํ ๋ชจ๋ ์ฌ๋ฐ๋ฅธ SCTE-35์ ๋๋ค. ๋ค์ด์คํธ๋ฆผ ์๋น์๋ง๋ค ์ ํธํ๋ ํํ๊ฐ ๋ค๋ฆ ๋๋ค. ํ ๊ฐ์ง ํํ๋ง ๋ฐฉ์ถํ๋ฉด ์์ต์ ๋์น๊ฒ ๋ฉ๋๋ค.
์ด๊ฒ์ด ์ค์ํ ์ด์ . ๋จ์ํ ๊ตฌํ์ ๊ด๊ณ ์ค๋จ๋น ํ๋์ SpliceInsert๋ฅผ ๋ฐฉ์ถํ๊ณ ์๋ฃ๋์๋ค๊ณ ๊ฐ์ฃผํฉ๋๋ค. ์ด ๊ด๊ณ ์ค๋จ์ ๋ ๊ฑฐ์ player์์๋ ์๋ํ์ง๋ง, SSAI์์๋ ์กฐ์ฉํ ์คํจํฉ๋๋ค. ๊ด๊ณ inventory์ ์ ๋ฐ์ ์์ตํ๋๊ณ , ์ ๋ฐ์ ๊ทธ๋ ์ง ์์ต๋๋ค. ์์ต ์์น๊ฐ ๋ฎ๊ฒ ๋์ฌ ๋๊น์ง ์ด๋ค ๋ถ๋ถ์ด ๋ฌธ์ ์ธ์ง ์ ์ ์์ ๊ฒ์ ๋๋ค.
๋จ์ํ ์ ๊ทผ ๋ฐฉ์์ด ์คํจํ๋ ์ด์
์ง๋ฆ๊ธธ์ ๋ชจ๋ ๊ฑฐ์ ์๋ํ๊ธฐ ๋๋ฌธ์ ์ ํน์ ์ ๋๋ค.
- "์ธ์ฝ๋ฉ ์์ ์ ์๋ณธ ๋น๋์ค์ ๊ด๊ณ ๋ฅผ ์ฝ์ ." ์ ์ฐ์ฑ์ด ์์ต๋๋ค. ์ด์์๋ A/B-test ๋ฐฐ์น, deploy ํ ๊ด๊ณ ๋ณ๊ฒฝ, ์ง์ญ ๋๋ ๋์ ์์ฒญ์ ๊ด๊ณ ์คํ์ ํ ์ ์์ต๋๋ค. FAST ์ฑ๋์ด ์กด์ฌํ๋ ์ฃผ๋ ์ด์ ๋ ๋์ผํ content๋ก ์ฌ๋ฌ ๋ฐฉ์์ผ๋ก ์์ต์ ์ฐฝ์ถํ๋ ๊ฒ์ธ๋ฐ, encode ์์ ์ ๊ด๊ณ ๋ฅผ ์ฝ์ ํ๋ฉด ์ด๋ฌํ ๊ฐ๋ฅ์ฑ์ด ์ฐจ๋จ๋ฉ๋๋ค.
- "ํด๋ผ์ด์ธํธ ์ธก ๊ด๊ณ ์ฝ์ ํ์ฉ." ad-blocking์ด ์ฝ์ต๋๋ค. device๋ณ๋ก ๋ค๋ฅธ code path๊ฐ ํ์ํฉ๋๋ค. server-side personalisation์ด ๋ถ๊ฐ๋ฅํฉ๋๋ค. ๋ํ SSAI๋ฅผ ์์ ํ ์ฐํํ๋ฏ๋ก CPM์ด ๋ฎ์์ง๋๋ค.
- "๊ด๊ณ ์ค๋จ๋น ํ๋์ SpliceInsert ๋ง ๋ฐฉ์ถ." ๊ฐ์ฅ ํํ production ์ค์์ ๋๋ค. ์ผ๋ถ player์์๋ ์๋ํ์ง๋ง, TimeSignal ํ๋ก ์์/๋์ ์ง์ง์ผ๋ ค๋ SSAI ์์คํ ์์๋ ์กฐ์ฉํ ๋ฌด์๋ฉ๋๋ค. ๋ถ๋ถ์ ์ธ ์์ตํ๋ง ์ด๋ฃจ์ด์ง๋ฉฐ, ์กฐ์ฌํ error message๊ฐ ์์ต๋๋ค.
- "์ฌ์์ ์ธ๊ธ๋์ด ์์ผ๋ ๋ชจ๋ ๊ฒ์ 90 kHz ํฑ์ผ๋ก ํํ." ์ฌ์์ ๊ทธ๋ณด๋ค ๋ ๊น๋ค๋กญ์ต๋๋ค. SpliceInsert.Duration์ ์ด ๋จ์์ ๋๋ค. SegmentationDuration์ 90 kHz ํฑ ๋จ์์ ๋๋ค. ์ด๋ค์ ํผ๋ํ๋ฉด schema validation์ ํต๊ณผํ๊ณ ship out๋์ง๋ง, player์์ malformed duration์ผ๋ก ์ธํด ์คํจํ๋ ํ๊ฐ ์์ฑ๋ฉ๋๋ค. encoder๋ ์ด๋ฅผ ๊ฐ์งํ์ง ๋ชปํ๊ณ , player๋ ๊ด๊ณ ์ค๋จ์ ๊ทธ๋ฅ ๊ฑด๋๋๋๋ค.
- "MediaLive๊ฐ ํ์ธํ๋๋ก ํ์ฉ." MediaLive๋ ํ์ธํ์ง ์์ต๋๋ค. MediaLive๋ overlapping break, zero-duration break, ๊ทธ๋ฆฌ๊ณ impossible segmentation duration์ ๋ถํ ์์ด ๋ฐ์๋ค์ ๋๋ค. ํ์ธ์ MediaLive๊ฐ action์ ๋ณด๊ธฐ ์ ์ ์ด๋ฃจ์ด์ ธ์ผ ํฉ๋๋ค.
์ฐ๋ฆฌ๊ฐ ๊ฐ์ง ์ง๋ ๋๋ operator UI(ad break๊ฐ ๋จ์ํ {position, duration} ์์ธ ๊ณณ)์ MediaLive schedule(๋ชจ๋ cue๊ฐ perfectํด์ผ ํ๋ ๊ณณ) ์ฌ์ด์ ๊ฒฝ๊ณ์์ต๋๋ค.
์ฐ๋ฆฌ์ ํด๊ฒฐ์ฑ
ad break๋ฅผ end-to-end ์ผ๊ธ data object๋ก ์ฒ๋ฆฌํฉ๋๋ค. operator๋ ๊ฐ๋ฅํ ๊ฐ์ฅ ๊ฐ๋จํ ์ฉ์ด๋ก ์ด๋ฅผ ์ ์ํฉ๋๋ค. backend๋ schema layer์์ ํ ๋ฒ validateํฉ๋๋ค. Lambda๋ deploy ์ ์ด๋ฅผ three-cue stack์ผ๋ก translateํ๋ฉฐ, ๊ฐ cue๋ ์์ฒด spec์ด ์๊ตฌํ๋ time base์ ๋ฐ๋ผ ํํ๋ฉ๋๋ค. stack์ ๋ค๋ฅธ ์ด๋ค ๊ฒ๋ SCTE-35์ ๋ํด ์ ํ์๊ฐ ์์ผ๋ฉฐ, translation์ ๋ค๋ฅธ ๋ชจ๋ schedule action์ ์์ ํ๋ ๋์ผํ Lambda ๋ด์ ๋จ์ผ function์์ ์ด๋ฃจ์ด์ง๋๋ค.
๋ค์ด์ด๊ทธ๋จ 1 ยท ์ข ๋จ๊ฐ ๊ด๊ณ ๋ง์ปค ํ์ดํ๋ผ์ธ

์ํคํ ์ฒ
- frontend ad-break editor โ operator๋ program start๋ก๋ถํฐ์ position offset(์ด ๋จ์)๊ณผ duration(์ด ๋จ์)์ ์ง์ ํ์ฌ program๋ณ ad break๋ฅผ ์ถ๊ฐํฉ๋๋ค. bumper slot์ data model์ ์ผ๋ถ์ด๋ฉฐ playout layer์ ์ค๋น๋์ด ์์ต๋๋ค.
- AdMarker collection (MongoDB) โ ad break๊ฐ ์๋ program๋น ํ๋์ document๋ก, video๋ฅผ ์ฐธ์กฐํฉ๋๋ค. adBreaks[] array๋ Mongoose๊ฐ save time์ 10 โค duration โค 120์ ๊ฐ์ ํ๋ {position, duration}์ ์ ์ฅํฉ๋๋ค. bumper๋ downstream pairing์ ์ํ adBreakId reference๋ฅผ ๊ฐ์ง๋๋ค.
- NestJS backend (schedule.service.ts) โ deploy time์ ๊ฐ schedule์ ํด๋น AdMarker์ joinํ๊ณ field ์ด๋ฆ์ Lambda์ contract(position โ offsetSeconds, duration โ durationSeconds)์ผ๋ก ๋ณ๊ฒฝํฉ๋๋ค. ํ ๋ฒ์ bulk fetch๋ก N+1 ๋ฌธ์ ๋ฅผ ๋ฐฉ์งํฉ๋๋ค.
- Lambda orchestrator (fastChannel-lambda-fun/index.js) โ SCTE-35 translation์ ๋ด๋นํฉ๋๋ค. ๊ฐ ad break์ ๋ํด, input switch ๋ฐ watermark๋ฅผ ์ ๋ฌํ๋ ๋์ผํ BatchUpdateScheduleCommand์ three-cue stack์ ๋ฐฉ์ถํฉ๋๋ค. action ์ด๋ฆ์ program๋ณ๋ก version ๊ด๋ฆฌ๋๋ฏ๋ก, partial deploy ํ์๋ orphan sweep์ด ์ด๋ฅผ pairingํ ์ ์์ต๋๋ค.
- AWS MediaLive โ action์ ์์ ํ๊ณ , operator๊ฐ ์ ํํ ์ด์ HLS manifest์ #EXT-SCTE35 marker๋ฅผ ๋ฐฉ์ถํฉ๋๋ค.
์ฃผ์ ์์ง๋์ด๋ง ๊ฒฐ์
1. ๊ด๊ณ ์ค๋จ๋น ํ๋์ ํ๊ฐ ์๋ ์ธ ๊ฐ์ ํ
๋ชจ๋ ad break๋ program ๋ด์ ๋์ผํ logical moment์ ๋ํด ์ธ ๊ฐ์ง discrete action์ ๋ฐฉ์ถํฉ๋๋ค.
๋ค์ด์ด๊ทธ๋จ 2 ยท ๋จ์ผ ๊ด๊ณ ์ค๋จ ๋ผ์ดํ์ฌ์ดํด

์์ ๋ฐ ์ข
๋ฃ TimeSignal ํ๋ SegmentationUpid๋ฅผ ๊ณต์ ํ์ฌ downstream system์ด ์ด๋ฅผ deterministically pairingํ ์ ์๋๋ก ํฉ๋๋ค. SpliceInsert๋ player-level deduplication์ ์ํ unique SpliceEventId๋ฅผ ๊ฐ์ง๋๋ค. ์๋ก ๋ค๋ฅธ consumer๋ ์๋ก ๋ค๋ฅธ cue๋ฅผ ์ฝ์ต๋๋ค. ์ธ ๊ฐ์ง ๋ชจ๋๋ฅผ ๋ฐฉ์ถํจ์ผ๋ก์จ ์ค๋๋ ์ฐ๋ฆฌ๊ฐ ์ค์ํ๊ฒ ์๊ฐํ๋ ๋ชจ๋ contract์ ๋ฏธ๋์ ๋ชจ๋ plausible contract๋ฅผ ํฌ๊ดํฉ๋๋ค.
ํํ production mistake. ํ๋์ SpliceInsert๋ง ๋ฐฉ์ถํ๊ณ ๋๋จธ์ง ecosystem์ด ์์์ ์ฒ๋ฆฌํ ๊ฒ์ด๋ผ๊ณ ๊ฐ์ ํฉ๋๋ค. SSAI system์ matching TimeSignal ํ๊ฐ ์๋ break๋ฅผ quietly dropํ๊ณ ; classic ad server๋ TimeSignal-only signal์ ignoreํฉ๋๋ค. ์ธ ๊ฐ์ง ํ๊ฐ ๋ชจ๋ ์์ผ๋ฉด, ๋ชจ๋ ad break๋ downstream stack์ ์ผ๋ถ์ ์ํด monetise๋๊ณ ๋๋จธ์ง๋ missed๋ฉ๋๋ค โ ๊ทธ๋ฆฌ๊ณ ์ด ์ฌ์ค์ revenue report๊ฐ ์๋ log๋ฅผ ํตํด์ ์๊ฒ ๋ฉ๋๋ค.
2. ํ๋์ ํจ์์์ ์กฐ์ ๋๋ ๋ ๊ฐ์ง ์๊ฐ ๊ธฐ์ค
SpliceInsert.Duration์ ์ด ๋จ์์ ๋๋ค. TimeSignal descriptor ๋ด๋ถ์ SegmentationDuration์ 90,000-tick ๋จ์์ ๋๋ค. ๋์ผํ logical duration์ ๋ ๊ฐ์ง ๋ฐฉ์์ผ๋ก encodingํ๋ฉฐ, ํ์ฅ์์ ๊ฐ์ฅ ํํ SCTE-35 bug๋ ์ด๋ค์ ํผ๋ํ๋ ๊ฒ์ ๋๋ค.
๋ค์ด์ด๊ทธ๋จ 3 ยท ์๊ฐ ๋ณํ ๋ก์ง

conversion์ buildProgramActions์ ์ค์ง ๊ทธ๊ณณ์๋ง ์กด์ฌํฉ๋๋ค. cue duration์ด ์๋ชป ๋์ฌ ๊ฒฝ์ฐ ์ฐพ์๋ณผ ์ ์๋ ํ๋์ canonical place๊ฐ ์๊ณ , spec์ด evolveํ ๊ฒฝ์ฐ ๋ณ๊ฒฝํ ์ ์๋ ํ๋์ place๊ฐ ์์ต๋๋ค.
์ฐ๋ฆฌ๊ฐ ์๋์ ์ผ๋ก ์ ํํ ํธ๋ ์ด๋์คํ. AdMarker document์ ๋ ๊ฐ์ง time base๋ฅผ ๋ชจ๋ ์ ์ฅํ๊ณ Lambda๊ฐ ์ด๋ฅผ copy throughํ๋๋ก ํ ์๋ ์์์ต๋๋ค. ํ์ง๋ง ์๋์ ์ผ๋ก ๊ทธ๋ ๊ฒ ํ์ง ์์์ต๋๋ค. seconds value๋ง ์ ์ฅํจ์ผ๋ก์จ operator๊ฐ setํด์ผ ํ ์ซ์๋ ํ๋๋ฟ์ด๊ณ , validateํด์ผ ํ ์ซ์๋ ํ๋๋ฟ์ด๋ฉฐ, ์๋ชป๋ ์ ์๋ ์ซ์๋ ํ๋๋ฟ์ ๋๋ค. 90 kHz value๋ derived๋ ๊ฒ์ด๋ฉฐ ์ ์ฅ๋์ง ์์ต๋๋ค. derived data๋ driftํ์ง ์์ต๋๋ค.
3. ์์น๋ ์๋์ , ๋ฐ๋ ์๊ฐ์ ์ ๋์
operator๋ "program ์์ 720์ด ์ง์ ์ ad break"๋ผ๊ณ ๋งํฉ๋๋ค. Lambda๋ ์ค์ UTC fire time์ programStartTime + offsetSeconds ร 1000์ผ๋ก ๊ณ์ฐํ์ฌ ํด๋น action์ stampํฉ๋๋ค. input switch, watermark on, program end ๋ฑ ๋ค๋ฅธ ๋ชจ๋ schedule action๋ ๋์ผํ offset-to-timestamp pipeline์ ์ฌ์ฉํฉ๋๋ค. ad cue๋ ๋ค๋ฅธ ๋ชจ๋ ๊ฒ๊ณผ ๋์ผํ frame boundary์ ๋๋ฌํ๋ฉฐ, ์ด๋ค clock์ด timeline์ ์์ ํ๋์ง์ ๋ํ ambiguity๊ฐ ์์ต๋๋ค.
4. ์์ด์ด๊ฐ ์๋ ๋ฐ์ดํฐ ๊ณ์ธต์์์ ๊ฒ์ฆ
AdMarker schema๋ Mongoose save time์ duration โ [10, 120]์ด๋ฅผ ๊ฐ์ ํฉ๋๋ค. ๋ฒ์๋ฅผ ๋ฒ์ด๋๋ break๋ Lambda์ ๋๋ฌํ์ง ์์ต๋๋ค. program end๋ฅผ ๋์ด ํ์ฅ๋ ad break๋ reject๋๊ธฐ๋ณด๋ค๋ build time์ clip๋ฉ๋๋ค โ operator๋ ํ๋์ bad break๋ก ์ธํด ์์ ์ ์์ง ์์ต๋๋ค. ๋ฐ์ํ ์ ์๋ bug๋ณด๋ค ๋ฐ์ํ ์ ์๋ bug ์ ํ์ด ๋ ํฅ๋ฏธ๋กญ์ต๋๋ค.
5. SSAI์ ๋ถ๋ฆฌ๋ ํ ๋ฐฉ์ถ
์ค๋๋ ์ฐ๋ฆฌ๊ฐ shipํ๋ ๊ฒ์ signalling layer์ ๋๋ค. AWS MediaTailor๋ฅผ ํตํ server-side ad insertion(์ด cue๋ฅผ ์ฌ์ฉํ์ฌ ์ค์ ad creative๋ฅผ HLS manifest์ spliceํ ๊ฒ์)์ fully designed๋์์ง๋ง ์์ง wired in๋์ง ์์์ต๋๋ค. ์๋์ ์ธ ordering์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค: SSAI๋ฅผ turn onํ๊ธฐ ์ ์ production ํ๊ฒฝ์์ real channel์ ์ฌ์ฉ๋๋ cue layer๋ฅผ ๋จผ์ correctํ๊ฒ ๋ง๋ญ๋๋ค. integration์ด go live๋๋ฉด cue๋ ์ด๋ฏธ ์กด์ฌํ ๊ฒ์ ๋๋ค. downstream system์ day one๋ถํฐ clean contract๋ฅผ consumeํ ์ ์์ต๋๋ค.
์ด ordering์ด ์ค์ํ ์ด์ . cue๊ฐ wrongํ ๋ SSAI debugging์ brutalํฉ๋๋ค. cue์ fault๊ฐ ์๋๋ผ๋ ๋ชจ๋ failure๊ฐ SSAI failure์ฒ๋ผ ๋ณด์ด๊ธฐ ๋๋ฌธ์ ๋๋ค. cue layer๋ฅผ isolation ์ํ๋ก ๋จผ์ shipํ๊ณ real player์ ad server๋ฅผ ๋์์ผ๋ก validateํจ์ผ๋ก์จ, integration confusion์ entire category๊ฐ ๋ฐ์ํ๊ธฐ ์ ์ ์ ๊ฑฐํ์ต๋๋ค.
๊ฒฐ๊ณผ
- operator๊ฐ ์ ์ํ๋ ๋ชจ๋ ad break๋ channel์ HLS manifest์์ standards-conformant three-cue SCTE-35 stack์ right second์, right time base์ ๋ฐ๋ผ ๋ฐฉ์ถํฉ๋๋ค.
- translation layer๋ ํ๋์ function ๋ด์ ์กด์ฌํฉ๋๋ค. spec ๋ณ๊ฒฝ ๋๋ new downstream consumer๋ codebase ์ ์ฒด๋ฅผ huntํ๋ ๊ฒ์ด ์๋๋ผ single-file change๋ก ์ฒ๋ฆฌ๋ฉ๋๋ค.
- duration validation์ ์ด๋ค cue๊ฐ encoder์ ๋๋ฌํ๊ธฐ ์ ์ data layer์์ ์คํ๋ฉ๋๋ค. operator mistake๋ air time์ silently ๋ํ๋๋ ๊ฒ์ด ์๋๋ผ UI์ surface๋ฉ๋๋ค โ malformed cue๋ MediaLive์ ๋๋ฌํ ์ ์์ต๋๋ค.
- cue generation์ deterministicํฉ๋๋ค. identical operator input์ identical SCTE-35 action์ ์์ฐํ๋ฏ๋ก, same break๋ every deploy์ every channel์์ same way๋ก behaveํฉ๋๋ค.
- signalling layer๋ ship๋์ด live ์ํ์ ๋๋ค. SSAI consumer (MediaTailor)๋ designed๋์์ผ๋ฉฐ wired in๋ ์ค๋น๊ฐ ๋์ด ์์ต๋๋ค. wired in๋๋ฉด, every existing channel์ cue๋ ์ด๋ฏธ ์ด๋ฅผ ๊ธฐ๋ค๋ฆฌ๊ณ ์์ ๊ฒ์ ๋๋ค.
๊ธฐ์ ์คํ: AWS MediaLive ยท AWS Lambda ยท NestJS ยท MongoDB ยท TypeScript ยท Node 18 ยท SCTE-35 (Scte35TimeSignalSettings, Scte35SpliceInsertSettings) ยท AWS SDK v3

