Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.
Streamen Sie Video in Ihren Kinesis-Videostream
Zur Ausführung der Beispielanwendung benötigen Sie die folgenden Informationen:
-
Name des Streams, der von Ihnen im Abschnitt Voraussetzungen erstellt wurde.
-
Die Konto-Anmeldeinformationen (Zugriffsschlüssel-ID und geheimer Zugriffsschlüssel), die von Ihnen unter Einen IAM Benutzer mit Schreibberechtigung für Kinesis Video Streams erstellen erstellt wurden
Legen Sie die Anmeldeinformationen und die Region fest.
export AWS_ACCESS_KEY_ID=
YourAccessKey
export AWS_SECRET_ACCESS_KEY=YourSecretKey
export AWS_DEFAULT_REGION=us-west-2
Weitere Authentifizierungsmethoden finden Sie unterGeben Sie Anmeldeinformationen ein für kvssink.
Anmerkung
Der C++-Producer SDK verwendet standardmäßig die Region USA West (Oregon
us-west-2
) (). Um die Standardeinstellung zu verwenden, AWS-Region erstellen Sie Ihren Kinesis-Videostream in der Region USA West (Oregon).Um eine andere Region für Ihren Kinesis-Videostream zu verwenden, legen Sie die folgende Umgebungsvariable auf Ihre Region fest (z. B.
us-east-1
):export AWS_DEFAULT_REGION=
us-east-1
Wählen Sie je nach Eingabemedium eine der folgenden Optionen aus:
Verwenden Sie Hardware
Einige Raspberry Pi-Modelle sind mit hardwarebeschleunigten H.264-Encodern ausgestattet. Sie können sie anstelle vonx264enc
, einem Software-Encoder, verwenden.
-
Stellen Sie sicher, dass die GStreamer Plugins installiert sind:
sudo apt-get install gstreamer1.0-tools gstreamer1.0-plugins-bad
-
Type:
gst-inspect-1.0 | grep h264
Stellen Sie fest, ob die folgenden Elemente verfügbar sind:
-
omxh264enc
-
v4l2h264enc
Wenn sie verfügbar sind, können Sie sie verwenden. Hier sind einige Pipeline-Beispiele, die diese Elemente verwenden:
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
undv4l2convert
: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
" -
Probleme mit der Laufzeit
Im Folgenden finden Sie einige häufig auftretende Laufzeitprobleme und deren Behebung.
Kein solches Element „xxxxxxxxx“
Wenn du eine Fehlermeldung wie die folgende erhältst, bedeutet das, dass dir ein GStreamer Plugin fehlt:
WARNING: erroneous pipeline: no element "videoconvert"
Auflösung
Ermitteln Sie anhand des fehlenden Elements die entsprechende Aktion:
-
kvssink
: Siehe Laden Sie den Kinesis Video Streams C++ Producer herunter und erstellen Sie ihn SDK. libcamerasrc
: Informationen Fehler „Die Aktivierung des Pufferpools ist fehlgeschlagen“ zur Installation deslibcamerasrc
GStreamer Elements finden Sie unter.omxh264enc
oderv4l2h264enc
:Folgen SieInstallieren Sie die Softwarevoraussetzungen, um alle GStreamer Bibliotheken zu installieren. Wenn Sie sie alle installiert haben und diese Elemente nicht angezeigt werden, bedeutet dies, dass Ihr Raspberry Pi nicht über die erforderliche Hardware verfügt. Verwenden Sie
x264enc
stattdessen den Software-Encoder.Andere: Folgen Sie diesen AnweisungenInstallieren Sie die Softwarevoraussetzungen, um alle GStreamer Bibliotheken zu installieren. Verschiedene GStreamer Elemente befinden sich in den verschiedenen GStreamer Plugin-Gruppen (gut, schlecht, hässlich). Stellen Sie also sicher, dass Sie sie alle installieren.
Fehler „Die Aktivierung des Pufferpools ist fehlgeschlagen“
Wenn Sie einen Fehler wie den folgenden erhalten, bedeutet dies, dass die verwendete Pipeline verwendet wirdv4l2src
, aber sie sollte libcamera
stattdessen verwenden.
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)
Wenn Sie beispielsweise die folgende Pipeline verwenden, bei der das Kameramodul 2 nicht libcamera
installiert GStreamer ist, kann dieser Fehler auftreten, wenn Sie versuchen, die Pipeline automatisch zu erkennen.
gst-launch-1.0 autovideosrc ! videoconvert ! autovideosink
Auflösung
Stellen Sie sicher, dass das installiert libcamera
ist, und verwenden Sie es als v4l2src
Quellelement und nicht. Geben Sie Folgendes ein, um das libcamera
GStreamer Element zu installieren:
sudo apt-get update sudo apt-get install gstreamer1.0-libcamera
Wenn Sie libcamerasrc
das autovideosrc
Element nach der Installation verwenden, GStreamer sollten Sie automatisch zur Verwendung der richtigen Quelle wechseln, libcamerasrc
anstatt vonv4l2src
.
Busfehler
Wenn Sie kurz nach dem Start einen Busfehler erhalten kvssink
(normalerweise etwa zu dem Zeitpunkt, zu dem der HTTP Anruf PutMedia
abgeschlossen ist), bedeutet dies, dass Ihr Raspberry Pi keinen unausgerichteten Speicherzugriff unterstützt. Die Protokolle werden wie folgt aussehen:
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 verwendet unausgerichteten Speicherzugriff, um die Speichernutzung zu optimieren, was nicht von allen Geräten unterstützt wird.
Auflösung
Um den Modus „SDKIn Aligned Memory Access“ zu verwenden, müssen Sie das ALIGNED_MEMORY_MODEL
CMake Flag ON
beim Kompilieren explizit auf setzenkvssink
, da standardmäßig OFF
Eine detailliertere Laden Sie den Kinesis Video Streams C++ Producer herunter und erstellen Sie ihn SDK Anleitung finden Sie unter.
Der Zeitstempel friert ein und die Pipeline gerät ins Stocken
Bei x264enc
der Verwendung in einer GStreamer Pipeline können Situationen auftreten, in denen sich die Timeline der Pipeline erheblich verlangsamt oder innerhalb weniger Sekunden vollständig zum Stillstand kommt.
Dies liegt daran, dass die x264enc
Standardeinstellungen zu einer hohen Kodierungslatenz führen können, die die Kapazität des Standardeingabepuffers übersteigt. Infolgedessen füllt sich der Eingabepuffer, wodurch Upstream-Elemente blockiert werden und die Pipeline zum Stillstand kommt.
Weitere Informationen finden Sie in der GStreamer-Dokumentation
Auflösung
Konfigurieren Sie x264enc
mit der zerolatency
Tuning-Option. Dadurch wird die Latenz bei der Kodierung erheblich reduziert, da für Echtzeitszenarien optimiert wird und sichergestellt wird, dass Frames schneller verarbeitet und ausgegeben werden.
Beispielkonfiguration:
... ! x264enc
tune=zerolatency
byte-stream=true speed-preset=ultrafast bframes=0 key-int-max=60 ! ...
Anmerkung
Diese Lösung verhindert zwar effektiv ein Blockieren der Pipeline, kann sich jedoch auf die Effizienz und Qualität der Kodierung auswirken. Für Szenarien, die sowohl eine geringe Latenz als auch eine hohe Qualität erfordern, sollten Sie alternative Ansätze in Betracht ziehen, z. B. Hardwareoptimierungen oder die Suche nach einer Webcam, die H.264 direkt ausgibt, und diesen Kodierungsschritt überspringen.
Weitere Informationen finden Sie unter Verwenden Sie Hardware.
Interner Datenstream-Fehler
Wenn Sie eine GStreamer Pipeline erstellen, verbinden Sie Elemente, indem Sie das Quell-Pad eines Elements mit dem Sink-Pad eines anderen Elements verknüpfen. Dieser Verbindungsprozess ermöglicht den Datenfluss vom Quellelement zum Senkenelement und bildet so eine Datenpipeline.
Die Fehlermeldung „Pad Link failed“ im Protokoll weist darauf hin, dass beim Versuch, eine Verbindung (Link) zwischen den Pads zweier Elemente in Ihrer Pipeline herzustellen, ein Problem GStreamer aufgetreten ist.
Pad link failed
Error received from element udpsrc0: Internal data stream error.
Auflösung
Stellen Sie fest, welche Elemente nicht miteinander verknüpft werden können. Um den Umfang der Pipeline einzugrenzen, entfernen Sie Elemente aus der Pipeline. Ersetzen Sie das Element ganz rechts durch Elemente fakesink
und entfernen Sie sie nacheinander.
Möglicherweise müssen Sie die Capsfilter-Elemente
Häufig wird nach einem framerate
oder gefragtresolution
, das die Kamera nicht unterstützt. Verwenden Siegst-device-monitor-1.0
, um die unterstützten framerates
resolutions
, und zu erhaltenformats
. Sie können das GStreamerVideoscale-Element