데모 - Amazon Interactive Video Service

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

데모

시나리오: Alice(A)는 Amazon IVS 채널에서 브로드캐스트하고 있는데 Bob(B)을 게스트로 스테이지에 초대하려고 합니다. (실제 브로드캐스트에서 A와 B는 Alice와 Bob의 이미지일 것입니다.)

데모 시나리오: Alice(A)는 Amazon IVS 채널에서 브로드캐스트하고 있는데 Bob(B)을 게스트로 스테이지에 초대하려고 합니다.

1. 스테이지 생성

다음은 Amazon IVS Stage API를 사용한 CreateStage 요청입니다.

POST /CreateStage HTTP/1.1 Content-type: application/json { "name": "string", "participantTokenConfigurations": [ { "userId": "9529828585", "attributes": {"displayName": "Alice"} }, { "userId": "4875935192", "attributes": {"displayName": "Bob"} } ] }

여기에서와 같이 스테이지를 만들 때 참가자 토큰을 미리 만들 수 있습니다. CreateParticipantToken을 호출하여 기존 스테이지에 대한 토큰을 생성할 수도 있습니다. 각 참가자에 대해 사용자 지정 userIdattributes 세트를 전달할 수 있습니다. (중요: attributesuserId 요청 필드는 모든 스테이지 참가자에게 노출됩니다. 개인 식별 정보, 기밀 정보 또는 민감한 정보에 사용해서는 안 됩니다.)

위 요청에 대한 네트워크 응답:

HTTP/1.1 200 Content-type: application/json { "stage": { "arn": "arn:aws:ivs:us-west-2:123456789012:stage/abcdABCDefgh", "name": "alice-stage" }, "participantTokens": [ { "participantId": "e94e506e-f7...", "token": "eyJhbGci0iJ...", "userId": "9529828585", "attributes": {"displayName" : "Alice"}, "expirationTime": number }, { "participantId": "b5c6a79a-6e...", "token": "eyJhbGci0iJ...", "userId": "4875935192", "attributes": {"displayName" : "Bob"}, "expirationTime": number } ] }

2. 참가자 토큰 배포

이제 클라이언트는 Alice(A)와 Bob(B)을 위한 토큰을 갖게 되었습니다. 기본적으로 토큰은 1시간 동안 유효합니다. 또는 스테이지를 만들 때 사용자 지정 duration을 전달할 수 있습니다. 토큰은 스테이지 참가에 사용할 수 있습니다.

서버에서 각 클라이언트로 토큰을 배포하는 방법(예: WebSocket 채널을 통해). 이 기능은 제공하지 않습니다.

서버에서 각 클라이언트로 토큰을 배포하는 방법(예: WebSocket 채널을 통해)이 필요합니다. 이 기능은 제공하지 않습니다.

3. 스테이지 참가

참가자는 Android 또는 iOS Amazon IVS 브로드캐스트 SDK를 통해 스테이지에 참가할 수 있습니다. 각 참가자의 비디오 품질을 구성할 수 있습니다. 여기서는 Alice가 먼저 스테이지에 참가하는 것을 보여줍니다.

아키텍처 개요:

참가자는 Android 또는 iOS Amazon 브로드캐스트 SDK를 통해 스테이지에 참가할 수 있습니다. 여기서는 Alice가 먼저 스테이지에 참가하는 것을 보여줍니다.

다음은 스테이지에 참가하기 위한 Android 코드 샘플입니다. 아래 코드 조각은 Alice의 디바이스에서 실행됩니다. join() 호출에서 Alice가 스테이지에 참가합니다. 위 그림은 이 코드 실행의 결과를 보여줍니다. Alice가 스테이지에 참가하고 (1단계에서 시작한 채널로 브로드캐스트하는 것 외에도) 스테이지에 이를 게시하고 있습니다.

