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 de la vidéo 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 Prérequis.
-
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 IAM utilisateur autorisé à écrire sur Kinesis Video Streams.
Définissez les informations d'identification et la région.
export AWS_ACCESS_KEY_ID=
YourAccessKey
export AWS_SECRET_ACCESS_KEY=YourSecretKey
export AWS_DEFAULT_REGION=us-west-2
Pour les autres méthodes d'authentification, consultezFournissez des informations d'identification à kvssink.
Note
Le producteur C++ SDK utilise la région USA Ouest (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 de l'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-1
En fonction de votre support d'entrée, choisissez l'une des options suivantes :
Utiliser du matériel
Certains modèles de Raspberry Pi sont équipés d'encodeurs H.264 accélérés par matériel. Vous pouvez les utiliser à la place x264enc
d'un encodeur logiciel.
-
Assurez-vous que les GStreamer plugins sont installés :
sudo apt-get install gstreamer1.0-tools gstreamer1.0-plugins-bad
-
Type :
gst-inspect-1.0 | grep h264
Dé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 \ !
omxh264enc
control-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
"v4l2h264enc
etv4l2convert
:gst-launch-1.0 libcamerasrc \ ! video/x-raw,width=640,height=480,framerate=30/1,format=I420 \ !
v4l2convert
\ !v4l2h264enc
extra-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 certains 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 un message d'erreur comme celui-ci, cela signifie qu'il vous manque un GStreamer plugin :
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 logiciel de production Kinesis Video Streams C++ SDK. libcamerasrc
: Voir Erreur « Échec de l'activation du pool de mémoire tampon » pour installer l'libcamerasrc
GStreamerélément.omxh264enc
ouv4l2h264enc
:Suivez Installation des prérequis logiciels pour installer toutes les GStreamer bibliothèques. Si vous les avez tous installés et que ces éléments n'apparaissent pas, cela signifie que votre Raspberry Pi n'a pas le matériel nécessaire. Utilisez
x264enc
plutôt l'encodeur logiciel.Autre : suivez Installation des prérequis logiciels pour installer toutes les GStreamer bibliothèques. Différents GStreamer éléments se trouvent dans les différents groupes de GStreamer plugins (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 l'utiliser à la libcamera
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 alors que le module de caméra 2 n'GStreamerest pas libcamera
installé, vous risquez de rencontrer cette erreur lorsque vous essayez de détecter automatiquement le pipeline.
gst-launch-1.0 autovideosrc ! videoconvert ! autovideosink
Résolution :
Assurez-vous qu'il libcamera
est installé et utilisez-le comme élément source, plutôt quev4l2src
. Tapez ce qui suit pour installer l'libcamera
GStreamerélément :
sudo apt-get update sudo apt-get install gstreamer1.0-libcamera
Une fois libcamerasrc
installé, si vous utilisez l'autovideosrc
élément, vous GStreamer devriez automatiquement passer à la bonne source libcamerasrc
au lieu dev4l2src
.
Erreur de bus
Si vous recevez une erreur de bus peu après le démarrage kvssink
(généralement, au moment où l'HTTPappel est PutMedia
terminé), cela signifie que votre Raspberry Pi ne prend pas en charge l'accès à la mémoire non aligné. Les journaux ressembleront à ce qui 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 PIC Streams utilise un accès 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 mode d'accès SDK à la mémoire aligné, vous devez définir explicitement l'ALIGNED_MEMORY_MODEL
CMakeindicateur sur ON
lors de la compilationkvssink
, car sa valeur par défaut est. OFF
Voir Téléchargez et créez le logiciel de production Kinesis Video Streams C++ SDK pour des instructions plus détaillées.
L'horodatage se bloque et le pipeline s'arrête
Lors de l'utilisation x264enc
dans un GStreamer pipeline, vous pouvez rencontrer des situations où la chronologie du pipeline ralentit considérablement ou s'arrête complètement en quelques secondes.
Cela se produit parce 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. Par conséquent, 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 en savoir plus, consultez la documentation GStreamer
Résolution :
Configurez x264enc
avec l'option de zerolatency
réglage. Cela réduit considérablement la latence d'encodage en optimisant les scénarios en temps réel, garantissant ainsi un traitement et une sortie plus rapides des images.
Exemple de configuration :
... ! x264enc
tune=zerolatency
byte-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 produisant directement le H.264, en sautant cette étape de codage.
Pour de plus amples informations, veuillez consulter Utiliser du matériel.
Erreur de flux de données interne
Lorsque vous créez un GStreamer pipeline, vous connectez des éléments en reliant le bloc source d'un élément au bloc récepteur 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 « La connexion au pad a échoué » dans le journal indique qu'un problème GStreamer a été rencontré lors de la tentative d'établissement d'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, supprimez des éléments du pipeline. Remplacez l'élément le plus à droite par fakesink
des éléments et supprimez-les un par un.
Vous devrez peut-être ajuster les éléments capsfilter
Les cas courants demandent un framerate
ou resolution
que l'appareil photo ne prend pas en charge. gst-device-monitor-1.0
À utiliser pour obtenir le framerates
supportresolutions
, etformats
. Vous pouvez utiliser l'GStreamerélément Videoscale