외부 화면 송출 (Screen Casting To TV)
iOS 환경에서 실시간 TV 스트림에 대체 광고를 삽입할 때, Flower SDK는 내부적으로 Proxy Server를 구동하여 원본 manifest(m3u8/mpd)를 실시간으로 가공합니다. 이로 인해 changeChannelUrl()이 반환하는 URL은 원본 CDN 주소가 아니라 앱 내부 Proxy Server를 가리키는 LoopBack(루프백) 주소입니다.
LoopBack 주소는 해당 URL을 생성한 기기 내부에서만 접근 가능합니다. 이 URL을 다른 화면(예: AirPlay, Chromecast, Smart TV 등 외부 TV)으로 그대로 전달하면 외부 화면에서 주소를 해석할 수 없어 재생이 실패합니다.
이러한 외부 화면 송출(Screen Casting) 시나리오에서는 FlowerAdsManager.getScreenCastingUrl()을 사용하여 외부 화면에서도 재생 가능한 URL을 받아 사용해야 합니다.
FlowerAdsManager.getScreenCastingUrl
외부 화면 송출에 사용 가능한 스트림 URL을 반환합니다.
| 매개변수 | 유형 | 설명 |
|---|---|---|
| (없음) |
| 반환값 | 유형 | 설명 |
|---|---|---|
| screenCastingUrl | String | 외부 화면에서 재생 가능한 URL. 송출용 URL을 생성할 수 없는 경우 원본 스트림 URL을 반환합니다. changeChannelUrl() 호출 이전에 호출된 경우에는 빈 문자열("")을 반환합니다. |
사용 조건
getScreenCastingUrl()은 반드시changeChannelUrl()을 호출한 이후에 호출해야 합니다. 그 이전에 호출하면 Proxy Server가 아직 초기화되지 않았기 때문에 빈 문자열("")이 반환됩니다.- 내부 오류가 발생한 경우 SDK는 원본 스트림 URL을 그대로 반환하므로 호출 자체는 항상 안전하지만, 이 경우 외부 화면에서는 광고 대체가 적용되지 않습니다.
예시
private func playLinearTv() {
// TODO GUIDE: change original LinearTV stream url by adView.adsManager.changeChannelUrl
let changedChannelUrl = flowerAdView.adsManager.changeChannelUrl(
videoUrl: "https://XXX",
adTagUrl: "https://ad_request",
channelId: "100",
extraParams: ["custom-param": "custom-param-value"],
mediaPlayerHook: mediaPlayerHook,
adTagHeaders: ["custom-ad-header": "custom-ad-header-value"],
channelStreamHeaders: ["custom-stream-header": "custom-stream-header-value"],
prerollAdTagUrl: nil
)
// TODO GUIDE: 로컬 플레이어에는 LoopBack URL을 그대로 사용
player.replaceCurrentItem(with: AVPlayerItem(url: URL(string: changedChannelUrl)!))
player.play()
}
// TODO GUIDE: 외부 화면(예: TV)으로 송출할 때는 getScreenCastingUrl을 사용
func startCastingToTv() {
// 반드시 changeChannelUrl() 이후에 호출해야 합니다.
// 오류 시 원본 스트림 URL을 반환하므로 호출 자체는 항상 안전합니다.
let castingUrl = flowerAdView.adsManager.getScreenCastingUrl()
castSession.loadMedia(url: castingUrl)
}
사용 시점
| 상황 | 사용할 URL |
|---|---|
| 앱 내부 로컬 재생 | changeChannelUrl()이 반환한 URL |
| 외부 화면으로 송출 (AirPlay 수신기, Chromecast, Smart TV 등) | getScreenCastingUrl()이 반환한 URL |