Risoluzione dei problemi relativi a Kinesis Video Streams - Flusso di video Amazon Kinesis

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

Risoluzione dei problemi relativi a Kinesis Video Streams

Utilizza le seguenti informazioni per risolvere i problemi più comuni riscontrati con Amazon Kinesis Video Streams.

Risoluzione dei problemi generali

Questa sezione descrive i problemi generali che potresti riscontrare quando lavori con Kinesis Video Streams.

Latenza troppo elevata

La latenza potrebbe essere causata dalla durata dei frammenti inviati al servizio Kinesis Video Streams. Uno dei modi per ridurre la latenza tra producer e servizio è configurare la pipeline dei file multimediali per ottenere frammenti di più breve durata.

Per ridurre il numero di frame inviati in ogni frammento, riduci il seguente valore in: kinesis_video_gstreamer_sample_app.cpp

g_object_set(G_OBJECT (data.encoder), "bframes", 0, "key-int-max", 45, "bitrate", 512, NULL);
Nota

Le latenze sono più elevate nel browser Mozilla Firefox a causa dell'implementazione interna del rendering video.

Risoluzione dei problemi relativi alle API

Questa sezione descrive i problemi relativi alle API che potresti riscontrare quando lavori con Kinesis Video Streams.

Errore: "Opzioni sconosciute"

Se le richieste GetMedia eGetMediaForFragmentList non riescono, può essere generato questo errore:

Unknown options: <filename>.mkv

Questo errore si verifica se l'hai configurato AWS CLI con un output tipo di. json Riconfigurare il AWS CLI con il tipo di output predefinito (none). Per informazioni sulla configurazione di AWS CLI, consulta configure nel AWS CLI Command Reference.

Errore: "Unable to determine service/operation name to be authorized" (Impossibile determinare il nome del servizio/operazione da autorizzare)

Se la richiesta GetMedia non riesce, può essere generato questo errore:

Unable to determine service/operation name to be authorized

Questo errore può verificarsi se l'endpoint non è specificato correttamente. Quando ricevi l'endpoint, assicurati di includere il seguente parametro nella GetDataEndpoint chiamata, a seconda dell'API da chiamare:

--api-name GET_MEDIA --api-name PUT_MEDIA --api-name GET_MEDIA_FOR_FRAGMENT_LIST --api-name LIST_FRAGMENTS

Errore: "Failed to put a frame in the stream" (Impossibile inserire un fotogramma nel flusso)

Se la richiesta PutMedia non riesce, può essere generato questo errore:

Failed to put a frame in the stream

Questo errore può verificarsi se la connettività o le autorizzazioni non sono disponibili per il servizio. Esegui quanto segue in e verifica che le informazioni sullo stream possano essere recuperate: AWS CLI

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

Se la chiamata fallisce, consulta Risoluzione dei problemi AWS CLI degli errori per ulteriori informazioni.

Errore: «Il servizio ha chiuso la connessione prima della ricezione del messaggio finale AckEvent »

Se la richiesta PutMedia non riesce, può essere generato questo errore:

com.amazonaws.SdkClientException: Service closed connection before final AckEvent was received

Questo errore può verificarsi se l'elemento PushbackInputStream non è implementato correttamente. Verifica che i unread() metodi siano implementati correttamente.

Errore "STATUS_STORE_OUT_OF_MEMORY"

Se la richiesta PutMedia non riesce, può essere generato questo errore:

The content store is out of memory.

Questo errore si verifica quando allo store dei contenuti non è allocato spazio a sufficienza. Per ovviare, aumentare il valore di StorageInfo.storageSize. Per ulteriori informazioni, consulta StorageInfo.

Risoluzione dei problemi relativi a HLS

Se lo streaming video non viene riprodotto correttamente, consultaRisoluzione dei problemi relativi a HLS.

Risoluzione dei problemi relativi a Java

Questa sezione descrive come risolvere i problemi Java più comuni riscontrati durante l'utilizzo di Kinesis Video Streams.

Abilitazione dei log di Java

Per risolvere i problemi relativi agli esempi e alle librerie Java, è utile abilitare ed esaminare i log di debug. Per abilitarli, procedere come segue:

  1. Aggiungere log4j al file pom.xml nel nodo dependencies:

    <dependency> <groupId>log4j</groupId> <artifactId>log4j</artifactId> <version>1.2.17</version> </dependency>
  2. Nella directory target/classes, creare un file denominato log4j.properties con il seguente contenuto:

    # 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

I log di debug vengono quindi stampati nella console IDE.

Risoluzione dei problemi di Producer Library

Questa sezione descrive i problemi che possono verificarsi durante l'utilizzo della Producer Library.

Impossibile compilare l'SDK producer

