Problembehebung bei Kinesis Video Streams - 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.

Problembehebung bei Kinesis Video Streams

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 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.

APIProbleme

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: „Unable to determine service/operation name to be authorized“ (Zu autorisierender Service-/Operationsname kann nicht ermittelt 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 erhalten, stellen Sie sicher, dass Sie den folgenden Parameter in den GetDataEndpoint Aufruf aufnehmen, je nachdem, welcher aufgerufen werden API 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 den folgenden Befehl in der AWS CLI aus und stellen Sie sicher, dass die Stream-Informationen abgerufen werden können:

aws kinesisvideo describe-stream --stream-name StreamName --endpoint https://ServiceEndpoint.kinesisvideo.region.amazonaws.com

Schlägt der Anruf fehl, 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 MEMORY _OF_“

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 us-west-2 beispielsweise Ihre Signierregion angeben, aber versuchen, eine Verbindung zum Endpunkt kinesisvideo.us-east-1.amazonaws.com (us-east-1) herzustellen, wird dieser Fehler angezeigt.

In einigen Anwendungen, wie kvssink, ist die Regions-Fallback-Kette standardmäßig auf eingestellt. us-west-2 Stellen Sie sicher, dass Sie Ihre Region entsprechend der von Ihnen verwendeten Anwendung richtig eingestellt haben.

HLSProbleme

Falls Ihr Videostream nicht korrekt wiedergegeben wird, finden Sie weitere Informationen unterBeheben von HLS-Problemen.

Probleme mit Java

In diesem Abschnitt wird beschrieben, wie Sie häufig auftretende Java-Probleme beheben können, die bei der Arbeit mit Kinesis Video Streams auftreten.

Aktivieren von Java-Protokollen

Um Probleme mit Java-Beispielen und -Bibliotheken zu beheben, ist es hilfreich, die Debug-Logs zu aktivieren und zu untersuchen. 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 dann auf der IDE Konsole gedruckt.

Probleme mit der Producer-Bibliothek

In diesem Abschnitt werden Probleme beschrieben, die bei der Verwendung von Zu Kinesis Video Streams hochladen auftreten können.

Der Producer kann nicht kompiliert werden SDK

Ü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

Damit der Videostream in der Konsole angezeigt werden kann, muss er mit H.264 im AvCC-Format codiert worden sein. Prüfen Sie Folgendes, wenn der Stream nicht angezeigt wird:

  • Für NALAnpassungsflags ist NAL_ADAPTATION_ANNEXB_NALS | NAL_ADAPTATION_ANNEXB_CPD_NALS eingestellt, wenn der Originalstream im Format Annex-B vorliegt. Dies ist der Standardwert im StreamDefinition-Konstruktor.

  • Sie stellen die Code Private Data ordnungsgemäß bereit. Für H.264 sind dies 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 einfache Streams liegen im folgenden Format vor (Ab ist der Annex-B-Startcode – 001 oder 0001):

    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) kann, falls H.264 als SPS und im Stream istPPS, an das AvCC-Format angepasst werden. Sofern die Medienpipeline das nicht CPD separat vorgibt, kann die Anwendung das CPD aus dem Frame extrahieren, indem sie nach dem ersten Idr-Frame sucht (der das SPS und enthalten solltePPS), die beiden extrahiert NALUs (was dann Ab (Sps) Ab (Pps) sein wird) und es in den In einfügt. CPD StreamDefinition

Fehler: „Das in der Anfrage enthaltene Sicherheitstoken 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 das neueste SDK Beispiel, das möglicherweise ein Update enthält, das Ihr Problem behebt.

  • Stellen Sie für den qualitativ hochwertigen Stream eine höhere Bitrate ein und korrigieren Sie jeglichen Jitter im Quellstream, sofern die Kamera dies unterstützt.

