OBS에서 WHIP을 사용하여 Amazon IVS 실시간 스트림으로 브로드캐스팅하기 (Broadcasting to an Amazon IVS Real-Time Stream with WHIP from OBS)
Tags: aws, amazonivs, webrtc, livestreaming
Published: 2024-04-24 08:48:31

> _이 블로그 포스트는 [Todd Sharp](https://dev.to/recursivecodes)(Amazon IVS Developer Evangelist)이 포스팅한 [Broadcasting to an Amazon IVS Real-Time Stream with WHIP from OBS](https://dev.to/aws/broadcasting-to-an-amazon-ivs-real-time-stream-with-whip-from-obs-p67)의 한국어 번역입니다._
> _(This is the Korean translation of Amazon IVS Developer Evangelist, [Todd Sharp](https://dev.to/recursivecodes)'s [Broadcasting to an Amazon IVS Real-Time Stream with WHIP from OBS](https://dev.to/aws/broadcasting-to-an-amazon-ivs-real-time-stream-with-whip-from-obs-p67).)_

최근까지 Amazon IVS(Amazon Interactive Video Service) 실시간 Stage로 브로드캐스팅하려면 개발자가 IVS Broadcast SDK(웹 및 모바일) 중 하나를 활용해야 했습니다. 내부적으로, SDK는 사용자의 연결을 초기화하고 사용자의 비디오를 Stage로 브로드캐스팅하는데 필요한 모든 로직을 추상화하고 있습니다. SDK를 이용하면 개발자는 애플리케이션에 실시간 스트리밍 통합을 더 쉽게 할 수 하지만, 궁극적으로는 해당 Stage에 브로드캐스팅하는 최종 사용자 측면에서는 웹 및 모바일 기반 클라이언트 소프트웨어 사용으로만 선택권이 제한되게 됩니다. 이제 드디어, WHIP 호환 인코더 지원이 추가됨으로써 미디어를 실시간 Stage로 게시할 수 있게 되었습니다.

## WHIP??

프로토콜 이름으로는 좀 이상하긴한데, 받아들일께요 🤷🏻‍♂️. 맞아요, 저는 이름 짓는 일을 담당하지 않아서 좋습니다. WHIP(WebRTC-HTTP Ingest Protocol)은 HTTP `POST` 요청을 사용하여 SDP(Session Description Protocol) offer와 answer의 일회성 교환 프로세스를 표준화하는 IETF 프로토콜입니다.

> 💡 **SDP에 대해 잘 모르시나요?** [WebRTC for the Curious](https://webrtcforthecurious.com/docs/02-signaling/#what-is-the-session-description-protocol-sdp)에서 'What is the Session Description Protocol (SDP)?'를 확인해보세요.

이름에서 짐작할 수 있듯이, WHIP 프로토콜은 **Ingest**(즉, 'Broadcasting' 또는 'Publish')만을 나타냅니다. Egress(즉, 'Viewing' 또는 'Subscribing')를 처리하는 WHEP라는 별도의 프로토콜이 있습니다. 불면증으로 고생하고 있다면 🥱, [WHIP](https://datatracker.ietf.org/doc/draft-ietf-wish-whip/) 또는 [WHEP](https://datatracker.ietf.org/doc/draft-ietf-wish-whep/)에 대한 IETF 초안을 전부 읽어보세요.

## OBS를 사용하여 Amazon IVS Stage로 브로드캐스팅하기

OBS는 화면 전환, 오버레이, 간편한 화면 공유, 오디오 믹싱 등과 같은 고급 제작 기능으로 인해 널리 사용되고 있습니다. OBS에서 Amazon IVS Stage로 브로드캐스팅하려면 사용자는 OBS 버전 30 이상과 Stage 참여자 토큰이 필요합니다. 토큰의 만료 시간은 일반적으로 12시간(기본값)이지만 최대 14일까지 연장할 수 있습니다.

사용해 보려면, AWS SDK, AWS CLI, 또는 Amazon IVS 관리 콘솔을 통해 Stage 참가자 토큰을 생성하고 OBS의 'Settings' 대화 상자로 이동합니다.

'Stream' 탭에서 'Service'로 'WHIP'을 선택하고, 'Server'에 `https://global.whip.live-video.net`을 입력한 다음, 유효한 Stage 참가자 토큰을 'Bearer Token'에 붙여 넣습니다.

![OBS Stream tab](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/3uxyu4hwknhgxx57s1io.png)

참고: OBS는 WHIP 브로드캐스팅에 Opus 오디오 인코딩이 필요하다고 경고할 것입니다. 이는 예상되었던 것이므로, 계속하려면 'Yes'를 선택하세요.

![Opus warning](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/3jgjs3tz6owevw6z38ia.png)

다음으로, 'Output' 탭으로 이동하여 'Output Mode'가 'Advanced'으로 설정되어 있는지 확인하세요.

![Advanced output mode](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/37oh5uiyhfxx0ul9p06k.png)

최상의 성능을 위해 'Bitrate'를 `2500 Kbps` 이하로 설정하고, 'Keyframe Interval'은 `1s` 또는 `2s`를 사용하고, 'CPU Usage Preset'은 `ultrafast`로, 'Tune'을 `zerolatency`로 설정하세요.

![Output streaming settings](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/4xtn0z4pvhpo8ali3qhk.png)

이제 'Settings' 대화 상자를 종료하고 'Start Streaming'을 클릭하면 Stage로 브로드캐스팅을 시작하게 됩니다.

![Streaming with OBS](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/4dydq4khkd9vr2ictb1k.png)

좀 더 자세한 내용은 [OBS and WHIP Support](https://docs.aws.amazon.com/ivs/latest/RealTimeUserGuide/obs-whip-support.html) 문서를 참조하세요.

## GStreamer를 사용하여 Amazon IVS Stage로 브로드캐스팅하기

여러분이 오픈 소스 멀티미디어 프레임워크인 [GStreamer](https://gstreamer.freedesktop.org/)의 팬이라면, GStreamer에서도 역시 WHIP 지원을 이용할 수 있습니다. 다음은 웹캠과 마이크를 Stage에 게시하는 데 사용할 수 있는 간단한 파이프라인입니다. 이 파이프라인은 MacOS에서 테스트되었지만, 지원되는 모든 OS에 적용될 수 있습니다. 참가자 토큰을 가져와서 `IVS_STAGE_TOKEN`에 설정해야 합니다. (또는 토큰을 복사하여 붙여넣어도 됩니다)

```bash
gst-launch-1.0 \
  avfvideosrc device-index=0 \
  ! videoconvert \
  ! x264enc tune=zerolatency bitrate=2500 speed-preset=ultrafast \
  ! rtph264pay \
  ! 'application/x-rtp,media=video,encoding-name=H264,payload=97,clock-rate=90000,width=1280,height=720,framerate=30/1' \
  ! whip.sink_0 autoaudiosrc wave=4 \
  ! audioconvert \
  ! opusenc \
  ! rtpopuspay \
  ! 'application/x-rtp,media=audio,encoding-name=OPUS,payload=96,clock-rate=48000,encoding-params=(string)2' \
  ! whip.sink_1 \
  whipsink \
  name=whip \
  auth-token=$IVS_STAGE_TOKEN \
  whip-endpoint=https://global.whip.live-video.net/
```

## 요약

이번 포스팅에서는, WHIP 호환 인코더를 통해 Amazon IVS 실시간 Stage에 퍼블리싱하는 방법에 대해 알아보았습니다. 이러한 지원은 Amazon IVS를 통한 실시간 스트리밍에 대한 많은 가능성을 보여주고 있습니다. 자세한 내용은 [OBS and WHIP Support](https://docs.aws.amazon.com/ivs/latest/RealTimeUserGuide/obs-whip-support.html)의 Amazon IVS 실시간 사용자 가이드 페이지를 참조하세요. 사용 사례에 대한 질문이나 아이디어가 있으면 [Todd Sharp](https://dev.to/recursivecodes)'s [Broadcasting to an Amazon IVS Real-Time Stream with WHIP from OBS](https://dev.to/aws/broadcasting-to-an-amazon-ivs-real-time-stream-with-whip-from-obs-p67)에 댓글을 남겨주세요!