Strutture dei flussi video Kinesis - Flusso di video Amazon Kinesis

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

Strutture dei flussi video Kinesis

È possibile utilizzare le seguenti strutture per fornire dati a un'istanza di un flusso video Kinesis.

StreamDefinition/StreamInfo

L'oggetto StreamDefinition nel livello C++ racchiude l'oggetto StreamInfo nel Platform Independent Code (PIC) e fornisce alcuni valori predefiniti nel costruttore.

Campi membri

Campo Tipo di dati Descrizione Valore predefinito
stream_name string Nome di flusso facoltativo. Consulta Limiti di Producer SDK per ulteriori informazioni sulla lunghezza del nome del flusso. Ogni flusso deve avere un nome univoco. Se non viene specificato alcun nome, ne verrà generato uno casualmente.
retention_period duration<uint64_t, ratio<3600>> Il periodo di conservazione del flusso in secondi. La specifica di 0 indica nessuna conservazione. 3600 (un'ora)
tags const map<string, string>* Una mappa di coppie chiave-valore contenente informazioni sugli utenti. Se il flusso dispone già un set di tag, i nuovi tag verranno aggiunti al set di tag esistente. Nessun tag
kms_key_id string L'ID della AWS KMS chiave da utilizzare per crittografare lo stream. Per ulteriori informazioni, consulta Protezione dei dati in Kinesis Video Streams. La chiave di KMS predefinita (aws/kinesis-video).
streaming_type Enumerazione STREAMING_TYPE L'unico valore supportato è STREAMING_TYPE_REALTIME.
content_type string Il formato del contenuto del flusso. La console Kinesis Video Streams può riprodurre contenuti video/h264 in questo formato. video/h264
max_latency duration<uint64_t, milli> La latenza massima del flusso in millisecondi. Il callback di utilizzo della latenza del flusso (se specificato) verrà richiamato se la durata del buffer supera questo intervallo di tempo. Un valore 0 indica che non verrà richiamato nessun callback di utilizzo della latenza del flusso. milliseconds::zero()
fragment_duration duration<uint64_t> La durata del frammento desiderata, in secondi. Tale valore viene utilizzato in combinazione con il valore key_frame_fragmentation. Se questo valore èfalse, Kinesis Video Streams genera frammenti su un fotogramma chiave allo scadere di tale periodo. Ad esempio, ciascun fotogramma del flusso audio Advanced Audio Coding (AAC) è un fotogramma chiave. Se viene specificato il valore key_frame_fragmentation = false, la frammentazione verrà effettuata su un fotogramma chiave in seguito a questa durata, generando frammenti di 2 secondi. 2
timecode_scale duration<uint64_t, milli> La dimensione del timecode MKV in millisecondi, che specifica la granularità dei timecode dei fotogrammi all'interno del cluster MKV. Il timecode del frammento MKV è sempre relativo all'inizio del cluster. MKV utilizza un valore a 16-bit con firma (0-32767) per rappresentare il timecode all'interno del cluster (frammento). Verifica che il codice temporale del frame possa essere rappresentato con la scala del codice di tempo specificata. Il valore di scala predefinito del timecode di 1 ms assicura che il fotogramma di maggiori dimensioni che può essere rappresentato sia pari a 32767 ms ~ = 32 secondi. Questo valore è superiore alla durata massima del frammento specificata in Quote di servizio Kinesis Video Streams, pari a 10 secondi. 1
key_frame_fragmentation bool Per scegliere se creare frammenti su un fotogramma chiave. Se true, l'SDK crea un inizio del frammento ogni volta che è presente un fotogramma chiave. Sefalse, Kinesis Video Streams attende fragment_duration almeno e produce un nuovo frammento sul fotogramma chiave successivo. true
frame_timecodes bool Per scegliere se utilizzare i timecode del fotogramma o generare timestamp tramite il callback dell'ora corrente. Molti codificatori non creano timestamp con i fotogrammi. Quindi, specificando false questo parametro, si assicura che i fotogrammi abbiano il timestamp quando vengono inseriti in Kinesis Video Streams. true
absolute_fragment_times bool Kinesis Video Streams utilizza MKV come meccanismo di packaging di base. La specifica MKV è rigorosa per quanto riguarda l'impostazione dei timecode del fotogramma come relativi all'inizio del cluster (frammento), ma i timecode del cluster possono essere assoluti o relativi all'ora di inizio del flusso. Se i timestamp sono relativi, la chiamata API del servizio PutMedia utilizza il timestamp di inizio facoltativo del flusso e modifica i timestamp del cluster. Il servizio archivia sempre i frammenti con i relativi timestamp assoluti. true
fragment_acks bool Se ricevere ACK (riconoscimenti) con frammenti a livello di applicazione. true, per indicare che l'SDK riceverà le ACK e agirà di conseguenza.
restart_on_error bool Per scegliere se riavviare in seguito a errori specifici. true, per indicare che l'SDK tenta di riavviare lo streaming in caso di errori.
recalculate_metrics bool Per scegliere se calcolare nuovamente i parametri. Ogni chiamata effettuata per recuperare i parametri è in grado di ricalcolarli per ottenere il valore "in esecuzione" più recente (ciò potrebbe avere un leggero impatto sulla CPU). Sui dispositivi layout componente/con potenza estremamente ridotta, potrebbe essere necessario configurare questa impostazione su false per risparmiare cicli della CPU. Altrimenti, non è consigliabile utilizzarlo false per questo valore. true
nal_adaptation_flags uint32_t

Specifica i flag di adattamento dell'unità Network Abstraction Layer (NALU). Se il bitstream dispone della codifica H.264, può essere elaborato come raw o inserito in pacchetti nelle NALU, in formato Annex-B o AVCC. La maggior parte dei produttori e consumatori di stream elementari (codificatori e decodificatori di lettura) utilizza il formato Annex-B perché presenta vantaggi, come il ripristino degli errori. I sistemi di livello superiore utilizzano il formato AVCC che è il formato di default per MPEG, HLS, DASH e così via. La funzione di riproduzione della console utilizza le estensioni di sorgente multimediali (MSE) del browser per decodificare e riprodurre i flussi in formato AVCC. Per H.264 (e per M-JPEG e H.265), nell'SDK sono presenti funzionalità di adattamento.

Molti flussi semplici sono nel formato seguente. In questo esempio, Ab è il codice di avvio Annex-B (001 o 0001).

Ab(Sps)Ab(Pps)Ab(I-frame)Ab(P/B-frame) Ab(P/B-frame)…. Ab(Sps)Ab(Pps)Ab(I-frame)Ab(P/B-frame) Ab(P/B-frame)

Nel caso di H.264, i dati privati del codec (CPD) rientrano nei parametri SPS (sequence parameters set) e PPS (picture parameters set) e possono essere adattati al formato AVCC. A meno che la pipeline multimediale non fornisca i CPD separatamente, l'applicazione è in grado di estrarli dal fotogramma Può farlo cercando il primo frame IDR (che dovrebbe contenere SPS e PPS), estrarre i due NALU (che lo sonoAb(Sps)Ab(Pps)) e impostarli nel CPD in. StreamDefinition

Per ulteriori informazioni, consulta Flag di adattamento del NAL.

L'impostazione predefinita consiste nell'adattare il formato Annex-B al formato AVCC per i dati dei fotogrammi e per i dati privati del codec.
frame_rate uint32_t La frequenza fotogrammi prevista. Tale valore viene utilizzato per calcolare meglio le esigenze di buffering. 25
avg_bandwidth_bps uint32_t La larghezza di banda media prevista del flusso. Tale valore viene utilizzato per calcolare meglio le esigenze di buffering. 4 * 1024 * 1024
buffer_duration duration<uint64_t> La durata del buffer del flusso in secondi. L'SDK mantiene i frame nell'archivio dei contenuti per un massimo dibuffer_duration, dopodiché i frame precedenti vengono eliminati man mano che la finestra avanza. Se il frame che viene eliminato non è stato inviato al backend, viene chiamato il callback del frame eliminato. Se la durata del buffer corrente è maggiore di max_latency, viene richiamato il callback di utilizzo della latenza del flusso. Alla ricezione dell'ACK relativa al frammento persistente, il buffer verrà tagliato in corrispondenza dell'inizio del frammento successivo per indicare che i contenuti sono stati resi persistenti in modo durevole nel cloud e che quindi non è più necessario archiviare i contenuti sul dispositivo locale. 120
replay_duration duration<uint64_t> La durata, in secondi, necessaria per riportare il lettore corrente all'indietro per riprodurlo durante un errore, se il riavvio è abilitato. Il rollback viene interrotto all'inizio del buffer (se ha appena avviato lo streaming o se viene visualizzata l'ACK persistente). Il rollback tenta di raggiungere un fotogramma chiave che indica l'inizio di un frammento. Se l'errore che causa il riavvio non è indicativo di un host morto (l'host è ancora attivo e contiene i dati del frame nei suoi buffer interni), il rollback si interrompe all'ultimo frame ACK ricevuto. e verrà spostato al fotogramma chiave successivo, poiché l'intero frammento è già memorizzato nella memoria dell'host. 40
connection_staleness duration<uint64_t> Il tempo, in secondi, dopo il quale viene chiamata la callback stream staleness se l'SDK non riceve l'ACK di buffering. Indica che i frame vengono inviati dal dispositivo, ma il backend non li riconosce. indicativo di una connessione interrotta nel passaggio intermedio o sul sistema di bilanciamento del carico. 30
codec_id string L'ID codec della traccia MKV. V_MPEG4/ISO/AVC
track_name string Il nome della traccia MKV. kinesis_video
codecPrivateData unsigned char* Il buffer dei dati privati del codec (CPD). Se sulla pipeline multimediale sono presenti informazioni sui CPD prima dell'inizio del flusso, sarà possibile impostarlo su StreamDefinition.codecPrivateData. I bit vengono copiati e il buffer può essere riutilizzato o liberato in seguito alla chiamata per la creazione del flusso. Tuttavia, se i dati non sono disponibili al momento della creazione dello stream, possono essere impostati in uno degli overload della funzione. KinesisVideoStream.start(cpd) null
codecPrivateDataDimensioni uint32_t La dimensione del buffer dei dati privati del codec. 0

ClientMetrics

L'ClientMetricsoggetto viene riempito chiamandogetKinesisVideoMetrics.

Campi membri

Campo Tipo di dati Descrizione
versione UINT32 La versione della struttura, definita nella macro CLIENT_METRICS_CURRENT_VERSION.
contentStoreSize UINT64 La dimensione totale dello store dei contenuti in byte. Si tratta del valore specificato in DeviceInfo.StorageInfo.storageSize.
contentStoreAvailableDimensioni UINT64 Dimensione di archiviazione attualmente disponibile in byte.
contentStoreAllocatedDimensioni UINT64 Dimensione attualmente allocata. La dimensione allocata e quella disponibile devono essere leggermente inferiori alla dimensione totale di storage, per via della contabilità interna e dell'implementazione dello store dei contenuti.
totalContentViewsDimensioni UINT64 La dimensione della memoria allocata per tutte le visualizzazioni dei contenuti per tutti i flussi. Questo valore non viene conteggiato nella dimensione dello spazio di archiviazione. Questa memoria viene allocata tramite la macro MEMALLOC, che è possibile sovrascrivere per fornire un allocatore personalizzato.
totalFrameRate UINT64 La frequenza fotogrammi totale osservata su tutti i flussi.
totalTransferRate UINT64 La velocità di streaming totale osservata in byte al secondo su tutti i flussi.

StreamMetrics

L'StreamMetricsoggetto viene riempito chiamandogetKinesisVideoMetrics.

Campi membri

Campo Tipo di dati Descrizione
versione UINT32 La versione della struttura, definita nella macro STREAM_METRICS_CURRENT_VERSION.
currentViewDuration UINT64 La durata dei fotogrammi accumulati. Nel caso di rete veloce, questa durata è pari a zero o alla durata del frame (mentre il frame viene trasmesso). Se la durata diventa più lunga di quella max_latency specificata inStreamDefinition, viene chiamata la richiamata della latenza del flusso, se specificata. La durata viene specificata in unità di 100ns, ovvero l'unità di tempo predefinita del livello PIC.
overallViewDuration UINT64 La durata di visualizzazione generale. Se lo stream è configurato senza ACK o persistenza, questo valore aumenta man mano che i frame vengono inseriti nel flusso video Kinesis e diventa uguale a quello buffer_duration in. StreamDefinition Quando gli ACK sono abilitati e viene ricevuto l'ACK persistente, il buffer viene ridotto al keyframe successivo. Questo perché il timestamp ACK indica l'inizio dell'intero frammento. La durata viene specificata in unità di 100 ns, ovvero l'unità di tempo predefinita del livello PIC.
currentViewSize UINT64 La dimensione in byte del buffer corrente.
overallViewSize UINT64 La dimensione totale della visualizzazione in byte.
currentFrameRate UINT64 La frequenza fotogramma osservata del flusso corrente.
currentTransferRate UINT64 La velocità di trasferimento osservata in byte al secondo del flusso corrente.