우리는 Low-Latency Streaming 을 선택했고 그 중 Timed MetaData를 눈 여겨 보았다.

이처럼 segment를 보내는 과정에 metadata를 주입하여 broadcast 하는 송출자와
player를 통해 방송을 보는 수신자가 동일한 타이밍에 데이터를 보내고 받을 수 있다.
이를 통해 구현할 수 있는게 다양한데
일단 우리 서비스는 현재 상품 소개, 공지사항, 쿠폰 , 투표 등을 제공 할 계획이고 데모버전에 추가해 두었다.
구현 방식은 다음과 같다.
초기에는 클라이언트에서 백엔드를 거치지 않고 바로 metadata를 보냈었다.
주의할 점은 송신할 때 metadata는 꼭 JSON 타입으로 보내야 한다는 것!
const { IVSClient, PutMetadataCommand } = require('@aws-sdk/client-ivs');
const client = new IVSClient({
region: 'ap-northeast-2',
credentials: {
accessKeyId: 'AWS_ACCESS_KEY',
secretAccessKey: 'AWS_SECRET_KEY',
},
});
const sendMetadata = async () => {
const command = new PutMetadataCommand({
channelArn: '채널 arn',
metadata: 'Hello, IVS!',
});
await client.send(command);
};
sendMetadata();
이런식으로 구현했었는데 이는 보안적으로 (AWS 자격 증명을 넣기 때문에) 좋지 않기 때문에
백엔드를 거치도록 수정한 기억이 있다.
const sendMetadata = async payload => {
const params = {
ivsArn:채널 arn,
metadata: payload,
};
await client.post(api경로);
};
이렇게 수정을 진행했다. 결국엔 쉽게 말해서 sdk를 사용하여 channelArn에 metadata를 보내기만하면된다.

Amazon IVS -> 짧은 지연 시간 -> 채널
에 생성한 aws에서 정한 나의 채널 이름이다.
이후 실습 해보는 게시글에서 자세한 설정과 구현 과정을 작성해보겠다..!
다시 돌아와서 timed-meta-data를 사용하면? 송출자와 수신자가 동일한 타이밍에 동일한 데이터에 노출될 수 있다는 점 !!
player.addEventListener(PlayerEventType.TEXT_METADATA_CUE, (cue) => {
const data = JSON.parse(cue.text);
if (data.type === "product") {
showProductOverlay(data);
}
});
이런식으로 player에서는 eventListener 형식으로 metaData를 수신할 수 있다.

이러한 주의사항이 존재한다.
다음과 같은 이유로 AWS IVS가 좋다고 말씀드렸다.(사실 AWS 인프라 사용하고싶어서 ㅎㅎ..)

사실 AWS의 서비스는 조금 비싸다..ㅋㅋ(그런데 막상 aws 상담받아보면 또 깎아주신다.) 그래서 사용해보고싶어도 못해보는 경우가 많은데
이렇게 aws ivs를 사용해 개발해 볼 수 있어 감사하다. 다음 포스팅부터는 본격적으로 개발 과정을 포스팅해보겠다.