// Create streams with the front camera and first microphone. var deviceDiscovery = DeviceDiscovery(context) var devices : List<Device> = deviceDiscovery.listLocalDevices() var publishStreams = ArrayList<LocalStageStream>() // Configure video quality if desired var videoConfiguration = StageVideoConfiguration() // Create front camera stream var frontCamera = devices.find { it.descriptor.type == Device.Descriptor.DeviceType.Camera && it.descriptor.position == Device.Descriptor.Position.FRONT } var cameraStream = ImageLocalStageStream(frontCamera, videoConfiguration) publishStreams.add(cameraStream) // Create first microphone stream var microphone = devices.find { it.descriptor.type == Device.Descriptor.DeviceType.Microphone } var microphoneStream = AudioLocalStageStream(microphone) publishStreams.add(microphoneStream) // A basic Stage.Strategy implementation that indicates the user always wants to publish and subscribe to other participants. // Provides the front camera and first microphone as publish streams. override fun shouldPublishFromParticipant(stage: Stage, participantInfo: ParticipantInfo) : Boolean { return true } override fun shouldSubscribeToParticipant(stage: Stage, participantInfo: ParticipantInfo) : Stage.SubscribeType { return Stage.SubscribeType.AUDIO_VIDEO } override fun stageStreamsToPublishForParticipant(stage: Stage, participantInfo: ParticipantInfo): List<LocalStageStream> { return publishStreams } // Create Stage using the strategy and join var stage = Stage(context, token, strategy) try { stage.join() } catch (exception: BroadcastException) { // handle join exception }

4. 스테이지 브로드캐스트

클라이언트 측 구성

스테이지 브로드캐스트: 클라이언트 측 구성.

다음은 스테이지를 브로드캐스트하기 위한 Android 코드 샘플입니다.

var broadcastSession = BroadcastSession(context, broadcastListener, configuration, null) // StageRenderer interface method to be notified when remote streams are available override fun onStreamsAdded(stage: Stage, participantInfo: ParticipantInfo, streams: List<StageStream>) { var id = participantInfo.participantId // Create mixer slot for remote participant var slot = BroadcastConfiguration.Mixer.Slot.with { s -> s.name = id // Set other properties as desired ... s } broadcastSession.mixer.addSlot(slot) // Attach remote stream devices, bind to mixer slot streams.forEach { stream -> broadcastSession.attachDevice(stream.getDevice()) broadcastSession.mixer.bind(stream.getDevice(), id) } } // Start broadcasting try { broadcastSession.start(IVS_RTMPS_URL, IVS_STREAM_KEY) } catch (exception: BroadcastException) { // handle exception }

Android 및 iOS Amazon IVS 브로드캐스트 SDK에는 참가자의 상태(예: onStreamsAddedonStreamsRemoved)에 따라 트리거되는 콜백이 있어 동적 UI 빌드를 간소화할 수 있습니다. 이는 코드 샘플의 첫 번째 부분에 나와 있습니다. Bob의 비디오와 오디오를 사용할 수 있게 되면 Alice는 onStreamsAdded 콜백을 통해 알림을 받습니다.

이후 Alice는 Bob의 비디오와 오디오를 믹서에 추가하고, 채널의 더 많은 대상을 위해 RTMP 브로드캐스트에 포함시킬 수 있습니다. 이는 코드 샘플의 나머지 부분에 나와 있습니다.

이제 Alice는 Amazon IVS Android 브로드캐스트 SDK를 통해 여러 시청자에게 브로드캐스트하고 있습니다. 구조적으로 보면 다음과 같습니다.

스테이지 브로드캐스트: 클라이언트 측 구성. Alice는 여러 시청자에게 브로드캐스트하고 있습니다.

서버 측 구성

비교를 위해 서버 측 구성의 작동 방식은 다음과 같습니다. (자세한 내용은 IVS 실시간 사용 설명서의 서버 측 구성을 참조하세요.)

스테이지 브로드캐스트: 서버 측 구성.