Estruturas de transmissão de vídeo do Kinesis - Amazon Kinesis Video Streams

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

Estruturas de transmissão de vídeo do Kinesis

Você pode usar as estruturas a seguir para fornecer dados a uma instância de um stream de vídeo do Kinesis.

StreamDefinition/StreamInfo

O objeto StreamDefinition na camada C++ encapsula o objeto StreamInfo no Platform Independent Code (PIC - Código independente de plataforma) e fornece alguns valores padrão no construtor.

Campos de membros

Campo Tipo de dados Descrição Valor padrão
stream_name string Nome de stream opcional. Para obter mais informações sobre o tamanho do nome do streaming, consulte Limites do SDK do produtor. Cada stream deve ter um nome exclusivo. Se nenhum nome for especificado, ele será gerado aleatoriamente.
retention_period duration<uint64_t, ratio<3600>> O período de retenção do streaming em segundos. Especificar 0 indica que não há retenção. 3.600 (uma hora)
tags const map<string, string>* Um mapa de pares de chave-valor que contêm as informações do usuário. Se o streaming já tiver um conjunto de tags, as novas tags serão acrescentadas ao conjunto de tags existente. Sem tags
kms_key_id string O ID da AWS KMS chave a ser usado para criptografar o fluxo. Para ter mais informações, consulte Proteção de dados no Kinesis Video Streams. O nome da chave KMS padrão (aws/kinesis-video.)
tipo de streaming Enumeração STREAMING_TYPE O único valor aceito é STREAMING_TYPE_REALTIME.
tipo de conteúdo string O formato do conteúdo do stream. O console do Kinesis Video Streams pode reproduzir conteúdo video/h264 no formato. video/h264
latência máxima duration<uint64_t, milli> A latência máxima em milissegundos para o stream. O retorno de chamada de pressão de latência de streaming (se especificado) será chamado quando a duração do buffer exceder esse intervalo. A especificação de 0 indica que nenhum retorno de pressão de latência de stream será chamado. milliseconds::zero()
fragment_duration duration<uint64_t> A duração do fragmento desejada, em segundos. Esse valor é usado juntamente com o valor de key_frame_fragmentation. Se esse valor forfalse, o Kinesis Video Streams gerará fragmentos em um quadro-chave após o término dessa duração. Por exemplo, um streaming de áudio Advanced Audio Coding (AAC - Codificação de áudio avançada) tem cada quadro como um quadro chave. A especificação de key_frame_fragmentation = false fará com que a fragmentação aconteça em um quadro chave após o término desse período, resultando em fragmentos de dois segundos. 2
escala de código de hora duration<uint64_t, milli> A escala de timecode de MKV em milissegundos, que especifica a granularidade dos timecodes dos quadros no cluster do MKV. O código de hora do quadro do MKV sempre é relativo ao início do cluster. O MKV usa um valor de 16 bits (0 a 32767) assinado para representar o timecode dentro do cluster (fragmento). Verifique se o timecode do quadro pode ser representado com a escala de timecode fornecida. O valor padrão da escala do timecode de 1 ms garante que o maior quadro que pode ser representado seja 32767 ms ~= 32 segundos. Isso está acima da duração máxima de fragmentos especificada em Cotas do serviço Kinesis Video Streams, que é 10 segundos. 1
key_frame_fragmentation bool Se fragmentos devem ser produzidos em um quadro chave. Se true, o SDK produzirá um início de fragmento sempre que houver um quadro chave. Sefalse, o Kinesis Video Streams espera pelo menos e produz um novo fragmento fragment_duration no quadro-chave que o segue. true
frame_timecodes bool Determina se usará códigos de hora de quadros ou gerará carimbos de hora usando o retorno de hora atual. Muitos codificadores não produzem time stamps com os quadros. Portanto, especificar false esse parâmetro garante que os quadros tenham um registro de data e hora à medida que são inseridos no Kinesis Video Streams. true
absolute_fragment_times bool O Kinesis Video Streams usa o MKV como mecanismo de empacotamento subjacente. A especificação do MKV é rigorosa quanto aos timecodes de quadros serem relativos ao início do cluster (fragmento). No entanto, os timecodes do cluster podem ser absolutos ou relativos em relação à hora de início do streaming. Se os time stamps forem relativos, a chamada de API do serviço PutMedia usará o time stamp opcional de início do streaming e ajustará os time stamps do cluster. O serviço sempre armazena os fragmentos com seus carimbos de data e hora absolutos. true
fragment_acks bool Se deve receber ACKs (confirmações) de fragmentos de nível de aplicativo. true, o que significa que o SDK receberá os ACKs e agirá adequadamente.
restart_on_error bool Determina se será reiniciado em erros específicos. true, o que significa que o SDK tentará reiniciar o streaming se ocorrerem erros.
recalculate_metrics bool Se as métricas devem ser recalculadas. Cada chamada para recuperar as métricas pode recalculá-las para obter o valor "em execução" mais recente, o que pode criar um pequeno impacto na CPU. Talvez seja necessário definir isso como false em dispositivos de ocupação de espaço/energia extremamente baixos para poupar os ciclos da CPU. Caso contrário, não recomendamos o false uso desse valor. true
nal_adaptation_flags uint32_t

