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á.
PutMedia
Use isso API para enviar dados de mídia para um stream de vídeo do Kinesis.
nota
Você deve primeiro ligar GetDataEndpoint
API para o para obter um endpoint. Em seguida, envie as PutMedia
solicitações para esse endpoint usando o parâmetro --endpoint-url.
Na solicitação, você usa HTTP os cabeçalhos para fornecer informações de parâmetros, por exemplo, nome do stream, carimbo de data/hora e se o valor do timestamp é absoluto ou relativo a quando o produtor começou a gravar. Você usa o corpo da solicitação para enviar os dados de mídia. O Kinesis Video Streams suporta somente o formato de contêiner MKV Matroska () para enviar dados de mídia usando esse formato. API
Você tem as seguintes opções para enviar dados usando issoAPI:
-
Envie dados de mídia em tempo real: por exemplo, uma câmera de segurança pode enviar quadros em tempo real à medida que os gera. Essa abordagem minimiza a latência entre a gravação de vídeo e os dados enviados pela rede. Isso é chamado de produtor contínuo. Nesse caso, um aplicativo consumidor pode ler o stream em tempo real ou quando necessário.
-
Envie dados de mídia off-line (em lotes): por exemplo, uma câmera corporal pode gravar vídeo por horas e armazená-lo no dispositivo. Posteriormente, quando você conecta a câmera à porta de encaixe, a câmera pode iniciar uma
PutMedia
sessão para enviar dados para um stream de vídeo do Kinesis. Nesse cenário, a latência não é um problema.
Ao usar issoAPI, observe as seguintes considerações:
-
Você precisa especificar o
streamName
ou ostreamARN
, mas não os dois. -
Para poder reproduzir a mídia no console ou viaHLS, a faixa 1 de cada fragmento deve conter vídeo codificado em h.264, o codecid nos metadados do fragmento deve ser “V_MPEG/ISO/AVC“e os metadados do fragmento devem incluir dados privados formatados do codec h.264. AVCC Opcionalmente, a faixa 2 de cada fragmento deve conter áudio AAC codificado, o codecid nos metadados do fragmento deve ser “A_ AAC “e os metadados do fragmento devem incluir dados privados do codec. AAC
-
Talvez você ache mais fácil usar uma única
PutMedia
sessão de longa duração e enviar um grande número de fragmentos de dados de mídia na carga útil. Para cada fragmento recebido, o Kinesis Video Streams envia uma ou mais confirmações. Possíveis considerações de rede podem fazer com que você não receba todas essas confirmações à medida que elas são geradas. -
Você pode escolher várias
PutMedia
sessões consecutivas, cada uma com menos fragmentos, para garantir que você receba todas as confirmações do serviço em tempo real.
nota
Se você enviar dados para o mesmo stream em várias PutMedia
sessões simultâneas, os fragmentos de mídia serão intercalados no stream. Você deve se certificar de que isso esteja OK no cenário do seu aplicativo.
Os seguintes limites se aplicam ao usar o PutMedia
API:
-
Um cliente pode ligar
PutMedia
até cinco vezes por segundo por stream. -
Um cliente pode enviar até cinco fragmentos por segundo por stream.
-
O Kinesis Video Streams lê dados de mídia a uma taxa de até 12,5 MB/segundo, ou 100 Mbps durante uma sessão.
PutMedia
Observe as seguintes restrições. Nesses casos, o Kinesis Video Streams envia a confirmação de erro na resposta.
-
Fragmentos com códigos de tempo que se estendem por mais do que o limite máximo permitido e que contêm mais de 50 MB de dados não são permitidos.
-
Fragmentos contendo mais de três faixas não são permitidos. Cada quadro em cada fragmento deve ter o mesmo número de faixa de uma das faixas definidas no cabeçalho do fragmento. Além disso, cada fragmento deve conter pelo menos um quadro para cada faixa definida no cabeçalho do fragmento.
-
Cada fragmento deve conter pelo menos um quadro para cada faixa definida nos metadados do fragmento.
-
O carimbo de data/hora do quadro mais antigo em um fragmento deve ser posterior ao carimbo de data/hora do quadro mais recente no fragmento anterior.
-
Um MKV fluxo contendo mais de um MKV segmento ou contendo MKV elementos não permitidos (como
track*
) também resulta na confirmação de erro.
O Kinesis Video Streams armazena cada fragmento de entrada e metadados relacionados no que é chamado de “fragmento”. Os metadados do fragmento incluem o seguinte:
-
Os MKV cabeçalhos fornecidos no início da solicitação
PutMedia
-
Os seguintes metadados específicos do Kinesis Video Streams para o fragmento:
-
server_timestamp
- Registro de data e hora em que o Kinesis Video Streams começou a receber o fragmento. -
producer_timestamp
- Timestamp, quando o produtor começou a gravar o fragmento. O Kinesis Video Streams usa três informações recebidas na solicitação para calcular esse valor.-
O valor do timecode do fragmento recebido no corpo da solicitação junto com o fragmento.
-
Dois cabeçalhos de solicitação:
producerStartTimestamp
(quando o produtor começou a gravar) efragmentTimeCodeType
(se o timecode do fragmento na carga é absoluto ou relativo).
Em seguida, o Kinesis Video Streams
producer_timestamp
calcula o fragmento da seguinte forma:Se
fragmentTimeCodeType
for relativo, entãoproducer_timestamp
=producerStartTimeStamp
+ código de tempo do fragmentoSe
fragmentTimeCodeType
for absoluto, entãoproducer_timestamp
= timecode do fragmento (convertido em milissegundos) -
-
Número de fragmento exclusivo atribuído pelo Kinesis Video Streams.
-
nota
Quando você faz a GetMedia
solicitação, o Kinesis Video Streams retorna um stream desses trechos. O cliente pode processar os metadados conforme necessário.
nota
Essa operação só está disponível para o AWS SDK for Java. Ele não é suportado em AWS SDKs outros idiomas.
nota
O Kinesis Video Streams não analisa e valida os dados privados do codec durante a ingestão e o arquivamento por meio do. PutMedia API KVSextrai e valida as informações necessárias dos dados privados do codec para MPEG -TS e MP4 empacotamento de fragmentos ao consumir o fluxo por meio do. HLS APIs
nota
Se um erro for gerado após invocar uma API mídia do Kinesis Video Streams, além do código de status e HTTP do corpo da resposta, ele incluirá as seguintes informações:
-
x-amz-ErrorType
HTTPcabeçalho — contém um tipo de erro mais específico, além do que o código de HTTP status fornece. -
x-amz-RequestId
HTTPcabeçalho — se você quiser relatar um problema AWS, a equipe de suporte poderá diagnosticar melhor o problema se receber o ID da solicitação.
Tanto o código de HTTP status quanto o ErrorType cabeçalho podem ser utilizados para tomar decisões programáticas sobre se os erros podem ser repetidos e sob quais condições, além de fornecer informações sobre quais ações o programador cliente pode precisar realizar para tentar novamente com sucesso.
Para obter mais informações, consulte a seção Erros na parte inferior deste tópico, bem como Erros comuns.
Sintaxe da Solicitação
POST /putMedia HTTP/1.1
x-amzn-stream-name: StreamName
x-amzn-stream-arn: StreamARN
x-amzn-fragment-timecode-type: FragmentTimecodeType
x-amzn-producer-start-timestamp: ProducerStartTimestamp
Payload
URIParâmetros de solicitação
A solicitação usa os seguintes URI parâmetros.
- FragmentTimecodeType
-
Você passa esse valor como
x-amzn-fragment-timecode-type
HTTP cabeçalho.Indica se os timecodes nos fragmentos (carga útil, corpo da HTTP solicitação) são absolutos ou relativos a.
producerStartTimestamp
O Kinesis Video Streams usa essas informações paraproducer_timestamp
calcular o fragmento recebido na solicitação, conforme descrito na visão geral. APIValores Válidos:
ABSOLUTE | RELATIVE
Obrigatório: Sim
- ProducerStartTimestamp
-
Você passa esse valor como
x-amzn-producer-start-timestamp
HTTP cabeçalho.Esse é o timestamp do produtor no qual o produtor começou a gravar a mídia (não o timestamp dos fragmentos específicos na solicitação).
- StreamARN
-
Você passa esse valor como
x-amzn-stream-arn
HTTP cabeçalho.Nome de recurso da Amazon (ARN) do stream de vídeo do Kinesis em que você deseja escrever o conteúdo de mídia. Se você não especificar o
streamARN
, deverá especificarstreamName
o.Restrições de comprimento: tamanho mínimo de 1. Tamanho máximo de 1.024.
Padrão:
arn:[a-z\d-]+:kinesisvideo:[a-z0-9-]+:[0-9]+:[a-z]+/[a-zA-Z0-9_.-]+/[0-9]+
- StreamName
-
Você passa esse valor como
x-amzn-stream-name
HTTP cabeçalho.Nome do stream de vídeo do Kinesis em que você deseja gravar o conteúdo de mídia. Se você não especificar o
streamName
, deverá especificarstreamARN
o.Restrições de tamanho: tamanho mínimo 1. Tamanho máximo de 256.
Padrão:
[a-zA-Z0-9_.-]+
Corpo da Solicitação
A solicitação aceita os dados binários a seguir.
- Payload
-
O conteúdo de mídia a ser gravado no stream de vídeo do Kinesis. Na implementação atual, o Kinesis Video Streams suporta somente o formato de contêiner MKV Matroska () com um único segmento. MKV Um segmento pode conter um ou mais clusters.
nota
Cada MKV cluster é mapeado para um fragmento de stream de vídeo do Kinesis. Qualquer que seja a duração do cluster que você escolher, se tornará a duração do fragmento.
Sintaxe da resposta
HTTP/1.1 200
Payload
Elementos de Resposta
Se a ação for bem-sucedida, o serviço retornará uma resposta HTTP de 200.
A resposta retorna o seguinte como HTTP corpo.
- Payload
-
Depois que o Kinesis Video Streams
PutMedia
recebe com sucesso uma solicitação, o serviço valida os cabeçalhos da solicitação. O serviço então começa a ler a carga e primeiro envia uma resposta de HTTP 200.Em seguida, o serviço retorna um fluxo contendo uma série de JSON objetos (
Acknowledgement
objetos) separados por novas linhas. As confirmações são recebidas na mesma conexão na qual os dados de mídia são enviados. Pode haver muitas confirmações para umaPutMedia
solicitação. Cada umAcknowledgement
consiste nos seguintes pares de valores-chave:-
AckEventType
- Tipo de evento que a confirmação representa.-
Armazenamento em buffer: o Kinesis Video Streams começou a receber o fragmento. O Kinesis Video Streams envia a primeira confirmação de buffering quando o primeiro byte do fragmento de dados é recebido.
-
Recebido: o Kinesis Video Streams recebeu o fragmento inteiro. Se você não configurou o stream para manter os dados, o produtor pode parar de armazenar o fragmento em buffer ao receber essa confirmação.
-
Persistente: o Kinesis Video Streams persistiu no fragmento (por exemplo, no Amazon S3). Você receberá essa confirmação se tiver configurado o fluxo para persistir os dados. Depois de receber essa confirmação, o produtor pode parar de armazenar o fragmento em buffer.
-
Erro: o Kinesis Video Streams encontrou um erro ao processar o fragmento. Você pode revisar o código de erro e determinar o próximo curso de ação.
-
Inativo: a
PutMedia
sessão está em andamento. No entanto, o Kinesis Video Streams não está recebendo dados no momento. O Kinesis Video Streams envia essa confirmação periodicamente por até 30 segundos após os últimos dados recebidos. Se nenhum dado for recebido em 30 segundos, o Kinesis Video Streams fechará a solicitação.nota
Esse reconhecimento pode ajudar o produtor a determinar se a
PutMedia
conexão está ativa, mesmo que não esteja enviando dados.
-
-
FragmentTimecode
- Fragmente o timecode para o qual a confirmação é enviada.O elemento pode estar ausente se
AckEventType
estiver inativo. -
FragmentNumber
- Número do fragmento gerado pelo Kinesis Video Streams para o qual a confirmação é enviada. -
ErrorId
eErrorCode
- SeAckEventType
forError
, esse campo fornecerá o código de erro correspondente. A seguir está a lista de erros IDs e seus códigos de erro e mensagens de erro correspondentes:-
4000 - STREAM _ READ _ ERROR - Erro ao ler o fluxo de dados.
-
4001 - MAX _ _ FRAGMENT SIZE _ REACHED - O tamanho do fragmento é maior que o limite máximo, 50 MB, permitido.
-
4002 - MAX _ _ FRAGMENT DURATION _ REACHED - A duração do fragmento é maior que o limite máximo permitido.
-
4003 - MAX _ _ CONNECTION DURATION _ REACHED - A duração da conexão é maior que o limite máximo permitido.
-
4004 - FRAGMENT _ _ TIMECODE _ LESSER THAN _ PREVIOUS - O timecode do fragmento é menor que o timecode anterior (em uma
PutMedia
chamada, você não pode enviar fragmentos fora de ordem). -
4005 - MORE _ THAN _ ALLOWED _ TRACKS _ FOUND - Mais de uma faixa é encontrada emMKV. (obsoleto)
-
4006 - INVALID _ MKV _ DATA - Falha ao analisar o fluxo de entrada como formato válidoMKV.
-
4007 - INVALID _ PRODUCER _ TIMESTAMP - Carimbo de data/hora do produtor inválido.
-
4008 - STREAM _ NOT _ ACTIVE - O fluxo não existe mais (excluído).
-
4009 - FRAGMENT _ _ METADATA LIMIT _ REACHED - Limite de metadados do fragmento atingido. Consulte a seção Limites do guia do desenvolvedor.
-
4010 - TRACK _ NUMBER _ MISMATCH - O número da faixa em um MKV quadro não coincide com as faixas no MKV cabeçalho.
-
4011 - FRAMES _ MISSING _ FOR _ TRACK - O fragmento não continha nenhum quadro para pelo menos uma das faixas no MKV cabeçalho.
-
4012 - INVALID _ FRAGMENT _ METADATA - O nome dos metadados do fragmento não pode começar com a string.
AWS_
-
4500 - KMS _ _ KEY ACCESS _ DENIED - O acesso à KMS chave especificada do stream é negado.
-
4501 - KMS _ KEY _ DISABLED - A KMS chave especificada do stream está desativada.
-
4502 - KMS _ _ KEY VALIDATION _ ERROR - A KMS chave especificada do stream falhou na validação.
-
4503 - KMS _ KEY _ UNAVAILABLE - A KMS chave especificada do stream não está disponível.
-
4504 - KMS _ _ KEY INVALID _ USAGE - Uso inválido da chave especificada do fluxo. KMS
-
4505 - KMS _ _ KEY INVALID _ STATE - A KMS chave especificada do fluxo está em um estado inválido.
-
4506 - KMS _ _ KEY NOT _ FOUND - A KMS chave especificada do fluxo não foi encontrada.
-
5000 - INTERNAL _ ERROR - Erro de serviço interno.
-
5001 - ARCHIVAL _ ERROR - O Kinesis Video Streams falhou em persistir fragmentos no armazenamento de dados.
-
nota
O produtor, ao enviar a carga útil de uma
PutMedia
solicitação de longa duração, deve ler a resposta para receber confirmações. Um produtor pode receber partes de confirmações ao mesmo tempo, devido ao buffer em um servidor proxy intermediário. Um produtor que deseja receber confirmações em tempo hábil pode enviar menos fragmentos em cada solicitação.PutMedia
-
Erros
Para obter informações sobre os erros comuns retornados pelas ações, consulte Erros comuns.
- ClientLimitExceededException
-
O Kinesis Video Streams limitou a solicitação porque você excedeu o limite permitido de chamadas de clientes. Tente fazer a ligação mais tarde.
HTTPCódigo de status: 400
- ConnectionLimitExceededException
-
O Kinesis Video Streams limitou a solicitação porque você excedeu o limite permitido de conexões de clientes.
HTTPCódigo de status: 400
- InvalidArgumentException
-
O valor desse parâmetro de entrada é inválido.
HTTPCódigo de status: 400
- InvalidEndpointException
-
O chamador usou o endpoint errado para gravar dados em um stream. Ao receber essa exceção, o usuário deve chamar
GetDataEndpoint
comAPIName
set toPUT_MEDIA
e usar o endpoint from response para invocar a próximaPutMedia
chamada.HTTPCódigo de status: 400
- NotAuthorizedException
-
O chamador não está autorizado a realizar uma operação em determinado stream ou o token expirou.
HTTPCódigo de status: 401
- ResourceNotFoundException
-
Código de status: 404, O fluxo com o nome fornecido não existe.
HTTPCódigo de status: 404
Exemplos
Formato de reconhecimento
O formato da confirmação é o seguinte:
{ Acknowledgement : { "EventType": enum "FragmentTimecode": Long, "FragmentNumber": Long, "ErrorId" : String } }
Consulte também
Para obter mais informações sobre como usar isso API em um idioma específico AWS SDKs, consulte o seguinte: