View a markdown version of this page

Problembehandlung bei Kinesis-Videostreams - Amazon Kinesis Video Streams

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.

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.

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-name StreamName --endpoint https://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.

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:

  1. Fügen Sie log4j in die Datei pom.xml im Knoten dependencies ein:

    <dependency> <groupId>log4j</groupId> <artifactId>log4j</artifactId> <version>1.2.17</version> </dependency>
  2. Erstellen Sie im Verzeichnis target/classes eine Datei namens log4j.properties mit 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.

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_NALS wenn der ursprüngliche Stream im Annex-B Format ist. Dies ist der Standardwert im StreamDefinition-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 Ab sich 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ügtStreamDefinition.

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:

  1. Überprüfen Sie die technische Einrichtung der Kamera und prüfen Sie, ob sie richtig angeschlossen ist.

  2. Führen Sie die folgenden Schritte aus, um die Firmware zu aktualisieren:

    sudo rpi-update
  3. Starten Sie das Gerät neu.

  4. Führen Sie die folgenden Schritte aus, um den Treiber zu laden:

    sudo modprobe bcm2835-v4l2
  5. Ü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 zu /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:

https://github.com/awslabs/aws-sdk-android-samples/blob/master/AmazonKinesisVideoDemoApp/src/main/java/com/amazonaws/kinesisvideo/demoapp/fragment/StreamConfigurationFragment.java#L169

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.

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.