Controllare che le librerie richieste siano presenti nel percorso. Per eseguire una verifica, utilizzare il comando seguente:

$ 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

Il flusso video non viene visualizzato nella console

Perché sia visualizzato nella console, il flusso video deve essere codificato con H.264 nel formato AvCC. Se il flusso non viene visualizzato, verificare quanto segue:

  • I Flag di adattamento del NAL sono impostati su NAL_ADAPTATION_ANNEXB_NALS | NAL_ADAPTATION_ANNEXB_CPD_NALS se il flusso originale è in formato Annex-B. Questo è il valore di default nel costruttore StreamDefinition.

  • I dati privati del codec sono forniti correttamente. Per H.264, si tratta del set di parametri di sequenza (SPS) e del set di parametri delle immagini (PPS). A seconda dell'origine del contenuto multimediale, questi dati potrebbero essere recuperati dall'origine separatamente o codificati nel fotogramma.

    Molti flussi elementari sono nel formato seguente, dove Ab è il codice di inizio (001 o 0001) Annex-B:

    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)

    Il CPD (Codec Private Data), se H.264 è presente nello stream come SPS e PPS, può essere adattato al formato AVCC. A meno che la pipeline multimediale non fornisca il CPD separatamente, l'applicazione può estrarre il CPD dal frame cercando il primo frame Idr (che dovrebbe contenere SPS e PPS), estrarre i due NALU (che saranno Ab (Sps) Ab (Pps)) e impostarli nel CPD inStreamDefinition.

Errore "Security token included in the request is invalid" durante lo streaming dei dati con l'applicazione demo GStreamer

Questo errore indica che è presente un problema con le credenziali. Verificare quanto segue:

  • Se si utilizzano credenziali di sicurezza temporanee, è necessario specificare il token di sessione.

  • Verificare che le credenziali temporanee non siano scadute.

  • Verificare che siano impostati gli opportuni diritti.

  • Su macOS, verificare che non vi siano credenziali memorizzate nella cache in Keychain.

Errore "Failed to submit frame to Kinesis Video client"

Questo errore indica che i timestamp non sono impostati in modo corretto nel flusso sorgente. Eseguire quanto segue:

  • Utilizzare l'SDK di esempio più recente, che potrebbe includere un aggiornamento per la risoluzione del problema.

  • Imposta lo stream di alta qualità su un bitrate più alto e correggi eventuali jitter nel flusso sorgente, se la fotocamera lo supporta.

L'applicazione GStreamer viene arrestata con il messaggio "streaming stopped, reason not-negotiated" su OS X

Lo streaming potrebbe essere arrestato su OS X con il seguente messaggio:

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)

Una possibile soluzione alternativa consiste nel rimuovere i parametri del frame rate dalla gst_caps_new_simple chiamata 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);

Errore "Failed to allocate heap" durante la creazione del client Kinesis Video nella demo GStreamer su Raspberry Pi

L'applicazione di esempio GStreamer cerca di allocare 512 MB di RAM, che potrebbero non essere disponibili nel sistema. È possibile diminuire tale allocazione riducendo il seguente valore in KinesisVideoProducer.cpp:

device_info.storageInfo.storageSize = 512 * 1024 * 1024;

Errore "Illegal Instruction" durante l'esecuzione della demo GStreamer su Raspberry Pi

Se riscontri il seguente errore durante l'esecuzione della demo di GStreamer, verifica di aver compilato l'applicazione per la versione corretta del tuo dispositivo. (Ad esempio, verifica che non stai compilando per Raspberry Pi 3 quando utilizzi Raspberry Pi 2.)

INFO - Initializing curl. Illegal instruction

La videocamera non viene caricata su Raspberry Pi

Per controllare se la videocamera viene caricata, eseguire quanto segue:

$ ls /dev/video*

Se l'operazione non ha esito, eseguire quanto segue:

$ vcgencmd get_camera

L'output visualizzato dovrebbe essere simile al seguente:

supported=1 detected=1

Se il driver non rileva la videocamera, procedere come segue:

  1. Controllare la configurazione fisica della videocamera e verificare che sia collegata correttamente.

  2. Eseguire quanto segue per aggiornare il firmware:

    $ sudo rpi-update
  3. Riavviare il dispositivo.

  4. Eseguire quanto segue per caricare il driver:

    $ sudo modprobe bcm2835-v4l2
  5. Verificare che la videocamera sia stata rilevata:

    $ ls /dev/video*

Impossibile trovare la videocamera su macOS High Sierra

Su macOS High Sierra, l'applicazione demo non è in grado di trovare la videocamera se ne è disponibile più di una.

File jni.h non trovato durante la compilazione su macOS High Sierra

Per risolvere questo errore, aggiornare l'installazione di Xcode alla versione più recente.

