Utilizzo dei metadati di streaming con i Kinesis Video Streams - Amazon Kinesis Video Streams

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à.

Utilizzo dei metadati di streaming con i Kinesis Video Streams

Puoi utilizzare Amazon Kinesis Video Streams Producer SDK per incorporare i metadati a livello di singolo frammento in un flusso video Kinesis. I metadati in Kinesis Video Streams sono una coppia chiave-valore modificabile. Puoi utilizzarli per descrivere il contenuto del frammento, incorporare le letture dei sensori associati che devono essere trasferite insieme al frammento effettivo oppure soddisfare altre esigenze particolari. I metadati sono disponibili come parte delle operazioni delle API GetMedia o GetMediaForFragmentList. Sono memorizzati con i frammenti per tutta la durata del periodo di conservazione del flusso. Le tue applicazioni in uso possono leggere, elaborare e agire in base ai metadati usando la Libreria parser del flusso video Kinesis.

Esistono due modalità in cui i metadati possono essere incorporati con i frammenti in un flusso:

  • Non persistente: Puoi applicare i metadati ad hoc ai frammenti in un flusso, in base ai criteri specifici dell'azienda in essere. Un esempio è una fotocamera intelligente che rileva il movimento e aggiunge i metadati ai frammenti corrispondenti che contengono il movimento prima di inviare i frammenti al flusso video Kinesis. Puoi applicare i metadati al frammento nel formato seguente: Motion = true.

  • Persistente: Puoi applicare i metadati ai frammenti successivi e consecutivi in un flusso sulla base di una necessità costante. Un esempio è una fotocamera intelligente che invia le coordinate correnti di latitudine e longitudine associate a tutti i frammenti inviate al flusso video Kinesis. Puoi applicare i metadati a tutti i frammenti nel formato seguente: Lat = 47.608013N , Long = -122.335167W.

Puoi applicare i metadati in entrambe queste modalità allo stesso frammento contemporaneamente in base alle esigenze dell'applicazione. I metadati incorporati potrebbero includere oggetti rilevati, attività tracciate, coordinate GPS o altri dati personalizzati che vuoi associare ai frammenti nel flusso. I metadati sono codificati come coppie di stringhe chiave-valore.

Aggiunta di metadati a un flusso di video Kinesis

I metadati che aggiungi a un flusso video Kinesis sono modellati come tag MKV che vengono implementati come coppie chiave-valore.

I metadati possono essere transitori, ad esempio per contrassegnare un evento all'interno del flusso, o persistenti, ad esempio per identificare frammenti in cui si verifica un determinato evento. Un elemento metadati persistente rimane e viene applicata a ciascun frammento consecutivo, fino a che non viene annullato.

Nota

Gli elementi metadati aggiunti utilizzando le Producer Library differiscono dalle API di tag a livello di flusso implementato con TagStream, UntagStream e ListTagsForStream.

API streaming di metadati

Puoi utilizzare le seguenti operazioni in Producer SDK per implementare lo streaming dei metadati.

PIC

PUBLIC_API STATUS putKinesisVideoFragmentMetadata(STREAM_HANDLE streamHandle, PCHAR name, PCHAR value, BOOL persistent);

C++ Producer SDK

/** * Appends a "tag" or metadata - a key/value string pair into the stream. */ bool putFragmentMetadata(const std::string& name, const std::string& value, bool persistent = true);

Java Producer SDK

Con Java Producer SDK, puoi aggiungere i metadati a MediaSource tramite MediaSourceSink.onCodecPrivateData:

void onFragmentMetadata(final @Nonnull String metadataName, final @Nonnull String metadataValue, final boolean persistent) throws KinesisVideoException;

Metadati persistenti e non persistenti

Per i metadati non persistenti, puoi aggiungere più elementi metadati con lo stesso nome. Producer SDK raccoglie gli elementi metadati nella coda finché non vengono anteposti al successivo frammento. La coda dei metadati viene cancellata quando gli elementi metadati vengono applicati al flusso. Per ripetere i metadati, chiama di nuovo putKinesisVideoFragmentMetadata o putFragmentMetadata.

Per i metadati persistenti, Producer SDK raccoglie gli elementi metadati nella coda come per i metadati non persistenti. Tuttavia, gli elementi metadati non vengono rimossi dalla coda quando vengono anteposti al successivo frammento.

La chiamata putKinesisVideoFragmentMetadata o putFragmentMetadata con persistent impostato su true ha il seguente comportamento:

  • La chiamata dell'API inserisce l'elemento metadati nella coda. I metadati vengono aggiunti come tag MKV per ogni frammento mentre l'elemento è in coda.

  • Se si chiama l'API con lo stesso nome e un valore diverso come elemento metadati aggiunto in precedenza, l'elemento viene sovrascritto.

  • Se si chiama l'API con un valore vuoto, l'elemento metadati viene rimosso (annullato) dalla coda dei metadati.

Consumo dei metadati incorporati in un flusso di video Kinesis

Per consumare i metadati in un flusso video Kinesis, usa un'implementazione diMkvTagProcessor:

public interface MkvTagProcessor { default void process(MkvTag mkvTag, Optional<FragmentMetadata> currentFragmentMetadata) { throw new NotImplementedException("Default FragmentMetadataVisitor.MkvTagProcessor"); } default void clear() { throw new NotImplementedException("Default FragmentMetadataVisitor.MkvTagProcessor"); } } }

Questa interfaccia si trova nella classe FragmentMetadataVisitatore nella Libreria parser del flusso video Kinesis.

La classe FragmentMetadataVisitor contiene un'implementazione di MkvTagProcessor:

public static final class BasicMkvTagProcessor implements FragmentMetadataVisitor.MkvTagProcessor { @Getter private List<MkvTag> tags = new ArrayList<>(); @Override public void process(MkvTag mkvTag, Optional<FragmentMetadata> currentFragmentMetadata) { tags.add(mkvTag); } @Override public void clear() { tags.clear(); } }

La classe KinesisVideoRendererExample contiene un esempio di come usare un BasicMkvTagProcessor. Nel seguente esempio, un BasicMkvTagProcessor viene aggiunto a MediaProcessingArguments di un'applicazione:

if (renderFragmentMetadata) { getMediaProcessingArguments = KinesisVideoRendererExample.GetMediaProcessingArguments.create( Optional.of(new FragmentMetadataVisitor.BasicMkvTagProcessor()));

Il metodo BasicMkvTagProcessor.process viene chiamato quando arrivano i metadati del frammento. Puoi recuperare i metadati accumulati con GetTags. Per recuperare un singolo elemento metadati, chiama prima clear per cancellare i metadati raccolti e poi recupera nuovamente gli elementi metadati.

Limitazioni dello streaming di metadati

Le seguenti limitazioni si applicano all'aggiunta dello streaming di metadati a un flusso di video Kinesis:

  • Puoi anteporre a un frammento fino a 10 elementi metadati.

  • La lunghezza del nome dei metadati del frammento può essere al massimo di 128 byte.

  • La lunghezza del valore dei metadati del frammento può essere al massimo di 256 byte.

  • Il nome name dei metadati del frammento non può iniziare con la stringa "AWS". Se un elemento metadati viene aggiunto, il metodo putFragmentMetadata nel PIC restituisce un errore STATUS_INVALID_METADATA_NAME (codice errore 0x52000077). La tua applicazione può ignorare l'errore (il PIC non aggiunge l'elemento metadati) oppure correggere l'errore.