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 das 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 Plugin zu finden.
kvssinkWeitere Informationen finden Sie unter Laden Sie das Kinesis Video Streams C++ Producer SDK herunter und erstellen Sie es.
Legen Sie die Anmeldeinformationen und die Region fest.
export AWS_ACCESS_KEY_ID=YourAccessKeyexport AWS_SECRET_ACCESS_KEY=YourSecretKeyexport AWS_DEFAULT_REGION=us-west-2Weitere Authentifizierungsmethoden finden Sie unterGeben Sie Anmeldeinformationen für kvssink ein .
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, setzen Sie die folgende Umgebungsvariable auf Ihre Region (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 von verwenden, bei dem es sich um einen x264enc Software-Encoder handelt.
-
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 dessen, welches Element fehlt, die entsprechende Aktion:
-
kvssink: Siehe Laden Sie das Kinesis Video Streams C++ Producer SDK herunter und erstellen Sie es. libcamerasrc: Siehe So Fehler „Die Aktivierung des Pufferpools ist fehlgeschlagen“ installieren Sie daslibcamerasrcGStreamer-Element.omxh264encoder:v4l2h264encFolgen Sie Installieren Sie die Softwarevoraussetzungen den Anweisungen, um alle GStreamer-Bibliotheken zu installieren. Wenn Sie sie alle installiert haben und diese Elemente nicht angezeigt werden, bedeutet das, dass Ihr Raspberry Pi nicht über die entsprechende Hardware verfügt. Verwenden Sie
x264encstattdessen den Software-Encoder.Sonstiges: Folgen SieInstallieren 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 libcamerasrc stattdessen sollte sie verwendet werden.
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 ist, kann dieser Fehler auftreten, wenn GStreamer versucht, automatisch zu erkennen, welche Elemente verwendet werden sollen.
gst-launch-1.0 autovideosrc ! videoconvert ! autovideosink
Auflösung
Vergewissern Sie sich, dass das Programm installiert libcamerasrc ist, und verwenden Sie es als Quellelement und nicht. v4l2src Geben Sie Folgendes ein, um das libcamerasrc GStreamer-Element zu installieren:
sudo apt-get update sudo apt-get install gstreamer1.0-libcamera
Sobald libcamerasrc das Element installiert ist und Sie das autovideosrc Element verwenden, sollte GStreamer automatisch auf die richtige Quelle umschalten. libcamerasrc v4l2src
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 das, 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 unabgestimmten Speicherzugriff, um die Speichernutzung zu optimieren. Dies wird nicht von allen Geräten unterstützt.
Auflösung
Um das SDK im angepassten Speicherzugriffsmodus zu verwenden, müssen Sie das ALIGNED_MEMORY_MODEL CMake-Flag ON beim Kompilieren explizit auf setzenkvssink, da es standardmäßig auf ist. OFF Eine detailliertere Laden Sie das Kinesis Video Streams C++ Producer SDK herunter und erstellen Sie es Anleitung finden Sie unter.
Timestamp friert ein und die Pipeline kommt zum Stillstand
Bei x264enc der Verwendung in einer GStreamer-Pipeline können Situationen auftreten, in denen sich die Zeitleiste 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 Standard-Eingabepuffers übersteigt. Infolgedessen füllt sich der Eingabepuffer, was dazu führt, dass 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. Dies reduziert die Codierungslatenz erheblich, indem es für Echtzeitszenarien optimiert wird und sicherstellt, 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 das Stoppen der Pipeline, kann sich jedoch auf die Effizienz und Qualität der Codierung auswirken. Für Szenarien, die sowohl eine niedrige Latenz als auch eine hohe Qualität erfordern, sollten Sie alternative Herangehensweisen in Betracht ziehen, z. B. die Verwendung von Hardwareoptimierungen oder die Suche nach einer Webcam, die H.264 direkt ausgibt, wobei dieser Codierungsschritt übersprungen wird.
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 Prozess, bis der erste abgeschlossen ist.
Auflösung
Erstellen Sie ein Loopback-Gerät, das es mehreren Prozessen ermöglicht, die Loopback-Schnittstelle gleichzeitig zu verwenden. Weitere Informationen finden Sie unter Stack Exchange. https://raspberrypi.stackexchange.com/questions/19630/take-picam-image-while-motion-is-running/19897#19897
Interner Datenstromfehler
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 GStreamer beim Versuch, eine Verbindung (Link) zwischen den Pads zweier Elemente in Ihrer Pipeline herzustellen, auf ein Problem gestoßen 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 https://gstreamer.freedesktop.org/documentation/coreelements/capsfilter.html?gi-language=c
In den meisten Fällen wird nach einem framerate oder gefragt, was resolution die Kamera nicht unterstützt. Verwenden Sie es gst-device-monitor-1.0 im Terminal, um das unterstützte frameratesresolutions, und abzurufenformats. Sie können das Videoscale
Geben Sie im Terminal ein, um die unterstützten Formate für ein einzelnes GStreamer-Element zu überprüfen. gst-inspect-1.0 element-name