Errori di curl durante l'esecuzione dell'applicazione demo GStreamer

Per risolvere gli errori di curl durante l'esecuzione dell'applicazione demo GStreamer, copiare questo file di certificato in /etc/ssl/cert.pem.

Asserzione timestamp/intervallo in fase di runtime su Raspberry Pi

Se si verifica un'asserzione di intervallo timestamp in fase di runtime, aggiornare il firmware e riavviare il dispositivo:

$ sudo rpi-update $ sudo reboot

Asserzione su gst_value_set_fraction_range_full su Raspberry Pi

La seguente asserzione viene visualizzata se è in esecuzione il servizio uv4l:

gst_util_fraction_compare (numerator_start, denominator_start, numerator_end, denominator_end) < 0' failed

In questo caso, interrompere il servizio uv4l e riavviare l'applicazione.

STATUS_MKV_INVALID_ANNEXB_NALU_IN_FRAME_DATA (0x3200000d) error on Android

Il seguente errore viene visualizzato se Flag di adattamento del NAL non sono corretti per il flusso di file multimediali:

putKinesisVideoFrame(): Failed to put a frame with status code 0x3200000d

Se si verifica questo errore, specificare il flag .withNalAdaptationFlags corretto per i file multimediali (ad esempio, NAL_ADAPTATION_ANNEXB_CPD_NALS). Fornire questo flag nella seguente riga di Android Producer Library:

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

È stata raggiunta la durata massima del frammento (errore)

Questo errore si verifica quando un frammenti di file multimediale in un flusso supera il limite massimo di durata. Vedi il limite massimo di durata del frammento nella Quote dei servizi API multimediali e archiviati sezione.

Per risolvere il problema, prova a eseguire queste operazioni:

  • Se stai usando una webcam/fotocamera USB, procedi in uno dei seguenti modi:

    • Se utilizzi la frammentazione basata su frame chiave, imposta l'encoder in modo che fornisca i fotogrammi chiave entro 10 secondi.

    • Se non utilizzi la frammentazione basata su frame chiave, quando definisci lo stream inFase 2: Scrittura ed analisi del codice, imposta il limite massimo di durata del frammento su un valore inferiore a 10 secondi.

    • Se utilizzi codificatori software (come x264) nella pipeline GStreamer, puoi impostare l'attributo su un valore entro 10 secondi. key-int-max Ad esempio, impostate su key-int-max 60, con fps impostati su 30, per abilitare i keyframe ogni 2 secondi.

  • Se utilizzate una fotocamera RPI, impostate l'attributo keyframe-interval su un valore inferiore a 10 secondi.

  • Se utilizzi una telecamera IP (RTSP), imposta la dimensione GOP su 60.

Errore "Invalid thing name passed (Passato nome di cosa non valido)" quando si utilizza l'autorizzazione IoT

Per evitare questo errore (HTTP Error 403: Response: {"message":"Invalid thing name passed"}) quando utilizzi le credenziali IoT per l'autorizzazione, assicurati che il valore di stream-name (un parametro obbligatorio dell'kvssinkelemento) sia identico al valore diiot-thingname. Per ulteriori informazioni, consulta Riferimento ai parametri dell'elemento GStreamer.

Risoluzione dei problemi relativi alla libreria Stream Parser

Questa sezione descrive i problemi che possono verificarsi durante l'utilizzo della Libreria parser del flusso.

Impossibile accedere a un singolo fotogramma del flusso

Per accedere a un singolo frame da una sorgente di streaming nella tua applicazione consumer, verifica che lo stream contenga i dati privati del codec corretti. Per informazioni sul formato dei dati in un flusso, consultare Modello di dati.

Per informazioni su come utilizzare i dati privati del codec per accedere a un frame, consultate il seguente file di test sul GitHub sito Web: .java KinesisVideoRendererExampleTest

Errore di decodifica frammento

Se i frammenti non sono correttamente codificati in un formato H.264 e in un livello supportato dal browser, durante la riproduzione del flusso nella console può essere generato il seguente errore:

Fragment Decoding Error There was an error decoding the video data. Verify that the stream contains valid H.264 content

In questo caso, verificare quanto segue:

  • La risoluzione dei fotogrammi corrisponde alla risoluzione specificata nei dati privati del codec (Codec Private Data).

  • Il profilo e il livello H.264 dei fotogrammi codificati corrispondono al profilo e al livello specificati nei dati privati del codec (Codec Private Data).

  • Il browser supporta la combinazione profilo/livello. La maggior parte dei browser attuali supporta tutte le combinazioni di profilo e livello.

  • I timestamp sono accurati e nell'ordine corretto, senza creazione di duplicati in corso.

  • L'applicazione codifica i dati dei fotogrammi utilizzando il formato H.264.