Résolution des problèmes liés à Kinesis Video Streams - 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 à Kinesis Video Streams

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 d'images 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 liés à l'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 du AWS CLI, voir configure dans le manuel de référence des AWS CLI commandes.

Erreur : « Unable to determine service/operation name to be authorized » (Impossible de déterminer le nom de service/d'opération à 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 plus d’informations, consultez StorageInfo.

Problèmes liés au HLS

Si la lecture de votre flux vidéo n'est pas correcte, consultezRésolution des problèmes liés au 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 aux 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 des producteurs

Cette section décrit les problèmes que vous pouvez rencontrer lors de l'utilisation des Bibliothèques Producteur.

Problèmes

Impossible de compiler le kit SDK 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 AvCC. Si votre flux ne s'affiche pas, vérifiez les points suivants :

  • Vos Indicateurs d'adaptation NAL sont définis sur NAL_ADAPTATION_ANNEXB_NALS | NAL_ADAPTATION_ANNEXB_CPD_NALS si le flux d'origine est au format Annex B. Il s'agit de la valeur par défaut dans le constructeur StreamDefinition.

  • Vous fournissez correctement les données privées codec. Pour H.264, il s'agit de l'ensemble de paramètres de séquence (SPS) et l'ensemble 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ù Ab correspond au code de démarrage 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)

    Le CPD (Codec Private Data), si le H.264 est 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), en extraire les deux NALU (qui seront Ab (Sps) Ab (Pps)) et en le configurant dans le CPD in. 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é dans le 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 bonne version de votre appareil. (Par exemple, vérifiez que vous n'êtes pas en train de compiler 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.

Horodatage/assertion de plage 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 Indicateurs 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 Bibliothèque Producteur Android :

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

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 une caméra USB/webcam, 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 les 10 secondes.

    • Si vous n'utilisez pas la fragmentation basée sur des images clés, lors de la définition du flux Étape 2 : Écrire et examiner le code entrant, définissez la limite de durée maximale du fragment sur une valeur inférieure à 10 secondes.

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

  • Si vous utilisez une caméra RPI, définissez l'attribut keyframe-interval sur une valeur inférieure à 10 secondes.

  • Si vous utilisez une caméra IP (RTSP), réglez la taille du 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 (paramètre obligatoire de l'kvssinkélément) est identique à la valeur deiot-thingname. Pour plus d’informations, consultez 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 Bibliothèque d'analyse de flux.

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

Pour accéder à une seule image depuis une source de streaming dans votre application grand public, vérifiez que votre flux contient les bonnes données privées du codec. 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 codés correctement dans un format et un niveau H.264 pris en charge par le navigateur, vous pouvez voir le message d'erreur suivant lors de la lecture de votre flux dans 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 profil H.264 et le niveau des images codées correspondent au profil et au niveau spécifiés dans les données privées codec.

  • Le navigateur prend en charge la combinaison profil/niveau 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 d'image à l'aide du format H.264.

Problèmes liés au réseau

Si vous constatez des erreurs de connexion, telles que « Expiration de la connexion » ou « Échec de la connexion », 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 la liste des plages d'adresses IP Kinesis Video Streams.

Pour plus d'informations, consultez la section Plages d'AWS adresses IP. Pour être averti lorsque les plages d'adresses IP changent, suivez la procédure d'abonnement.