Especifica os sinalizadores de adaptação da Network Abstraction Layer unit (NALU, unidade da Camada de abstração de rede). Se o bitstream for codificado em H.264, ele poderá ser processado como bruto ou empacotado em NALUs. Esses são em formato Annex-B ou AVCC. A maioria dos produtores e consumidores de streams elementares (codificadores e decodificadores de leitura) usa o formato Annex-B porque ele tem vantagens, como recuperação de erros. Os sistemas de nível superior usam o formato AVCC, que é o formato padrão para MPEG, HLS, DASH e assim por diante. A reprodução do console usa MSE (media source extensions - extensões de fonte de mídia) do navegador para decodificar e reproduzir o streaming que usa o formato AVCC. Para H.264 (e M-JPEG e H.265), o SDK fornece recursos de adaptação.

Muitos streams elementares estão no seguinte formato. Neste exemplo, Ab é o código de início do Annex-B (001 ou 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)

No caso do H.264, os dados privados do codec (CPD) estão nos parâmetros SPS (conjunto de parâmetros de sequência) e PPS (conjunto de parâmetros de imagem) e podem ser adaptados ao formato AVCC. A menos que o pipeline de mídia ofereça o CPD separadamente, o aplicativo pode extrair o CPD do quadro. Ele pode fazer isso procurando o primeiro quadro IDR (que deve conter o SPS e o PPS), extrair os dois NALUs (que estãoAb(Sps)Ab(Pps)) e configurá-lo no CPD. StreamDefinition

Para ter mais informações, consulte Sinalizadores de adaptação do NAL.

O padrão é adaptar o formato Annex-B ao formato AVCC para os dados do quadro e para os dados privados do codec.
frame_rate uint32_t A taxa de quadros esperada. Esse valor é usado para calcular melhor as necessidades de armazenamento em buffer. 25
avg_bandwidth_bps uint32_t A largura de banda média esperada para o stream. Esse valor é usado para calcular melhor as necessidades de armazenamento em buffer. 4 * 1024 * 1024
buffer_duration duration<uint64_t> A duração do buffer de streaming, em segundos. O SDK mantém os quadros no armazenamento de conteúdo por atébuffer_duration, após o qual os quadros anteriores são eliminados à medida que a janela avança. Se o quadro que está sendo eliminado não tiver sido enviado para o back-end, o retorno de chamada do quadro descartado será chamado. Se a duração atual do buffer for maior que max_latency, o retorno de chamada de pressão de latência do streaming será chamado. O buffer é ajustado para o início do próximo fragmento quando a ACK do fragmento persistido é recebida. Isso indica que o conteúdo foi persistido de forma durável na nuvem, de forma que o armazenamento do conteúdo no dispositivo local não é mais necessário. 120
replay_duration duration<uint64_t> A duração, em segundos, para reverter o leitor atual para reproduzir durante um erro, se a reinicialização estiver ativada. A reversão é interrompida no início do buffer (caso o streaming tenha acabado de iniciar ou a ACK persistida tiver ocorrido). A reversão tenta atingir um quadro chave que indica o início de um fragmento. Se o erro “causando a reinicialização” não for indicativo de um host inativo (o host ainda está ativo e contém os dados do quadro em seus buffers internos), a reversão é interrompida no último quadro ACK recebido. Em seguida, ele avança para o próximo quadro chave, pois o fragmento inteiro já está armazenado na memória do host. 40
connection_staleness duration<uint64_t> O tempo, em segundos, após o qual o retorno de chamada de inatividade do stream é chamado se o SDK não receber o ACK de buffer. Isso indica que os quadros estão sendo enviados do dispositivo, mas o back-end não os reconhece. Essa condição indica uma conexão rompida no salto intermediário ou no load balancer. 30
codec_id string O ID codec da trilha do MKV. V_MPEG4/ISO/AVC
track_name string O nome da trilha do MKV. kinesis_video
codecPrivateData unsigned char* O buffer de codec private data (CPD - dados privados do codec). Se o pipeline de mídia tiver as informações sobre o CPD antes do início do stream, ele poderá ser definido em StreamDefinition.codecPrivateData. Os bits são copiados, e o buffer pode ser reutilizado ou liberado depois que a chamada criar o streaming. No entanto, se os dados não estiverem disponíveis quando o fluxo for criado, eles poderão ser definidos em uma das sobrecargas da KinesisVideoStream.start(cpd) função. null
codecPrivateDataTamanho uint32_t O tamanho do buffer dos dados privados do codec. 0

