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.
Problembehandlung bei Kinesis-Videostreams
Verwenden Sie die folgenden Informationen, um häufig auftretende Probleme mit Amazon Kinesis Video Streams zu beheben.
Themen
Allgemeine Probleme
In diesem Abschnitt werden allgemeine Probleme beschrieben, die bei der Arbeit mit Kinesis Video Streams auftreten können.
Problembereiche
Latenz zu hoch
Die Latenz kann durch die Dauer der Fragmente verursacht werden, die an den Kinesis Video Streams-Dienst gesendet werden. Eine Möglichkeit, die Latenzzeit zwischen Producer und Service zu reduzieren, besteht darin, die Medien-Pipeline so zu konfigurieren, dass kürzere Fragmentlaufzeiten entstehen.
Um die Anzahl der in jedem Fragment gesendeten Frames zu reduzieren, reduzieren Sie den folgenden Wert inkinesis_video_gstreamer_sample_app.cpp:
g_object_set(G_OBJECT (data.encoder), "bframes", 0, "key-int-max",45, "bitrate", 512, NULL);
Anmerkung
Die Latenzen sind im Mozilla Firefox-Browser aufgrund der internen Implementierung des Video-Renderings höher.
API-Probleme
In diesem Abschnitt werden API-Probleme beschrieben, die bei der Arbeit mit Kinesis Video Streams auftreten können.
Problembereiche
Fehler: „Unbekannte Optionen“
GetMedia und GetMediaForFragmentList können mit dem folgenden Fehler fehlschlagen:
Unknown options: <filename>.mkv
Dieser Fehler tritt auf, wenn Sie den AWS CLI mit einem output Typ von json konfiguriert haben. Konfigurieren Sie den AWS CLI mit dem Standardausgabetyp (none) neu. Informationen zur Konfiguration von finden Sie AWS CLI unter configure in der AWS CLI Befehlsreferenz.
Fehler: „Der service/operation Name, der autorisiert werden soll, konnte nicht bestimmt werden“
GetMedia kann mit dem folgenden Fehler fehlschlagen:
Unable to determine service/operation name to be authorized
Dieser Fehler kann auftreten, wenn der Endpunkt nicht korrekt angegeben ist. Wenn Sie den Endpunkt abrufen, achten Sie darauf, den folgenden Parameter in den GetDataEndpoint Aufruf aufzunehmen, je nachdem, welche API aufgerufen werden soll:
--api-name GET_MEDIA --api-name PUT_MEDIA --api-name GET_MEDIA_FOR_FRAGMENT_LIST --api-name LIST_FRAGMENTS
Fehler: „Failed to put a frame in the stream“ (Es konnte kein Frame in den Stream eingefügt werden)
PutMedia kann mit dem folgenden Fehler fehlschlagen:
Failed to put a frame in the stream
Dieser Fehler kann auftreten, wenn für den Dienst keine Konnektivität oder Berechtigungen verfügbar sind. Führen Sie Folgendes in der AWS CLI aus und vergewissern Sie sich, dass die Stream-Informationen abgerufen werden können:
aws kinesisvideo describe-stream --stream-nameStreamName--endpointhttps://ServiceEndpoint.kinesisvideo.region.amazonaws.com
Wenn der Anruf fehlschlägt, finden Sie AWS CLI weitere Informationen unter Problembehandlung.
Fehler: „Der Dienst hat die Verbindung geschlossen, bevor die endgültige AckEvent Version empfangen wurde“
PutMedia kann mit dem folgenden Fehler fehlschlagen:
com.amazonaws.SdkClientException: Service closed connection before final AckEvent was received
Dieser Fehler kann auftreten, wenn PushbackInputStream nicht korrekt implementiert ist. Stellen Sie sicher, dass die unread() Methoden korrekt implementiert sind.
Fehler: "STATUS_STORE_OUT_OF_MEMORY"
PutMedia kann mit dem folgenden Fehler fehlschlagen:
The content store is out of memory.
Dieser Fehler tritt auf, wenn der Inhaltesspeicher nicht ausreichend groß dimensioniert wurde. Um den Inhaltsspeicher zu vergrößern, erhöhen Sie den Wert von StorageInfo.storageSize. Weitere Informationen finden Sie unter StorageInfo.
Fehler: „Die Anmeldeinformationen sollten auf eine gültige Region beschränkt sein.“
Dieser Fehler tritt auf, wenn die Signaturregion nicht mit der Endpunktregion übereinstimmt.
Wenn Sie beispielsweise us-west-2 als Ihre Signaturregion angeben, aber versuchen, eine Verbindung zum kinesisvideo.us-east-1.amazonaws.com (us-east-1) -Endpunkt herzustellen, erhalten Sie diesen Fehler.
In einigen Anwendungen, wie kvssink, ist die Region-Fallback-Kette standardmäßig auf eingestellt. us-west-2 Vergewissern Sie sich, dass Sie Ihre Region entsprechend der von Ihnen verwendeten Anwendung richtig eingestellt haben.
HLS-Probleme
Wenn Ihr Videostream nicht korrekt wiedergegeben wird, finden Sie weitere Informationen unterBehebung von HLS-Problemen.
Probleme mit Java
In diesem Abschnitt wird beschrieben, wie häufig auftretende Java-Probleme bei der Arbeit mit Kinesis Video Streams behoben werden.
Problembereiche
Aktivieren von Java-Protokollen
Zur Behebung von Problemen mit Java-Beispielen und -Bibliotheken ist es hilfreich, die Debug-Protokolle zu aktivieren und zu überprüfen. Gehen Sie zum Aktivieren der Debug-Protokolle folgendermaßen vor:
-
Fügen Sie
log4jin die Dateipom.xmlim Knotendependenciesein:<dependency> <groupId>log4j</groupId> <artifactId>log4j</artifactId> <version>1.2.17</version> </dependency> -
Erstellen Sie im Verzeichnis
target/classeseine Datei namenslog4j.propertiesmit folgendem Inhalt:# Root logger option log4j.rootLogger=DEBUG, stdout # Redirect log messages to console log4j.appender.stdout=org.apache.log4j.ConsoleAppender log4j.appender.stdout.Target=System.out log4j.appender.stdout.layout=org.apache.log4j.PatternLayout log4j.appender.stdout.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n log4j.logger.org.apache.http.wire=DEBUG
Die Debug-Protokolle werden anschließend zur IDE-Konsole ausgegeben.
Probleme mit der Producer-Bibliothek
In diesem Abschnitt werden Probleme beschrieben, die bei der Verwendung von Zu Kinesis Video Streams hochladen auftreten können.
Problembereiche
Fehler: „Fehler beim Senden des Frames an den Kinesis-Video-Client“
GStreamer-Anwendung stoppt auf OS X mit der Meldung „Streamen gestoppt, Grund nicht ausgehandelt”
Datei jni.h beim Kompilieren auf macOS High Sierra nicht gefunden
Assertion auf gst_value_set_fraction_range_full auf Raspberry Pi
STATUS_MKV_INVALID_ANNEXB_NALU_IN_FRAME_DATA (0x3200000d)-Fehler unter Android
"Ungültiger Objektname abgelaufen", Fehler bei der Verwendung der IoT-Autorisierung
Das Producer-SDK kann nicht kompiliert werden
Überprüfen Sie, ob die erforderlichen Bibliotheken in Ihrem Pfad vorhanden sind. Zur Bestätigung führen Sie den folgenden Befehl aus:
env | grep LD_LIBRARY_PATH LD_LIBRARY_PATH=/home/local/awslabs/amazon-kinesis-video-streams-producer-sdk-cpp/kinesis-video-native-build/downloads/local/lib
Der Videostream wird nicht in der Konsole angezeigt
Um Ihren Videostream in der Konsole anzuzeigen, muss er H.264 im AVCC-Format codiert sein. Prüfen Sie Folgendes, wenn der Stream nicht angezeigt wird:
-
Sie NAL-Anpassungsflags sind auf eingestellt,
NAL_ADAPTATION_ANNEXB_NALS | NAL_ADAPTATION_ANNEXB_CPD_NALSwenn der ursprüngliche Stream im Annex-B Format ist. Dies ist der Standardwert imStreamDefinition-Konstruktor. -
Sie stellen die Code Private Data ordnungsgemäß bereit. Denn H.264 das ist der Sequenzparametersatz (SPS) und der Bildparametersatz (PPS). Abhängig von der Medienquelle können diese Daten separat aus der Medienquelle abgerufen oder im Frame codiert werden.
Viele elementare Streams haben das folgende Format, wobei
Absich der Annex-B Startcode (001 oder 0001) befindet:Ab(Sps)Ab(Pps)Ab(I-frame)Ab(P/B-frame) Ab(P/B-frame)…. Ab(Sps)Ab(Pps)Ab(I-frame)Ab(P/B-frame) Ab(P/B-frame)Der CPD (Codec Private Data), wenn er als SPS und PPS im Stream H.264 ist, kann an das aVCC-Format angepasst werden. Sofern die Medienpipeline die CPD nicht separat bereitstellt, kann die Anwendung die CPD aus dem Frame extrahieren, indem sie nach dem ersten Idr-Frame (der SPS und PPS enthalten sollte) sucht, die beiden NALUs extrahiert (die Ab (Sps) Ab (Pps) sein werden) und sie in die CPD einfügt
StreamDefinition.
Fehler: „Security token included in the request is invalid” (Das Sicherheits-Token der Anfrage ist ungültig) beim Streamen von Daten mit der GStreamer-Demo-Anwendung
Wenn dieser Fehler auftritt, liegt ein Problem mit Ihren Anmeldeinformationen vor. Überprüfen Sie Folgendes:
-
Wenn Sie temporäre Anmeldeinformationen verwenden, müssen Sie den Sitzungs-Token angeben.
-
Überprüfen Sie, ob Ihre temporären Anmeldeinformationen abgelaufen sind.
-
Vergewissern Sie sich, dass Sie über die richtigen Rechte verfügen.
-
Vergewissern Sie sich unter MacOS, dass Sie keine Anmeldeinformationen im Schlüsselbund zwischengespeichert haben.
Fehler: „Fehler beim Senden des Frames an den Kinesis-Video-Client“
Wenn dieser Fehler auftritt, sind die Zeitstempel im Quell-Stream nicht richtig gesetzt. Gehen Sie wie folgt vor:
-
Verwenden Sie die neueste SDK-Version, in der es möglicherweise schon ein Update gibt, das Ihr Problem behebt.
-
Stellen Sie für den Stream mit hoher Qualität eine höhere Bitrate ein und korrigieren Sie alle Jitter im Quellstream, sofern die Kamera dies unterstützt.
GStreamer-Anwendung stoppt auf OS X mit der Meldung „Streamen gestoppt, Grund nicht ausgehandelt”
Das Streamen kann unter OS X mit der folgenden Meldung abgebrochen werden:
Debugging information: gstbasesrc.c(2939): void gst_base_src_loop(GstPad *) (): /GstPipeline:test-pipeline/GstAutoVideoSrc:source/GstAVFVideoSrc:source-actual-src-avfvide: streaming stopped, reason not-negotiated (-4)
Eine mögliche Problemumgehung besteht darin, die Framerate-Parameter aus dem gst_caps_new_simple Aufruf zu entfernen in: kinesis_video_gstreamer_sample_app.cpp
GstCaps *h264_caps = gst_caps_new_simple("video/x-h264", "profile", G_TYPE_STRING, "baseline", "stream-format", G_TYPE_STRING, "avc", "alignment", G_TYPE_STRING, "au", "width", GST_TYPE_INT_RANGE, 320, 1920, "height", GST_TYPE_INT_RANGE, 240, 1080,"framerate", GST_TYPE_FRACTION_RANGE, 0, 1, 30, 1,NULL);
Fehler: „Failed to allocate heap” (Heap konnte nicht zugeordnet werden) beim Erstellen des Kinesis-Video-Clients in der GStreamer-Demo auf Raspberry Pi
Die GStreamer-Beispielanwendung versucht, 512 MB RAM zuzuweisen, die möglicherweise nicht auf Ihrem System verfügbar sind. Sie können die Größe des zugewiesenen Speicherplatzes verringern, indem Sie den folgenden Wert in KinesisVideoProducer.cpp verkleinern:
device_info.storageInfo.storageSize =512* 1024 * 1024;
Fehler: „Illegal Instruction” (Ungültige Anweisung) beim Ausführen der GStreamer-Demo auf Raspberry Pi
Wenn beim Ausführen der GStreamer-Demo der folgende Fehler auftritt, überprüfen Sie, ob Sie die Anwendung für die richtige Version Ihres Geräts kompiliert haben. (Stellen Sie beispielsweise sicher, dass Sie nicht für Raspberry Pi 3 kompilieren, wenn Sie auf Raspberry Pi 2 arbeiten.)
INFO - Initializing curl. Illegal instruction
Die Kamera kann nicht auf Raspberry Pi geladen werden.
Um zu überprüfen, ob die Kamera geladen wurde, führen Sie die folgenden Schritte aus:
ls /dev/video*
Ist die Suche ergebnislos, führen Sie die folgenden Schritte aus:
vcgencmd get_camera
Die Ausgabe sollte folgendermaßen oder ähnlich aussehen:
supported=1 detected=1
Wenn der Treiber die Kamera nicht erkennt, gehen Sie wie folgt vor:
-
Überprüfen Sie die technische Einrichtung der Kamera und prüfen Sie, ob sie richtig angeschlossen ist.
-
Führen Sie die folgenden Schritte aus, um die Firmware zu aktualisieren:
sudo rpi-update -
Starten Sie das Gerät neu.
-
Führen Sie die folgenden Schritte aus, um den Treiber zu laden:
sudo modprobe bcm2835-v4l2 -
Überprüfen Sie, ob die Kamera erkannt wurde:
ls /dev/video*
Kamera kann auf macOS High Sierra nicht gefunden werden.
Unter macOS High Sierra kann die Demo-Anwendung die Kamera nicht finden, wenn mehr als eine Kamera verfügbar ist.
Datei jni.h beim Kompilieren auf macOS High Sierra nicht gefunden
Um diesen Fehler zu beheben, aktualisieren Sie Ihre Installation von Xcode auf die neueste Version.
Curl-Fehler beim Ausführen der GStreamer-Demo-Anwendung
Um Curl-Fehler beim Ausführen der GStreamer-Demo-Anwendung zu beheben, kopieren Sie diese Zertifikatdatei/etc/ssl/cert.pem.
Timestamp/range Behauptung zur Laufzeit auf Raspberry Pi
Wenn zur Laufzeit eine Zeitstempel-/Zeitraum-Assertion auftritt, aktualisieren Sie die Firmware und starten Sie das Gerät neu:
sudo rpi-update $ sudo reboot
Assertion auf gst_value_set_fraction_range_full auf Raspberry Pi
Die folgende Assertion erscheint, wenn der uv4l-Service ausgeführt wird:
gst_util_fraction_compare (numerator_start, denominator_start, numerator_end, denominator_end) < 0' failed
Wenn dies der Fall ist, stoppen Sie den uv4l-Service und starten Sie die Anwendung neu.
STATUS_MKV_INVALID_ANNEXB_NALU_IN_FRAME_DATA (0x3200000d)-Fehler unter Android
Der folgende Fehler tritt auf, wenn NAL-Anpassungsflags für den Medien-Stream fehlerhaft ist:
putKinesisVideoFrame(): Failed to put a frame with status code 0x3200000d
Wenn dieser Fehler auftritt, geben Sie das richtige .withNalAdaptationFlags-Flag für Ihr Medium (Beispiel: NAL_ADAPTATION_ANNEXB_CPD_NALS) an. Geben Sie dieses Flag in der folgenden Zeile des Android an:
Fehler: Die maximale Fragmentdauer wurde erreicht
Dieser Fehler tritt auf, wenn ein Medienfragment in einem Stream die maximale Fragmentdauer überschreitet. Das Limit für die maximale Fragmentdauer API-Dienstkontingente für Medien und archivierte Medien finden Sie im Abschnitt.
Versuchen Sie, das Problem wie folgt zu beheben:
-
Wenn Sie eine webcam/USB Kamera verwenden, führen Sie einen der folgenden Schritte aus:
-
Wenn Sie die auf Schlüsselbildern basierende Fragmentierung verwenden, stellen Sie den Encoder so ein, dass Schlüsselbilder innerhalb von 10 Sekunden bereitgestellt werden.
-
Wenn Sie keine auf Schlüsselframes basierende Fragmentierung verwenden, legen Sie bei der Definition des Streams die maximale Fragmentdauer auf einen Wert festSchreiben und untersuchen Sie den Code, der unter 10 Sekunden liegt.
-
Wenn Sie Software-Encoder (wie x264) in der GStreamer-Pipeline verwenden, können Sie das key-int-max-Attribut innerhalb von 10 Sekunden auf einen Wert setzen. Setzen Sie zum Beispiel key-int-max auf 60 und fps auf 30, um Keyframes alle 2 Sekunden zu aktivieren.
-
-
Wenn Sie eine RPI-Kamera verwenden, legen Sie das Keyframe-Intervall-Attribut auf weniger als 10 Sekunden fest.
-
Wenn Sie eine IP-Kamera (RTSP) verwenden, legen Sie die GOP-Größe auf 60 fest.
"Ungültiger Objektname abgelaufen", Fehler bei der Verwendung der IoT-Autorisierung
Um diesen Fehler (HTTP Error 403: Response: {"message":"Invalid thing name passed"}) zu vermeiden, wenn Sie IoT-Anmeldeinformationen für die Autorisierung verwenden, stellen Sie sicher, dass der Wert von stream-name (ein erforderlicher Parameter des kvssink Elements) mit dem Wert von identisch ist. iot-thingname Weitere Informationen finden Sie unter Referenz zu den GStreamer-Elementparametern.
Probleme mit der Stream-Parser-Bibliothek
In diesem Abschnitt werden Probleme beschrieben, die bei der Verwendung von Streamen Sie mithilfe der Parser-Bibliothek auftreten können.
Problembereiche
Es kann nicht auf einen einzelnen Frame aus dem Stream zugegriffen werden
Stellen Sie sicher, dass Ihr Stream die richtigen privaten Codec-Daten enthält, um in Ihrer Consumer-Anwendung auf einen einzelnen Frame von einer Streaming-Quelle zuzugreifen. Informationen über das Format der Daten in einem Stream finden Sie unter Datenmodell.
In der folgenden Testdatei auf der Website erfahren Sie, wie Sie private Codec-Daten für den Zugriff auf einen Frame verwenden: GitHub KinesisVideoRendererExampleTest.java
Fragmentdekodierungsfehler
Wenn Ihre Fragmente in einem H.264 Format und einer Ebene, die der Browser unterstützt, nicht richtig codiert sind, wird beim Abspielen Ihres Streams in der Konsole möglicherweise der folgende Fehler angezeigt:
Fragment Decoding Error There was an error decoding the video data. Verify that the stream contains valid H.264 content
Wenn dies passiert, überprüfen Sie Folgendes:
-
Die Auflösung der Frames stimmt mit der in den Codec Private Data angegebenen Auflösung überein.
-
Das H.264 Profil und die Ebene der kodierten Frames entsprechen dem Profil und der Ebene, die in den privaten Codec-Daten angegeben sind.
-
Der Browser unterstützt die profile/level Kombination. Die meisten aktuellen Browser unterstützt alle Profil- und Level-Kombinationen.
-
Die Zeitstempel sind präzise und in der richtigen Reihenfolge, und es werden keine doppelten Zeitstempel erstellt.
-
Ihre Anwendung codiert die Frame-Daten mithilfe des H.264 Formats.
Probleme mit dem Netzwerk
Wenn Sie beim Versuch, eine Verbindung zu Kinesis Video Streams herzustellen, Verbindungsfehler wie „Connection Timeout“ oder „Connection Failed“ (Verbindungs-Timeout) oder „Verbindung fehlgeschlagen“ sehen, kann das an Einschränkungen des IP-Adressbereichs in Ihrer Netzwerkkonfiguration liegen.
Wenn in Ihrem Setup Einschränkungen für den IP-Adressbereich von Kinesis Video Streams gelten, aktualisieren Sie Ihre Netzwerkkonfiguration, sodass die IP-Adressbereiche von Kinesis Video Streams in die Liste aufgenommen werden können. https://ip-ranges.amazonaws.com/ip-ranges.json
Wichtig
Die Liste der IP-Bereiche ist keine vollständige Liste der Kinesis Video Streams-IP-Adressen. Schließen Sie die angezeigten IP-Adressbereiche ein und beachten Sie, dass sich die IP-Adressen im Laufe der Zeit ändern können.
Weitere Informationen finden Sie unter AWS IP-Bereiche. Folgen Sie dem Abonnementverfahren, um benachrichtigt zu werden, wenn sich IP-Bereiche ändern.