View a markdown version of this page

Résolution des problèmes liés aux flux vidéo Kinesis - Amazon Kinesis Video Streams

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.

Résolution des problèmes liés aux flux vidéo Kinesis

Utilisez les informations suivantes pour résoudre les problèmes courants rencontrés avec Amazon Kinesis Video Streams.

Problèmes généraux

Cette section décrit les problèmes généraux que vous pouvez rencontrer lors de l'utilisation de Kinesis Video Streams.

Latence trop élevée

La latence peut être due à la durée des fragments envoyés au service Kinesis Video Streams. Une solution pour réduire la latence entre le producteur et le service consiste à configurer le pipeline média pour produire des durées de fragment plus courtes.

Pour réduire le nombre de trames envoyées dans chaque fragment, réduisez la valeur suivante dans kinesis_video_gstreamer_sample_app.cpp :

g_object_set(G_OBJECT (data.encoder), "bframes", 0, "key-int-max", 45, "bitrate", 512, NULL);
Note

Les latences sont plus élevés dans le navigateur Mozilla Firefox en raison de l'implémentation interne du rendu vidéo.

Problèmes d'API

Cette section décrit les problèmes d'API que vous pouvez rencontrer lorsque vous travaillez avec Kinesis Video Streams.

Erreur : « Options inconnues »

GetMedia et GetMediaForFragmentList peuvent échouer avec l'erreur suivante :

Unknown options: <filename>.mkv

Cette erreur se produit si vous avez configuré le AWS CLI avec un output type dejson. Reconfigurez le AWS CLI avec le type de sortie par défaut (none). Pour plus d'informations sur la configuration de AWS CLI, voir configure dans la référence des AWS CLI commandes.

Erreur : « Impossible de déterminer service/operation le nom à autoriser »

GetMedia peut échouer avec l'erreur suivante :

Unable to determine service/operation name to be authorized

Cette erreur peut se produire si le point de terminaison n'est pas correctement spécifié. Lorsque vous obtenez le point de terminaison, veillez à inclure le paramètre suivant dans l'GetDataEndpointappel, en fonction de l'API à appeler :

--api-name GET_MEDIA --api-name PUT_MEDIA --api-name GET_MEDIA_FOR_FRAGMENT_LIST --api-name LIST_FRAGMENTS