ClientMetrics

O ClientMetricsobjeto é preenchido por meio de uma chamadagetKinesisVideoMetrics.

Campos de membros

Campo Tipo de dados Descrição
version UINT32 A versão da estrutura, definida na macro CLIENT_METRICS_CURRENT_VERSION.
contentStoreSize UINT64 O tamanho total em bytes do armazenamento de conteúdo. Esse é o valor especificado em DeviceInfo.StorageInfo.storageSize.
contentStoreAvailableTamanho UINT64 Tamanho atual do armazenamento disponível em bytes.
contentStoreAllocatedTamanho UINT64 Tamanho atual alocado. Os tamanhos alocados mais os tamanhos disponíveis devem ser um pouco menores que o tamanho total do armazenamento, devido à contabilidade interna e à implementação do armazenamento de conteúdo.
totalContentViewsTamanho UINT64 O tamanho da memória alocada para todas as visualizações de conteúdo de todos os streams. Isso não é contabilizado em relação ao tamanho do armazenamento. Essa memória é alocada usando a macro MEMALLOC, que pode ser substituída para fornecer um alocador personalizado.
totalFrameRate UINT64 A taxa de quadros total observada em todos os streams.
totalTransferRate UINT64 A taxa de stream total observada em bytes por segundo em todos os streams.

StreamMetrics

O StreamMetricsobjeto é preenchido por meio de uma chamadagetKinesisVideoMetrics.

Campos de membros

Campo Tipo de dados Descrição
version UINT32 A versão da estrutura, definida na macro STREAM_METRICS_CURRENT_VERSION.
currentViewDuration UINT64 A duração dos quadros acumulados. No caso de rede rápida, essa duração é zero ou a duração do quadro (à medida que o quadro está sendo transmitido). Se a duração for maior do que a max_latency especificada noStreamDefinition, o retorno de chamada de latência do stream será chamado se for especificado. A duração é especificado em unidades de 100ns, que é a unidade de tempo padrão para a camada PIC.
overallViewDuration UINT64 A duração geral da visualização. Se o stream for configurado sem ACKs ou persistência, esse valor aumentará à medida que os quadros forem inseridos no stream de vídeo do Kinesis e se tornarão iguais aos buffer_duration do. StreamDefinition Quando os ACKs são habilitados e o ACK persistente é recebido, o buffer é reduzido para o próximo quadro-chave. Isso ocorre porque o timestamp ACK indica o início de todo o fragmento. A duração é especificada em unidades de 100 ns, que é a unidade de tempo padrão para a camada PIC.
currentViewSize UINT64 O tamanho em bytes do buffer atual.
overallViewSize UINT64 O tamanho geral da visualização em bytes.
currentFrameRate UINT64 A taxa de quadros observada para o stream atual.
currentTransferRate UINT64 A taxa de transferência observada em bytes por segundo para o stream atual.