GStreamerDie Anwendung wird unter OS X mit der Meldung „Streaming gestoppt, Grund nicht ausgehandelt“ beendet

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 Parameter für die Bildrate 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: „Heap konnte nicht zugewiesen werden“ beim Erstellen des Kinesis Video Client in der GStreamer Demo auf dem Raspberry Pi

Die GStreamer Beispielanwendung versucht, 512 MB zuzuweisenRAM, die auf Ihrem System möglicherweise nicht 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: „Ungültiger Befehl“ beim Ausführen der GStreamer Demo auf dem Raspberry Pi

Wenn beim Ausführen der GStreamer Demo der folgende Fehler auftritt, stellen Sie sicher, dass 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 laufen.)

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 Demo-Anwendung GStreamer

Um Curl-Fehler bei der Ausführung der GStreamer Demo-Anwendung zu beheben, kopieren Sie diese Zertifikatsdatei nach. /etc/ssl/cert.pem

Zeitstempel-/Zeitraum-Assertion während der 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 auf Android

Der folgende Fehler tritt auf, wenn NALAnpassungsflags 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-samplesblob/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. Informationen zur maximalen Fragmentdauer finden Sie im Kontingente für Medien- und Archivmediendienste API Abschnitt.

Versuchen Sie, das Problem wie folgt zu beheben:

  • Wenn Sie eine USB Webcam/Kamera verwenden, gehen Sie wie folgt vor:

    • Wenn Sie die Keyframe-basierte Fragmentierung verwenden, stellen Sie den Encoder so ein, dass er Keyframes innerhalb von 10 Sekunden bereitstellt.

    • Wenn Sie keine Keyframe-basierte Fragmentierung verwenden, legen Sie bei der Definition des Stream-Ins die maximale Fragmentdauer auf einen Wert festSchreiben und untersuchen Sie den Code, der weniger als 10 Sekunden beträgt.

    • 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. Legen Sie beispielsweise den Wert 60 und key-int-max die Bildrate pro Sekunde auf 30 fest, 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 (RTSP) -Kamera verwenden, setzen Sie die GOP Größe auf 60.

"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 istiot-thingname. Weitere Informationen finden Sie unter GStreamerReferenz zu den 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

Um auf einen einzelnen Frame aus einer Streaming-Quelle in Ihrer Consumer-Anwendung zuzugreifen, stellen Sie sicher, dass Ihr Stream die richtigen privaten Codec-Daten enthält. Informationen über das Format der Daten in einem Stream finden Sie unter Datenmodell.

In der folgenden Testdatei auf der GitHub Website erfahren Sie, wie Sie private Codec-Daten für den Zugriff auf einen Frame verwenden können: .java KinesisVideoRendererExampleTest

Fragmentdekodierungsfehler

Wenn Ihre Fragmente nicht korrekt in einem H.264-Format und auf einem vom Browser unterstützten Level kodiert sind , wird möglicherweise die folgende Fehlermeldung angezeigt, wenn Sie Ihren Stream in der Konsole wiedergeben:

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 das Level der kodierten Frames stimmt mit dem Profil und dem Level überein, die in den Codec Private Data angegeben sind.

  • Der Browser unterstützt die Profil/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 kodiert die Frame-Daten mit dem H.264-Format.

Probleme mit dem Netzwerk

Wenn beim Versuch, eine Verbindung zu Kinesis Video Streams herzustellen, Verbindungsfehler wie „Verbindungstimeout“ oder „Verbindung fehlgeschlagen“ angezeigt werden, kann dies an Einschränkungen des IP-Adressbereichs in Ihrer Netzwerkkonfiguration liegen.

Wenn in Ihrem Setup IP-Adressbereichsbeschränkungen für Kinesis Video Streams gelten, aktualisieren Sie Ihre Netzwerkkonfiguration, sodass die IP-Adressbereiche von Kinesis Video Streams zugelassen werden.

Wichtig

Die IP-Bereichsliste ist keine vollständige Liste der IP-Adressen von Kinesis Video Streams. Geben Sie die angezeigten IP-Adressbereiche an 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.