Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.
PutMedia
Utilisez-le API pour envoyer des données multimédia vers un flux vidéo Kinesis.
Note
Vous devez d'abord appeler le GetDataEndpoint
API pour obtenir un point de terminaison. Envoyez ensuite les PutMedia
demandes à ce point de terminaison à l'aide du paramètre --endpoint-url.
Dans la demande, vous utilisez HTTP les en-têtes pour fournir des informations sur les paramètres, par exemple le nom du flux, l'horodatage et si la valeur de l'horodatage est absolue ou relative à la date à laquelle le producteur a commencé à enregistrer. Vous utilisez le corps de la demande pour envoyer les données multimédia. Kinesis Video Streams prend uniquement en charge le format de conteneur Matroska MKV () pour l'envoi de données multimédia à l'aide de ce format. API
Vous disposez des options suivantes pour envoyer des données de cette manière API :
-
Envoyez des données multimédia en temps réel : par exemple, une caméra de sécurité peut envoyer des images en temps réel au fur et à mesure qu'elle les génère. Cette approche minimise le temps de latence entre l'enregistrement vidéo et les données envoyées sur le fil. C'est ce qu'on appelle un producteur continu. Dans ce cas, une application grand public peut lire le flux en temps réel ou en cas de besoin.
-
Envoyer des données multimédia hors ligne (par lots) : par exemple, une caméra corporelle peut enregistrer des vidéos pendant des heures et les stocker sur l'appareil. Plus tard, lorsque vous connectez la caméra au port d'accueil, elle peut démarrer une
PutMedia
session pour envoyer des données vers un flux vidéo Kinesis. Dans ce scénario, la latence n'est pas un problème.
Lorsque vous l'utilisezAPI, tenez compte des considérations suivantes :
-
Vous devez spécifier
streamName
oustreamARN
, mais pas les deux. -
Pour pouvoir lire le contenu multimédia sur console ou viaHLS, la piste 1 de chaque fragment doit contenir une vidéo encodée en h.264, le code code dans les métadonnées du fragment doit être « V_MPEG/ISO/AVC» et les métadonnées du fragment doivent inclure des données privées du codec h.264 AVCC formatées. Facultativement, la piste 2 de chaque fragment doit contenir du son AAC codé, le code code dans les métadonnées du fragment doit être « A_ AAC » et les métadonnées du fragment doivent inclure les données privées du AAC codec.
-
Vous trouverez peut-être plus facile d'utiliser une seule
PutMedia
session de longue durée et d'envoyer un grand nombre de fragments de données multimédia dans la charge utile. Pour chaque fragment reçu, Kinesis Video Streams envoie un ou plusieurs accusés de réception. Des considérations liées au réseau peuvent vous empêcher de recevoir tous ces accusés de réception au fur et à mesure qu'ils sont générés. -
Vous pouvez choisir plusieurs
PutMedia
sessions consécutives, chacune contenant moins de fragments, afin de vous assurer de recevoir tous les accusés de réception du service en temps réel.
Note
Si vous envoyez des données au même flux lors de plusieurs PutMedia
sessions simultanées, les fragments multimédia sont entrelacés dans le flux. Vous devez vous assurer que cela est correct dans le scénario de votre application.
Les limites suivantes s'appliquent lors de l'utilisation du PutMedia
API :
-
Un client peut appeler
PutMedia
jusqu'à cinq fois par seconde et par flux. -
Un client peut envoyer jusqu'à cinq fragments par seconde et par flux.
-
Kinesis Video Streams lit les données multimédia à un débit pouvant atteindre 12,5 Mo/seconde, soit 100 Mbits/s au cours d'une session.
PutMedia
Notez les contraintes suivantes. Dans ces cas, Kinesis Video Streams envoie l'accusé de réception de l'erreur dans la réponse.
-
Les fragments dont les codes temporels dépassent la limite maximale autorisée et qui contiennent plus de 50 Mo de données ne sont pas autorisés.
-
Les fragments contenant plus de trois pistes ne sont pas autorisés. Chaque image de chaque fragment doit avoir le même numéro de piste que l'une des pistes définies dans l'en-tête du fragment. En outre, chaque fragment doit contenir au moins une image pour chaque piste définie dans l'en-tête du fragment.
-
Chaque fragment doit contenir au moins une image pour chaque piste définie dans les métadonnées du fragment.
-
L'horodatage d'image le plus ancien d'un fragment doit être postérieur au dernier horodatage d'image du fragment précédent.
-
Un MKV flux contenant plusieurs MKV segments ou contenant des MKV éléments interdits (comme
track*
) entraîne également un accusé de réception de l'erreur.
Kinesis Video Streams stocke chaque fragment entrant et les métadonnées associées dans ce que l'on appelle un « morceau ». Les métadonnées du fragment incluent les éléments suivants :
-
Les MKV en-têtes fournis au début de la demande
PutMedia
-
Les métadonnées spécifiques à Kinesis Video Streams suivantes pour le fragment :
-
server_timestamp
- Horodatage auquel Kinesis Video Streams a commencé à recevoir le fragment. -
producer_timestamp
- Horodatage, date à laquelle le producteur a commencé à enregistrer le fragment. Kinesis Video Streams utilise trois informations reçues dans la demande pour calculer cette valeur.-
La valeur du code temporel du fragment reçue dans le corps de la demande en même temps que le fragment.
-
Deux en-têtes de requête :
producerStartTimestamp
(quand le producteur a commencé à enregistrer) etfragmentTimeCodeType
(si le code temporel du fragment dans la charge utile est absolu ou relatif).
Kinesis Video Streams calcule ensuite
producer_timestamp
le pour le fragment comme suit :Si
fragmentTimeCodeType
c'est relatif, alorsproducer_timestamp
=producerStartTimeStamp
+ code temporel du fragmentSi
fragmentTimeCodeType
c'est absolu, alorsproducer_timestamp
= code temporel du fragment (converti en millisecondes) -
-
Numéro de fragment unique attribué par Kinesis Video Streams.
-
Note
Lorsque vous faites la GetMedia
demande, Kinesis Video Streams renvoie un flux de ces segments. Le client peut traiter les métadonnées selon ses besoins.
Note
Cette opération n'est disponible que AWS SDK pour Java. Il n'est pas pris en charge dans AWS SDKs les autres langues.
Note
Kinesis Video Streams n'analyse ni ne valide les données privées du codec lors de l'ingestion et de l'archivage via le. PutMedia API KVSextrait et valide les informations nécessaires à partir des données privées du codec pour MPEG -TS et le packaging des MP4 fragments lors de la consommation du flux via le. HLS APIs
Note
Si une erreur est générée après avoir invoqué un API média Kinesis Video Streams, outre le code d'état et HTTP le corps de la réponse, elle inclut les informations suivantes :
-
x-amz-ErrorType
HTTPen-tête : contient un type d'erreur plus spécifique en plus de ce que fournit le code d'HTTPétat. -
x-amz-RequestId
HTTPen-tête : si vous souhaitez signaler un problème à AWS, l'équipe d'assistance peut mieux diagnostiquer le problème si elle reçoit l'identifiant de demande.
Le code d'HTTPétat et l' ErrorType en-tête peuvent être utilisés pour prendre des décisions programmatiques quant à savoir si les erreurs peuvent être réessayées et dans quelles conditions, ainsi que pour fournir des informations sur les actions que le programmeur client devra peut-être entreprendre pour réessayer avec succès.
Pour plus d'informations, consultez la section Erreurs au bas de cette rubrique, ainsi que les erreurs courantes.
Syntaxe de la requête
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
URIParamètres de demande
La demande utilise les URI paramètres suivants.
- FragmentTimecodeType
-
Vous transmettez cette valeur comme
x-amzn-fragment-timecode-type
HTTP en-tête.Indique si les codes temporels des fragments (charge utile, corps de HTTP requête) sont absolus ou relatifs à.
producerStartTimestamp
Kinesis Video Streams utilise ces informations pour calculerproducer_timestamp
le fragment reçu dans la demande, comme décrit dans API la présentation.Valeurs valides :
ABSOLUTE | RELATIVE
Obligatoire : oui
- ProducerStartTimestamp
-
Vous transmettez cette valeur comme
x-amzn-producer-start-timestamp
HTTP en-tête.Il s'agit de l'horodatage du producteur auquel le producteur a commencé à enregistrer le média (et non de l'horodatage des fragments spécifiques de la demande).
- StreamARN
-
Vous transmettez cette valeur comme
x-amzn-stream-arn
HTTP en-tête.Amazon Resource Name (ARN) du flux vidéo Kinesis dans lequel vous souhaitez écrire le contenu multimédia. Si vous ne spécifiez pas le
streamARN
, vous devez spécifier lestreamName
.Contraintes de longueur : Longueur minimum de 1. Longueur maximum de 1024.
Modèle :
arn:[a-z\d-]+:kinesisvideo:[a-z0-9-]+:[0-9]+:[a-z]+/[a-zA-Z0-9_.-]+/[0-9]+
- StreamName
-
Vous transmettez cette valeur comme
x-amzn-stream-name
HTTP en-tête.Nom du flux vidéo Kinesis dans lequel vous souhaitez écrire le contenu multimédia. Si vous ne spécifiez pas le
streamName
, vous devez spécifier lestreamARN
.Contraintes de longueur : longueur minimum de 1. Longueur maximum de 256.
Modèle :
[a-zA-Z0-9_.-]+
Corps de la demande
La demande accepte les données binaires suivantes.
- Payload
-
Le contenu multimédia à écrire dans le flux vidéo Kinesis. Dans l'implémentation actuelle, Kinesis Video Streams ne prend en charge que le format de conteneur Matroska MKV () avec un seul segment. MKV Un segment peut contenir un ou plusieurs clusters.
Note
Chaque MKV cluster est mappé sur un fragment de flux vidéo Kinesis. Quelle que soit la durée du cluster que vous choisissez, elle devient la durée du fragment.
Syntaxe de la réponse
HTTP/1.1 200
Payload
Eléments de réponse
Si l'action aboutit, le service renvoie une réponse HTTP 200.
La réponse renvoie le HTTP corps suivant.
- Payload
-
Une fois que Kinesis Video Streams a reçu
PutMedia
une demande avec succès, le service valide les en-têtes de la demande. Le service commence ensuite à lire la charge utile et envoie d'abord une réponse HTTP 200.Le service renvoie ensuite un flux contenant une série d'JSONobjets (
Acknowledgement
objets) séparés par de nouvelles lignes. Les accusés de réception sont reçus sur la même connexion que celle par laquelle les données multimédia sont envoyées. Il peut y avoir de nombreux accusés de réception pour unePutMedia
demande. ChacuneAcknowledgement
comprend les paires clé-valeur suivantes :-
AckEventType
- Type d'événement représenté par l'accusé de réception.-
Mise en mémoire tampon : Kinesis Video Streams a commencé à recevoir le fragment. Kinesis Video Streams envoie le premier accusé de réception de la mise en mémoire tampon lorsque le premier octet de données de fragment est reçu.
-
Reçu : Kinesis Video Streams a reçu l'intégralité du fragment. Si vous n'avez pas configuré le flux pour conserver les données, le producteur peut arrêter de mettre le fragment en mémoire tampon dès réception de cet accusé de réception.
-
Persistant : Kinesis Video Streams a conservé le fragment (par exemple, vers Amazon S3). Vous obtenez cet accusé de réception si vous avez configuré le flux pour qu'il conserve les données. Une fois que vous avez reçu cet accusé de réception, le producteur peut arrêter de mettre le fragment en mémoire tampon.
-
Erreur : Kinesis Video Streams a rencontré une erreur lors du traitement du fragment. Vous pouvez consulter le code d'erreur et déterminer la marche à suivre.
-
Inactif : la
PutMedia
session est en cours. Cependant, Kinesis Video Streams ne reçoit actuellement aucune donnée. Kinesis Video Streams envoie cet accusé de réception régulièrement pendant 30 secondes maximum après la dernière réception des données. Si aucune donnée n'est reçue dans les 30 secondes, Kinesis Video Streams ferme la demande.Note
Cet accusé de réception peut aider le producteur à déterminer si la
PutMedia
connexion est active, même s'il n'envoie aucune donnée.
-
-
FragmentTimecode
- Fragment le code temporel pour lequel un accusé de réception est envoyé.L'élément peut être absent s'il
AckEventType
est inactif. -
FragmentNumber
- Numéro du fragment généré par Kinesis Video Streams pour lequel l'accusé de réception est envoyé. -
ErrorId
etErrorCode
- Si telAckEventType
est le casError
, ce champ fournit le code d'erreur correspondant. Voici la liste des erreurs IDs ainsi que les codes d'erreur et messages d'erreur correspondants :-
4000 - STREAM _ READ _ ERROR - Erreur lors de la lecture du flux de données.
-
4001 - MAX _ _ FRAGMENT SIZE _ REACHED - La taille du fragment est supérieure à la limite maximale autorisée (50 Mo).
-
4002 - MAX _ _ FRAGMENT DURATION _ REACHED - La durée du fragment est supérieure à la limite maximale autorisée.
-
4003 - MAX _ _ CONNECTION DURATION _ REACHED - La durée de connexion est supérieure au seuil maximum autorisé.
-
4004 - FRAGMENT _ _ TIMECODE _ LESSER THAN _ PREVIOUS - Le code temporel du fragment est inférieur au code temporel précédent (au cours d'un
PutMedia
appel, vous ne pouvez pas envoyer de fragments dans le désordre). -
4005 - MORE _ THAN _ ALLOWED _ TRACKS _ FOUND - Plusieurs pistes se trouvent dansMKV. (obsolète)
-
4006 - INVALID _ MKV _ DATA - Impossible d'analyser le flux d'entrée en tant que format valideMKV.
-
4007 - INVALID _ PRODUCER _ TIMESTAMP - Horodatage du producteur non valide.
-
4008 - STREAM _ NOT _ ACTIVE - Le flux n'existe plus (supprimé).
-
4009 - FRAGMENT _ _ METADATA LIMIT _ REACHED - La limite de métadonnées des fragments est atteinte. Consultez la section Limites du guide du développeur.
-
4010 - TRACK _ NUMBER _ MISMATCH - Le numéro de piste d'un MKV cadre ne correspond pas à celui des pistes de l'MKVen-tête.
-
4011 - FRAMES _ MISSING _ FOR _ TRACK - Le fragment ne contenait aucune image pour au moins une des pistes de l'MKVen-tête.
-
4012 - INVALID _ FRAGMENT _ METADATA - Le nom des métadonnées du fragment ne peut pas commencer par la chaîne
AWS_
. -
4500 - KMS _ KEY _ ACCESS _ DENIED - L'accès à la KMS clé spécifiée pour le flux est refusé.
-
4501 - KMS _ KEY _ DISABLED - La KMS clé spécifiée pour le flux est désactivée.
-
4502 - KMS _ _ KEY VALIDATION _ ERROR - La validation de la KMS clé spécifiée pour le flux a échoué.
-
4503 - KMS _ KEY _ UNAVAILABLE - La KMS clé spécifiée pour le flux n'est pas disponible.
-
4504 - KMS _ _ KEY INVALID _ USAGE - Utilisation non valide de la KMS clé spécifiée pour le flux.
-
4505 - KMS _ KEY _ INVALID _ STATE - La KMS clé spécifiée pour le flux n'est pas valide.
-
4506 - KMS _ KEY _ NOT _ FOUND - La KMS clé spécifiée pour le flux est introuvable.
-
5000 - INTERNAL _ ERROR - Erreur de service interne.
-
5001 - ARCHIVAL _ ERROR - Kinesis Video Streams n'a pas réussi à conserver les fragments dans le magasin de données.
-
Note
Le producteur, lorsqu'il envoie la charge utile pour une
PutMedia
demande de longue durée, doit lire la réponse pour obtenir des accusés de réception. Un producteur peut recevoir de nombreux accusés de réception en même temps, en raison de la mise en mémoire tampon sur un serveur proxy intermédiaire. Un producteur qui souhaite recevoir des accusés de réception en temps opportun peut envoyer moins de fragments à chaquePutMedia
demande. -
Erreurs
Pour plus d'informations sur les erreurs courantes pour toutes les actions, consultez Erreurs courantes.
- ClientLimitExceededException
-
Kinesis Video Streams a limité le nombre de demandes car vous avez dépassé le nombre maximal d'appels clients autorisés. Essayez de passer l'appel plus tard.
HTTPCode de statut : 400
- ConnectionLimitExceededException
-
Kinesis Video Streams a limité la demande car vous avez dépassé le nombre limite de connexions client autorisées.
HTTPCode de statut : 400
- InvalidArgumentException
-
La valeur de ce paramètre d'entrée n'est pas valide.
HTTPCode de statut : 400
- InvalidEndpointException
-
L'appelant a utilisé le mauvais point de terminaison pour écrire des données dans un flux. À la réception d'une telle exception, l'utilisateur doit appeler
GetDataEndpoint
avecAPIName
set toPUT_MEDIA
et utiliser le point de terminaison de la réponse pour appeler le prochainPutMedia
appel.HTTPCode de statut : 400
- NotAuthorizedException
-
L'appelant n'est pas autorisé à effectuer une opération sur le flux donné, ou le jeton a expiré.
HTTPCode de statut : 401
- ResourceNotFoundException
-
Code d'état : 404, le flux portant le nom donné n'existe pas.
HTTPCode de statut : 404
Exemples
Format d'accusé de réception
Le format de l'accusé de réception est le suivant :
{ Acknowledgement : { "EventType": enum "FragmentTimecode": Long, "FragmentNumber": Long, "ErrorId" : String } }
consultez aussi
Pour plus d'informations sur son utilisation API dans l'une des langues spécifiques AWS SDKs, consultez ce qui suit :