Erreur : « Failed to put a frame in the stream » (Échec du placement d'une trame dans le flux)

PutMedia peut échouer avec l'erreur suivante :

Failed to put a frame in the stream

Cette erreur peut se produire si la connectivité ou les autorisations ne sont pas disponibles pour le service. Exécutez ce qui suit dans le AWS CLI, et vérifiez que les informations du flux peuvent être récupérées :

aws kinesisvideo describe-stream --stream-name StreamName --endpoint https://ServiceEndpoint.kinesisvideo.region.amazonaws.com

Si l'appel échoue, consultez la section Résolution AWS CLI des erreurs pour plus d'informations.

Erreur : « Le service AckEvent a fermé la connexion avant la réception de la version finale »

PutMedia peut échouer avec l'erreur suivante :

com.amazonaws.SdkClientException: Service closed connection before final AckEvent was received

Cette erreur peut se produire si PushbackInputStream n'est pas correctement implémenté. Vérifiez que les unread() méthodes sont correctement mises en œuvre.

Erreur : « STATUS_STORE_OUT_OF_MEMORY »

PutMedia peut échouer avec l'erreur suivante :

The content store is out of memory.

Cette erreur se produit lorsque le magasin de contenu n'est pas alloué avec une taille suffisante. Pour augmenter la taille du magasin de contenu, augmentez la valeur de StorageInfo.storageSize. Pour de plus amples informations, veuillez consulter StorageInfo.

Erreur : « Les informations d'identification doivent être limitées à une région valide. »

Cette erreur se produit si la région de signature ne correspond pas à la région du point de terminaison.

Par exemple, si vous spécifiez us-west-2 comme région de signature, mais que vous essayez de vous connecter au point de terminaison kinesisvideo.us-east-1.amazonaws.com (us-east-1), vous recevrez cette erreur.

Dans certaines applications, comme kvssink, la chaîne de repli de région est définie par défaut sur. us-west-2 Vérifiez que vous avez correctement configuré votre région en fonction de l'application que vous utilisez.

Problèmes liés au HLS

Si votre flux vidéo ne s'affiche pas correctement, consultezRésolution des problèmes HLS.

Problèmes liés à Java

Cette section explique comment résoudre les problèmes Java courants rencontrés lors de l'utilisation de Kinesis Video Streams.

Activation des journaux Java

Pour résoudre les problèmes liés aux exemples et bibliothèques Java, il est utile d'activer et d'examiner les journaux de débogage. Pour activer les journaux de débogage, procédez comme suit :

  1. Ajoutez log4j au fichier pom.xml dans le nœud dependencies :

    <dependency> <groupId>log4j</groupId> <artifactId>log4j</artifactId> <version>1.2.17</version> </dependency>
  2. Dans le répertoire target/classes, créez un fichier nommé log4j.properties avec les contenus suivants :

    # Root logger option log4j.rootLogger=DEBUG, stdout # Redirect log messages to console log4j.appender.stdout=org.apache.log4j.ConsoleAppender log4j.appender.stdout.Target=System.out log4j.appender.stdout.layout=org.apache.log4j.PatternLayout log4j.appender.stdout.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n log4j.logger.org.apache.http.wire=DEBUG

Les journaux de débogage s'impriment ensuite dans la console IDE.

Problèmes liés à la bibliothèque du producteur

Cette section décrit les problèmes que vous pouvez rencontrer lors de l'utilisation des Transférer vers Kinesis Video Streams.

Problèmes

Impossible de compiler le SDK du producteur

Vérifiez que les bibliothèques requises se trouvent dans votre chemin d'accès. Pour le vérifier, utilisez la commande suivante :

env | grep LD_LIBRARY_PATH LD_LIBRARY_PATH=/home/local/awslabs/amazon-kinesis-video-streams-producer-sdk-cpp/kinesis-video-native-build/downloads/local/lib

Un flux vidéo n'apparaît pas dans la console

Pour afficher votre flux vidéo dans la console, celui-ci doit être encodé H.264 au format VCC. Si votre flux ne s'affiche pas, vérifiez les points suivants :

  • Vous drapeaux d'adaptation NAL êtes réglé sur NAL_ADAPTATION_ANNEXB_NALS | NAL_ADAPTATION_ANNEXB_CPD_NALS si le flux d'origine est au Annex-B format. Il s'agit de la valeur par défaut dans le constructeur StreamDefinition.

  • Vous fournissez correctement les données privées codec. Car H.264 il s'agit du jeu de paramètres de séquence (SPS) et du jeu de paramètres d'image (PPS). En fonction de votre source média, ces données peuvent être extraites de la source média séparément ou codées dans l'image.

    De nombreux flux élémentaires sont au format suivant, où se Ab trouve le code de Annex-B démarrage (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)

    Le CPD (Codec Private Data), s'il H.264 se trouve dans le flux en tant que SPS et PPS, peut être adapté au format AVCC. À moins que le pipeline multimédia ne fournisse le CPD séparément, l'application peut extraire le CPD de la trame en recherchant la première trame Idr (qui doit contenir le SPS et le PPS), extraire les deux NALU (qui seront Ab (Sps) Ab (Pps)) et les définir dans le CPD. StreamDefinition

Erreur : « Security token included in the request is invalid » (le jeton de sécurité inclus dans la requête n'est pas valide) lors de la diffusion de données à l'aide de l'application de démonstration GStreamer

Si cette erreur se produit, il y a un problème avec vos informations d'identification. Vérifiez les paramètres suivants :

  • Si vous utilisez des informations d'identification temporaires, vous devez spécifier le jeton de session.

  • Vérifiez que vos informations d'identification temporaires ne sont pas arrivées à expiration.

  • Vérifiez que vous disposez des droits appropriés.

  • Sur macOS, vérifiez que vous n'avez pas d'informations d'identification mises en cache dans Keychain.

Erreur : « Failed to submit frame to Kinesis Video client » (Échec d'envoi d'image au client Kinesis Video)

Si cette erreur se produit, les horodatages ne sont pas correctement définis dans le flux source. Essayez les éléments suivants :

  • Utilisez le dernier exemple de kit SDK qui peut avoir une mise à jour qui corrige votre problème.

  • Réglez le flux de haute qualité sur un débit plus élevé et corrigez toute instabilité du flux source si la caméra le permet.

L'application GStreamer s'arrête avec le message « streaming arrêté, motif non négocié » sur OS X

Le streaming peut s'interrompre sur OS X avec le message suivant :

Debugging information: gstbasesrc.c(2939): void gst_base_src_loop(GstPad *) (): /GstPipeline:test-pipeline/GstAutoVideoSrc:source/GstAVFVideoSrc:source-actual-src-avfvide: streaming stopped, reason not-negotiated (-4)

Une solution possible consiste à supprimer les paramètres de fréquence d'images de l'gst_caps_new_simpleappel dans kinesis_video_gstreamer_sample_app.cpp :

GstCaps *h264_caps = gst_caps_new_simple("video/x-h264", "profile", G_TYPE_STRING, "baseline", "stream-format", G_TYPE_STRING, "avc", "alignment", G_TYPE_STRING, "au", "width", GST_TYPE_INT_RANGE, 320, 1920, "height", GST_TYPE_INT_RANGE, 240, 1080, "framerate", GST_TYPE_FRACTION_RANGE, 0, 1, 30, 1, NULL);

Erreur : « Failed to allocate heap » (échec de l'allocation du tas) lors de la création du Client vidéo Kinesis dans la démonstration de GStreamer sur Raspberry Pi

L'exemple d'application GStreamer essaie d'allouer 512 Mo de RAM, qui peuvent ne pas être disponibles sur votre système. Vous pouvez réduire cette allocation en réduisant la valeur suivante dans KinesisVideoProducer.cpp :

device_info.storageInfo.storageSize = 512 * 1024 * 1024;

Erreur : « Illegal Instruction » (instruction non conforme) lors de l'exécution de la démonstration de GStreamer sur Raspberry Pi

Si vous rencontrez l'erreur suivante lors de l'exécution de la démo de GStreamer, vérifiez que vous avez compilé l'application pour la version correcte de votre appareil. (Par exemple, vérifiez que vous ne compilez pas pour Raspberry Pi 3 lorsque vous utilisez Raspberry Pi 2.)

INFO - Initializing curl. Illegal instruction

Le chargement de la caméra échoue sur Raspberry Pi

Pour vérifier si la caméra est chargée, procédez comme suit :

ls /dev/video*

Si rien n'est trouvé, procédez comme suit :

vcgencmd get_camera

La sortie doit ressembler à ce qui suit :

supported=1 detected=1

Si le pilote ne détecte pas la caméra, procédez comme suit :

  1. Vérifiez la configuration de la caméra physique et vérifiez qu'elle est connectée correctement.

  2. Effectuez les étapes suivantes pour mettre à jour le micrologiciel :

    sudo rpi-update
  3. Redémarrez le périphérique.

  4. Effectuez les étapes suivantes pour charger le pilote :

    sudo modprobe bcm2835-v4l2
  5. Vérifiez que la caméra a été détectée :

    ls /dev/video*

La caméra n'est pas trouvée sur macOS High Sierra

Sur macOS High Sierra, l'application de démonstration ne trouve pas la caméra si plus d'une caméra est disponible.

Fichier jni.h introuvable lors de la compilation sur macOS High Sierra

Pour résoudre cette erreur, mettez à jour votre installation de Xcode vers la version la plus récente.

Erreurs curl lors de l'exécution de l'application de démonstration GStreamer

Pour résoudre les erreurs curl lorsque vous exécutez l'application de démonstration GStreamer, copiez ce fichier de certificat dans /etc/ssl/cert.pem.

Timestamp/range assertion lors de l'exécution sur Raspberry Pi

Si une assertion de plage d'horodatage se produit lors de l'exécution, mettez à jour le micrologiciel et redémarrez le périphérique :

sudo rpi-update $ sudo reboot

Assertion sur gst_value_set_fraction_range_full sur Raspberry Pi

L'assertion suivante s'affiche si le service uv4l est en cours d'exécution :

gst_util_fraction_compare (numerator_start, denominator_start, numerator_end, denominator_end) < 0' failed

Si cela se produit, arrêtez le service uv4l et redémarrez l'application.

0x3200000d STATUS_MKV_INVALID_ANNEXB_NALU_IN_FRAME_DATA (erreur sur Android)

L'erreur suivante s'affiche si les drapeaux d'adaptation NAL sont incorrects pour la diffusion multimédia :

putKinesisVideoFrame(): Failed to put a frame with status code 0x3200000d

Si cette erreur se produit, fournissez le bon indicateur .withNalAdaptationFlags pour votre média (par exemple, NAL_ADAPTATION_ANNEXB_CPD_NALS). Fournissez cet indicateur dans la ligne suivante Android :

https://github.com/awslabs/aws-sdk-android-samples/blob/master/AmazonKinesisVideoDemoApp/src/main/java/com/amazonaws/kinesisvideo/demoapp/fragment/StreamConfigurationFragment.java#L169

La durée maximale du fragment a été atteinte (erreur)

Cette erreur se produit lorsqu'un fragment de média dans un flux dépasse la limite maximale de durée de fragment. Consultez la limite de durée maximale des fragments dans la Quotas de service d'API pour les médias et les médias archivés section.

Pour résoudre ce problème, essayez ce qui suit :

  • Si vous utilisez un webcam/USB appareil photo, effectuez l'une des opérations suivantes :

    • Si vous utilisez la fragmentation basée sur les images clés, configurez l'encodeur pour qu'il fournisse des images clés dans un délai de 10 secondes.

    • Si vous n'utilisez pas la fragmentation basée sur les images clés, définissez la limite de durée maximale du fragment sur une valeur inférieure à 10 secondes lors de la définition du flux dansÉcrivez et examinez le code.

    • Si vous utilisez des encodeurs logiciels (tels que x264) dans le pipeline GStreamer, vous pouvez définir l'attribut key-int-max sur une valeur dans les 10 secondes. Par exemple, définissez key-int-max sur 60 et sur 30 images par seconde, pour activer les images clés toutes les 2 secondes.

  • Si vous utilisez une caméra RPI, définissez l'attribut keyframe-interval de manière à ce qu'il soit inférieur à 10 secondes.

  • Si vous utilisez une caméra IP (RTSP), réglez la taille GOP sur 60.

Message d’erreur « Invalid thing name passed » (Nom d’objet non valide attribué) lors de l'utilisation d'une autorisation IoT

Pour éviter cette erreur (HTTP Error 403: Response: {"message":"Invalid thing name passed"}) lorsque vous utilisez des informations d'identification IoT pour l'autorisation, assurez-vous que la valeur de stream-name (un paramètre obligatoire de l'kvssinkélément) est identique à la valeur deiot-thingname. Pour de plus amples informations, veuillez consulter Référence des paramètres de l'élément GStreamer.

Problèmes liés à la bibliothèque Stream Parser

Cette section décrit les problèmes que vous pouvez rencontrer lors de l'utilisation des Diffuser à l'aide de la bibliothèque d'analyseurs.

Impossible d'accéder à une seule image depuis le flux

Pour accéder à une seule image à partir d'une source de diffusion dans votre application grand public, vérifiez que votre flux contient les données privées du codec appropriées. Pour en savoir plus sur le format des données dans le flux, consultez Modèle de données.

Pour savoir comment utiliser les données privées d'un codec pour accéder à un cadre, consultez le fichier de test suivant sur le GitHub site Web : KinesisVideoRendererExampleTest.java

Erreur de décodage de fragment

Si vos fragments ne sont pas correctement encodés dans un H.264 format et un niveau pris en charge par le navigateur, l'erreur suivante peut s'afficher lors de la lecture de votre stream sur la console :

Fragment Decoding Error There was an error decoding the video data. Verify that the stream contains valid H.264 content

Si cela se produit, vérifiez les points suivants :

  • La résolution des images correspond à la résolution spécifiée dans les données privées codec.

  • Le H.264 profil et le niveau des trames codées correspondent au profil et au niveau spécifiés dans les données privées du codec.

  • Le navigateur prend en charge cette profile/level combinaison. La plupart des navigateurs actuels prennent en charge toutes les combinaisons de profil et de niveau.

  • Les horodatages sont exacts et dans le bon ordre, et aucun horodatage en double n'est créé.

  • Votre application code les données de trame à l'aide de ce H.264 format.

Problèmes de réseau

Si des erreurs de connexion, telles que « Délai de connexion » ou « Échec de connexion », apparaissent lorsque vous tentez de vous connecter à Kinesis Video Streams, cela peut être dû à des restrictions de plage d'adresses IP dans votre configuration réseau.

Si votre configuration comporte des restrictions de plage d'adresses IP pour Kinesis Video Streams, mettez à jour votre configuration réseau pour autoriser les plages d'adresses IP Kinesis Video Streams.

Important

La liste des plages IP n'est pas une liste exhaustive des adresses IP de Kinesis Video Streams. Incluez les plages d'adresses IP que vous voyez et sachez que les adresses IP peuvent changer au fil du temps.

Pour plus d'informations, consultez la section Plages d'AWS adresses IP. Pour être averti en cas de modification des plages IP, suivez la procédure d'abonnement.