SDK di trasmissione IVS: origini di immagini personalizzate | Streaming a bassa latenza - Amazon IVS

SDK di trasmissione IVS: origini di immagini personalizzate | Streaming a bassa latenza

Questa guida presuppone una certa familiarità con come configurare una sessione di trasmissione (Android, iOS) e come utilizzare l'API mixer.

Le sorgenti di input di immagini personalizzate consentono a un'applicazione di fornire il proprio input di immagini all'SDK di trasmissione, anziché limitarsi alle fotocamere preimpostate o alla condivisione dello schermo. Una sorgente di immagine personalizzata può essere semplice come una filigrana semitrasparente o una scena statica "torno subito" oppure può consentire all'app di eseguire ulteriori elaborazioni personalizzate come l'aggiunta di filtri di bellezza alla fotocamera.

È possibile avere più sorgenti di immagini personalizzate, come una filigrana e una fotocamera con filtri di bellezza. Quando si utilizza una sorgente di input di immagine personalizzata per il controllo personalizzato della fotocamera (ad esempio l'utilizzo di librerie di filtri estetici che richiedono l'accesso alla fotocamera), l'SDK di trasmissione non è più responsabile della gestione della fotocamera. Invece, l'applicazione è responsabile della corretta gestione del ciclo di vita della fotocamera. Consulta la documentazione ufficiale della piattaforma su come la tua applicazione dovrebbe gestire la fotocamera.

Android

Dopo aver creato una sessione di trasmissione, crea una sorgente di input di immagine:

SurfaceSource surfaceSource = broadcastSession.createImageInputSource();

Questo metodo restituisce un SurfaceSource, che è una sorgente immagine supportata da un Surface Android standard. Viene automaticamente collegato alla sessione di trasmissione, pertanto non è necessario utilizzare il metodo attachDevice(...) subito dopo. Tuttavia, il SurfaceSource deve essere legato a uno slot, operazione descritta più avanti di seguito. SurfaceSource può essere ridimensionato e ruotato. Puoi inoltre creare un ImagePreviewView per visualizzare un'anteprima del contenuto.

Per recuperare il Surface sottostante:

Surface surface = surfaceSource.getInputSurface();

Questo Surface può essere utilizzato come buffer di output per producer di immagini come Camera2, OpenGL ES e altre librerie. Il caso d'uso più semplice è disegnare direttamente una bitmap statica o un colore sulla tela di Surface. Tuttavia, molte librerie (come le librerie di filtri estetici) forniscono un metodo che consente a un'applicazione di specificare un Surface esterno per il rendering. È possibile utilizzare un metodo del genere per passare questo Surface alla libreria di filtri, il che consente alla libreria di emettere frame elaborati per lo streaming della sessione di trasmissione.

Infine, il SurfaceSource deve essere collegato a un Mixer.Slot da trasmettere in streaming dalla sessione di trasmissione:

broadcastSession.getMixer().bind(surfaceSource, "customSlot");

Il codice di esempio Android ha diversi esempi che utilizzano una sorgente di immagine personalizzata in diversi modi:

  • Viene aggiunta una filigrana semitrasparente in MixerActivity.

  • Un file MP4 viene eseguito in loop in MixerActivity.

  • La classe di utilità Camera Manager esegue la gestione personalizzata della fotocamera del dispositivo utilizzando il metodo Camera2 in CustomActivity, che applica un semplice filtro seppia. Questo esempio è particolarmente utile in quanto mostra come gestire la fotocamera e passare il SurfaceSource personalizzato della sessione di trasmissione alla richiesta di acquisizione della fotocamera. Se utilizzi altre librerie esterne, consulta la documentazione su come configurare la libreria per l'output su Surface Android fornito dalla sessione di trasmissione.

iOS

Dopo aver creato una sessione di trasmissione, crea una sorgente di input di immagine:

let customSource = broadcastSession.createImageSource(withName: "customSourceName")

Questo metodo restituisce un IVSCustomImageSource, che è una fonte di immagini che consente alla domanda di inviare CMSampleBuffers manualmente. Per i formati pixel supportati, consulta Riferimento all'SDK di trasmissione iOS; un collegamento alla versione più recente è presente nel manuale Note di rilascio di Amazon IVS per l'ultima versione dell'SDK di trasmissione. La sorgente non è collegata automaticamente alla sessione di trasmissione, quindi è necessario collegare la sorgente dell'immagine alla sessione e collegarla a uno slot prima che possa essere trasmessa in streaming:

broadcastSession.attach(customSource, toSlotWithName: "customSourceSlot", onComplete: nil)

Dopo che l'origine personalizzata è stata collegata e associata, l'applicazione può inviare CMSampleBuffers direttamente alla fonte personalizzata. È possibile scegliere di utilizzare la richiamata onComplete per iniziare a farlo.

I campioni inviati alla sorgente personalizzata verranno trasmessi in streaming nella sessione di trasmissione:

customSource.onSampleBuffer(sampleBuffer)

Per lo streaming di video, utilizzare questo metodo in una richiamata. Ad esempio, se si utilizza la fotocamera, ogni volta che viene ricevuto un nuovo buffer campione da un AVCaptureSession, l'applicazione può inoltrare il buffer campione alla sorgente di immagine personalizzata. Se lo desideri, l'applicazione può applicare ulteriori elaborazioni (come un filtro di bellezza) prima di inviare il campione alla sorgente di immagine personalizzata.

Per un'immagine statica, dopo il primo campione, l'applicazione deve inviare nuovamente il campione se l'associazione dello slot della sorgente di immagine personalizzata viene modificata o se la sorgente viene staccata e ricollegata alla sessione di trasmissione. Ad esempio, se si rimuove lo slot e lo si riaggiunge al mixer, è necessario inviare nuovamente il campione.

L'app di esempio iOS ha diversi esempi che utilizzano una sorgente di immagine personalizzata in diversi modi:

  • Viene aggiunta una filigrana semitrasparente in MixerViewController.

  • Un file MP4 viene eseguito in loop in MixerViewController.

  • Un'implementazione CIFilter con una fotocamera del dispositivo è stata aggiunta in CustomSourcesViewController. Ciò consente a un'applicazione di gestire una fotocamera del dispositivo indipendentemente dall'SDK Amazon IVS Broadcast. Usa AVCaptureSession per acquisire un'immagine dalla fotocamera del dispositivo, elabora l'immagine utilizzando un'implementazione CIFilter e invia CMSampleBuffers a customSource per lo streaming live.