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 di flussi video Kinesis
È possibile utilizzare le seguenti strutture per fornire dati su 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 dei membri
Campo | Tipo di dati | Descrizione | Valore predefinito |
---|---|---|---|
stream_name | string |
Nome di flusso facoltativo. Consulta Limiti dell'SDK producer 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 chiave AWS KMS da utilizzare per crittografare il flusso. Per ulteriori informazioni, consulta la pagina Protezione dei dati nei 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 è in grado di riprodurre i contenuti nell'SDK divideo/h264 . |
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 dei frammenti su un fotogramma chiave al termine di questa durata. 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). Di conseguenza, occorre prestare attenzione per assicurarsi che il timecode del fotogramma possa essere rappresentato con la dimensione del timecode 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 Limiti per 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 aspetta almenofragment_duration 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 specificandofalse per questo parametro assicura che i fotogrammi dispongano di un timestamp quando vengono inseriti in Kinesis Video Streams. |
true |
absolute_fragment_times | bool |
Kinesis Video Streams utilizza MKV come meccanismo di creazione di pacchetti sottostante. 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 |
Per scegliere se ricevere o meno ACK (conferme) per il frammento 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. Negli altri casi, non è consigliato impostare questo valore su false . |
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 producer/consumatori di flussi semplici (codificatori/decodificatori di lettura) utilizza il formato Annex-B, poiché presenta alcuni vantaggi, come il recupero dagli 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,
I dati privati del codec (CPD), nel caso della codifica H.264, sono impostati sui parametri SPS e PPS 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 cercando il primo fotogramma IDR (che dovrebbe contenere i parametri SPS/PPS), estraendo le due NALU (che sono Per ulteriori informazioni, consulta la pagina 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 conserva i fotogrammi nello store dei contenuti per un massimo di buffer_duration , dopodiché i fotogrammi meno recenti verranno eliminati mentre la finestra procede in avanti. Se il fotogramma eliminato non è stato inviato al back-end, verrà richiamato il relativo callback. 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, per spostare all'indietro il lettore corrente per la riproduzione quando si verifica 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 (ovvero, l'host è ancora vivo e contiene i dati sul fotogramma nei buffer interni), il rollback viene interrotto sull'ultimo fotogramma dell'ACK di ricezione e verrà spostato al fotogramma chiave successivo, poiché l'intero frammento è già memorizzato nella memoria dell'host. | 40 |
connection_staleness | duration<uint64_t> |
L'intervallo di tempo, in secondi, dopo il quale verrà richiamato il callback di obsolescenza del flusso, se l'SDK non riceve l'ACK di buffering. Ciò vuol dire che è in corso l'invio dei fotogrammi al dispositivo, ma che il back-end 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. Se, tuttavia, i dati non sono disponibili al momento della creazione del flusso, il buffer può essere impostato in uno dei sovraccarichi della funzione KinesisVideoStream.start(cpd) . |
null |
codecPrivateDataDimensioni | uint32_t |
La dimensione del buffer dei dati privati del codec. | 0 |
ClientMetrics
LaClientMetricsl'oggetto viene compilato richiamandogetKinesisVideoMetrics
.
Campi dei 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 |
La dimensione di storage attualmente disponibile in byte. |
contentStoreAllocatedDimensioni | UINT64 |
La 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. Non viene conteggiata nella dimensione di storage. 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
LaStreamMetricsl'oggetto viene compilato richiamandogetKinesisVideoMetrics
.
Campi dei 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. Nei casi con configurazione rapida della rete, questa durata è pari a 0 o alla durata del fotogramma (durante la trasmissione del fotogramma). Se la durata supera il valore max_latency specificato in StreamDefinition , il callback di latenza del flusso viene richiamato se è stato specificato. 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 il flusso viene configurato senza ACK o persistenza, questo valore aumenta man mano che i fotogrammi vengono inseriti nel flusso video di Kinesis e diventerà uguale al valore inbuffer_duration nellaStreamDefinition . Se le ACK sono abilitate e l'ACK persistente viene ricevuta, il buffer viene tagliato sul fotogramma chiave successivo, dal momento che il timestamp dell'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. |