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.
Diffusez des vidéos sur votre flux vidéo Kinesis
Pour exécuter cet exemple d'application, vous avez besoin des informations suivantes :
-
Le nom du flux que vous avez créé dans la section Conditions préalables.
-
Les informations d'identification de compte (ID de clé d'accès et clé d'accès secrète) que vous avez créées dans Création d'un utilisateur IAM autorisé à écrire dans Kinesis Video Streams.
GStreamer est capable de localiser le
kvssinkplugin. Pour plus d’informations, consultez Téléchargez et créez le SDK Kinesis Video Streams C++ Producer.
Définissez les informations d'identification et la région.
export AWS_ACCESS_KEY_ID=YourAccessKeyexport AWS_SECRET_ACCESS_KEY=YourSecretKeyexport AWS_DEFAULT_REGION=us-west-2Pour d'autres méthodes d'authentification, consultezFournissez des informations d'identification à kvssink.
Note
Le SDK C++ Producer utilise la région USA West (Oregon) () (
us-west-2) par défaut. Pour utiliser la valeur par défaut, Région AWS créez votre flux vidéo Kinesis dans la région Ouest des États-Unis (Oregon).Pour utiliser une autre région pour votre flux vidéo Kinesis, définissez la variable d'environnement suivante sur votre région (par exemple,
us-east-1) :export AWS_DEFAULT_REGION=us-east-1En fonction de votre support d'entrée, choisissez l'une des options suivantes :
Utiliser le matériel
Certains modèles de Raspberry Pi sont équipés d'encodeurs à accélération matérielle H.264 . Vous pouvez les utiliser à la place dex264enc, qui est un encodeur logiciel.
-
Assurez-vous que les plugins GStreamer sont installés :
sudo apt-get install gstreamer1.0-tools gstreamer1.0-plugins-bad -
Type :
gst-inspect-1.0 | grep h264Déterminez si les éléments suivants sont disponibles :
-
omxh264enc
-
v4l2h264enc
S'ils sont disponibles, vous pouvez les utiliser. Voici quelques exemples de pipelines utilisant ces éléments :
omxh264enc:gst-launch-1.0 v4l2src device=/dev/video0 \ ! videoconvert \ ! video/x-raw,format=I420,width=640,height=480 \ !omxh264enccontrol-rate=2 target-bitrate=512000 periodicity-idr=45 inline-header=FALSE \ ! h264parse ! video/x-h264,stream-format=avc,alignment=au,profile=baseline \ ! kvssink stream-name="raspberry"v4l2h264encetv4l2convert:gst-launch-1.0 libcamerasrc \ ! video/x-raw,width=640,height=480,framerate=30/1,format=I420 \ !v4l2convert\ !v4l2h264encextra-controls="controls,repeat_sequence_header=1" \ ! video/x-h264,level='(string)4' \ ! h264parse \ ! video/x-h264,stream-format=avc,alignment=au,width=640,height=480,framerate=30/1 \ ! kvssink stream-name="test-stream" -
Problèmes d'exécution
Vous trouverez ci-dessous quelques problèmes d'exécution fréquemment rencontrés et la manière de les résoudre.
Aucun élément de ce type « xxxxxxxxx »
Si vous recevez une erreur comme celle-ci, cela signifie qu'il vous manque un plugin GStreamer :
WARNING: erroneous pipeline: no element "videoconvert"
Résolution :
En fonction de l'élément manquant, déterminez l'action appropriée :
-
kvssink: VoirTéléchargez et créez le SDK Kinesis Video Streams C++ Producer. libcamerasrc: voir Erreur « Échec de l'activation du pool de mémoire tampon » pour installer l'élémentlibcamerasrcGStreamer.omxh264encouv4l2h264enc:Suivez cette Configuration requise pour installer le logiciel procédure pour installer toutes les bibliothèques GStreamer. Si vous les avez tous installés et que ces éléments n'apparaissent pas, cela signifie que votre Raspberry Pi ne possède pas le matériel nécessaire. Utilisez
x264encplutôt l'encodeur logiciel.Autre : Suivez cette Configuration requise pour installer le logiciel procédure pour installer toutes les bibliothèques GStreamer. Différents éléments de GStreamer se trouvent dans les différents groupes de plugins GStreamer (bons, mauvais, moches), alors assurez-vous de tous les installer.
Erreur « Échec de l'activation du pool de mémoire tampon »
Si vous recevez une erreur comme celle-ci, cela signifie que le pipeline utilisé est en cours d'utilisationv4l2src, mais qu'il devrait être utilisé à la libcamerasrc place.
ERROR bufferpool gstbufferpool.c:572:gst_buffer_pool_set_active:source:pool0:src start failed
WARN v4l2src gstv4l2src.c:976:gst_v4l2src_decide_allocation: error: Failed to allocate required memory.
WARN v4l2src gstv4l2src.c:976:gst_v4l2src_decide_allocation: error: Buffer pool activation failed
WARN basesrc gstbasesrc.c:3352:gst_base_src_prepare_allocation: Subclass failed to decide allocation
Error received from element source: Failed to allocate required memory.
WARN basesrc gstbasesrc.c:3132:gst_base_src_loop: error: Internal data stream error.
Debugging information: ../sys/v4l2/gstv4l2src.c(976): gst_v4l2src_decide_allocation (): /GstPipeline:live-kinesis-pipeline/GstV4l2Src:source:
Buffer pool activation failed
WARN basesrc gstbasesrc.c:3132:gst_base_src_loop: error: streaming stopped, reason not-negotiated (-4)
Par exemple, si vous utilisez le pipeline suivant avec le module caméra 2 non libcamerasrc installé, vous risquez de rencontrer cette erreur lorsque GStreamer essaie de détecter automatiquement les éléments à utiliser.
gst-launch-1.0 autovideosrc ! videoconvert ! autovideosink
Résolution :
Assurez-vous qu'il libcamerasrc est installé et utilisez-le comme élément source plutôt quev4l2src. Tapez ce qui suit pour installer l'élément libcamerasrc GStreamer :
sudo apt-get update sudo apt-get install gstreamer1.0-libcamera
Une fois libcamerasrc installé, si vous utilisez l'autovideosrcélément, GStreamer devrait automatiquement passer à la bonne source à la libcamerasrc place de. v4l2src
Erreur de bus
Si vous recevez une erreur de bus peu de temps après le démarrage kvssink (généralement, à peu près au moment où l'appel HTTP est PutMedia terminé), cela signifie que votre Raspberry Pi ne prend pas en charge l'accès non aligné à la mémoire. Les journaux se présenteront comme suit :
INFO Camera camera.cpp:1197 configuring streams: (0) 640x480-YUV420
INFO RPI pisp.cpp:1450 Sensor: /base/axi/pcie@120000/rp1/i2c@88000/imx708@1a - Selected sensor format: 1536x864-SBGGR10_1X10 - Selected CFE format: 1536x864-PC1B
[INFO ] kinesisVideoStreamFormatChanged(): Stream format changed.
[DEBUG] setRequestHeader(): Appending header to request: user-agent -> AWS-SDK-KVS-CPP-CLIENT/3.4.2/1.5.3 GCC/12.2.0 Linux/6.6.51+rpt-rpi-v8 aarch64 CPPSDK
[DEBUG] setRequestHeader(): Appending header to request: x-amzn-stream-name -> demo-stream
[DEBUG] setRequestHeader(): Appending header to request: x-amzn-producer-start-timestamp -> 1732012345.678
[DEBUG] setRequestHeader(): Appending header to request: x-amzn-fragment-acknowledgment-required -> 1
[DEBUG] setRequestHeader(): Appending header to request: x-amzn-fragment-timecode-type -> ABSOLUTE
[DEBUG] setRequestHeader(): Appending header to request: transfer-encoding -> chunked
[DEBUG] setRequestHeader(): Appending header to request: connection -> keep-alive
[INFO ] putStreamResultEvent(): Put stream result event. New upload handle 0
[WARN ] notifyDataAvailable(): [demo-stream] Failed to un-pause curl with error: 43. Curl object 0xe2f6f418
Bus error
Kinesis Video Streams PIC utilise un accès à la mémoire non aligné pour optimiser l'utilisation de la mémoire, ce qui n'est pas pris en charge par tous les appareils.
Résolution :
Pour utiliser le SDK en mode d'accès à la mémoire aligné, vous devez définir explicitement l'indicateur ALIGNED_MEMORY_MODEL CMake sur ON lors de la compilationkvssink, car sa valeur par défaut est. OFF Voir Téléchargez et créez le SDK Kinesis Video Streams C++ Producer pour des instructions plus détaillées.
L'horodatage se bloque et le pipeline se bloque
Lors de l'utilisation x264enc dans un pipeline GStreamer, vous pouvez rencontrer des situations où la chronologie du pipeline ralentit de manière significative ou se bloque complètement en quelques secondes.
Cela est dû au fait que les paramètres x264enc par défaut peuvent introduire une latence de codage élevée, qui dépasse la capacité de la mémoire tampon d'entrée par défaut. En conséquence, la mémoire tampon d'entrée se remplit, ce qui provoque le blocage des éléments en amont et le blocage du pipeline.
Pour plus d'informations, consultez la documentation de GStreamer.
Résolution :
Configurez x264enc à l'aide de l'option de zerolatency réglage. Cela réduit considérablement la latence de codage en optimisant les scénarios en temps réel, garantissant ainsi le traitement et la sortie des trames plus rapidement.
Exemple de configuration :
... ! x264enctune=zerolatencybyte-stream=true speed-preset=ultrafast bframes=0 key-int-max=60 ! ...
Note
Bien que cette solution empêche efficacement le blocage du pipeline, elle peut avoir un impact sur l'efficacité et la qualité de l'encodage. Pour les scénarios nécessitant à la fois une faible latence et une haute qualité, envisagez d'autres approches, telles que l'utilisation d'optimisations matérielles ou la recherche d'une webcam qui émet H.264 directement, en sautant cette étape de codage.
Pour de plus amples informations, veuillez consulter Utiliser le matériel.
Impossible d'exécuter plusieurs pipelines à partir du même périphérique v4l2 en même temps
Les appareils de ce type ne sont /dev/video0 accessibles que par un seul processus à la fois. Si plusieurs processus tentent d'y accéder en même temps, le second attend que le premier soit terminé.
Résolution :
Créez un périphérique de bouclage, permettant à plusieurs processus d'utiliser l'interface de bouclage en même temps. Pour plus d'informations, consultez Stack Exchange
Erreur de flux de données interne
Lorsque vous créez un pipeline GStreamer, vous connectez des éléments en reliant la pastille source d'un élément à la pastille réceptrice d'un autre élément. Ce processus de liaison permet le flux de données de l'élément source vers l'élément récepteur, formant ainsi un pipeline de données.
Le message d'erreur « Pad link failed » dans le journal indique que GStreamer a rencontré un problème en essayant d'établir une connexion (lien) entre les pads de deux éléments de votre pipeline.
Pad link failed
Error received from element udpsrc0: Internal data stream error.
Résolution :
Déterminez quels éléments ne sont pas liés les uns aux autres. Pour réduire la portée du pipeline, retirez des éléments du pipeline. Remplacez l'élément le plus à droite par fakesink et supprimez les éléments un par un.
Vous devrez peut-être ajuster les éléments caps/filter, and/or modifier
Les cas courants demandent un framerate ou resolution que la caméra ne prend pas en charge. gst-device-monitor-1.0Utilisez-le dans le terminal pour obtenir les fichiers pris en charge frameratesresolutions, etformats. Vous pouvez utiliser l'élément Videoscale
Pour inspecter les formats pris en charge pour un élément GStreamer individuel, tapez gst-inspect-1.0 element-name dans le terminal.