Demo - Amazon Interactive Video Service

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

Demo

Scenario: Alice (A) sta trasmettendo sul suo canale Amazon IVS e vuole invitare Bob (B) sul palco come ospite. (In una trasmissione reale, A e B sarebbero immagini di Alice e Bob.)

Scenario dimostrativo: Alice (A) sta trasmettendo sul suo canale Amazon IVS e vuole invitare Bob (B) sul palco come ospite.

1. Creazione di uno stage

Ecco una richiesta CreateStage che utilizza l'API di fase Amazon IVS:

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

Puoi pre-creare i token di partecipazione quando crei uno stage, come viene fatto qui. Puoi anche creare token per uno stage esistente, chiamando CreateParticipantToken. Per ogni partecipante, puoi fornire un userId personalizzato e un set di attributes. (Importante: i campi obbligatori attributes e userId sono mostrati a tutti i partecipanti della fase. Non devono essere utilizzati per l'identificazione personale o di informazioni riservate o sensibili).

Ecco la risposta di rete alla richiesta precedente:

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. Distribuzione dei token di partecipazione

Il client ora ha un token per Alice (A) e Bob (B). Per impostazione predefinita, i token sono validi per 1 ora; facoltativamente puoi aggiungere un duration personalizzato quando crei lo stage. I token possono essere usati per accedere a uno stage.

Come distribuire i token dal server a ciascun client (ad esempio, tramite un canale WebSocket). Questa funzionalità non è disponibile.

Avrai bisogno di un modo per distribuire i token dal server a ciascun client (ad esempio, tramite un canale WebSocket). Questa funzionalità non è disponibile.

3. Accesso allo stage

I partecipanti possono accedere allo stage tramite l'SDK di trasmissione Amazon IVS su Android o iOS. Puoi configurare la qualità video di ogni partecipante. Qui mostriamo Alice che accede per prima allo stage.

Ecco una panoramica dell'architettura:

I partecipanti possono accedere allo stage tramite l'SDK di trasmissione Amazon su Android o iOS. Qui mostriamo Alice che accede per prima allo stage.

Ed ecco un esempio di codice Android per accedere allo stage. Il frammento di codice riportato di seguito verrebbe eseguito sul dispositivo di Alice. Nella chiamata join(), Alice accede allo stage. La figura sopra mostra il risultato di questa esecuzione del codice: Alice ha effettuato l'accesso allo stage e sta pubblicando (oltre a trasmettere sul suo canale, cosa che ha iniziato a fare nel passaggio 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. Trasmissione della fase

Composizione lato client

Trasmissione della fase: composizione lato client.

Ecco un esempio di codice Android per trasmettere lo stage:

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 }

Gli SDK di trasmissione Amazon IVS per Android e iOS hanno callback attivati dallo stato dei partecipanti (ad esempio onStreamsAdded e onStreamsRemoved), per semplificare la creazione di un'interfaccia utente dinamica. Questo è mostrato nella prima parte dell'esempio di codice: quando il video e l'audio di Bob sono disponibili, Alice riceve una notifica tramite un callback onStreamsAdded.

Alice può quindi aggiungere il video e l'audio di Bob al mixer da includere nella trasmissione RTMP per il pubblico più ampio del suo canale. Questo è mostrato nel resto dell'esempio di codice.

Ora Alice trasmette a più spettatori tramite l'SDK di trasmissione di Amazon IVS per Android. Ecco come si presenta dal punto di vista dell'architettura:

Trasmissione della fase: composizione lato client. Alice trasmette a più spettatori.

Composizione lato server

Per fare un confronto, ecco come funziona la composizione lato server. Per ulteriori informazioni, consulta Composizione lato server nella Guida per l'utente dello streaming in tempo reale di IVS.

Trasmissione della fase: composizione lato server.