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 Erstellen Sie einen IAM-Benutzer mit der Berechtigung, in Kinesis Video Streams zu schreiben erstellt wurden
GStreamer ist in der Lage, das
kvssinkPlugin zu finden. Weitere Informationen finden Sie unter Laden Sie das Kinesis Video Streams C++ Producer SDK herunter und erstellen Sie es.
Stellen Sie die Anmeldeinformationen und die Region ein.
export AWS_ACCESS_KEY_ID=YourAccessKeyexport AWS_SECRET_ACCESS_KEY=YourSecretKeyexport AWS_DEFAULT_REGION=us-west-2Weitere Authentifizierungsmethoden finden Sie unterGeben Sie Anmeldeinformationen ein für kvssink.
Anmerkung
Das 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-1Wä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 h264Stellen 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 \ !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"v4l2h264encundv4l2convert: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" -
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 das Kinesis Video Streams C++ Producer SDK herunter und erstellen Sie es. libcamerasrc: Informationen Fehler „Die Aktivierung des Pufferpools ist fehlgeschlagen“ zur Installation deslibcamerasrcGStreamer Elements finden Sie unter.omxh264encoderv4l2h264enc: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
x264encstattdessen 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 libcamerasrc 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 libcamerasrc installiert GStreamer ist, kann dieser Fehler auftreten, wenn Sie versuchen, automatisch zu erkennen, welche Elemente verwendet werden sollen.
gst-launch-1.0 autovideosrc ! videoconvert ! autovideosink
Auflösung
Stellen Sie sicher, dass das installiert libcamerasrc ist, und verwenden Sie es nicht als v4l2src Quellelement. Geben Sie Folgendes ein, um das libcamerasrc 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-Aufruf 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 das SDK im Modus „Aligned Memory Access“ zu verwenden, müssen Sie das ALIGNED_MEMORY_MODEL CMake Flag ON beim Kompilieren explizit auf setzenkvssink, da es standardmäßig auf eingestellt ist. OFF Eine detailliertere Laden Sie das Kinesis Video Streams C++ Producer SDK herunter und erstellen Sie es 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:
... ! x264enctune=zerolatencybyte-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.
Es können nicht mehrere Pipelines gleichzeitig von demselben v4l2 Gerät aus ausgeführt werden
Auf Geräte wie /dev/video0 kann jeweils nur von einem Prozess zugegriffen werden. Wenn mehrere Prozesse gleichzeitig versuchen, darauf zuzugreifen, wartet der zweite, bis der erste abgeschlossen ist.
Auflösung
Erstellen Sie ein Loopback-Gerät, sodass mehrere Prozesse die Loopback-Schnittstelle gleichzeitig verwenden können. Weitere Informationen finden Sie unter Stack Exchange.
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 Sie gst-device-monitor-1.0 im Terminal, um die unterstützten frameratesresolutions, und zu erhaltenformats. Sie können das GStreamer Videoscale-Element
Geben gst-inspect-1.0 element-name Sie in das Terminal ein, um die unterstützten Formate für ein einzelnes GStreamer Element zu überprüfen.