As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.
Solução de problemas do Kinesis Video Streams
Use as informações a seguir para solucionar problemas comuns encontrados com o Amazon Kinesis Video Streams.
Tópicos
Problemas gerais
Esta seção descreve problemas gerais que você pode encontrar ao trabalhar com o Kinesis Video Streams.
Problemas
Latência muito alta
A latência pode ser causada pela duração dos fragmentos enviados ao serviço Kinesis Video Streams. Uma forma de reduzir a latência entre o produtor e o serviço é configurar o pipeline de mídia para produzir durações de fragmento mais curtas.
Para reduzir o número de quadros enviados em cada fragmento, reduza o seguinte valor emkinesis_video_gstreamer_sample_app.cpp
:
g_object_set(G_OBJECT (data.encoder), "bframes", 0, "key-int-max",
45
, "bitrate", 512, NULL);
nota
As latências são superiores no navegador do Mozilla Firefox devido à implementação interna da renderização de vídeo.
Problemas na API
Esta seção descreve API problemas que você pode encontrar ao trabalhar com o Kinesis Video Streams.
Problemas
Erro: "opções desconhecidas"
GetMedia
e GetMediaForFragmentList
podem apresentar falha com o seguinte erro:
Unknown options: <filename>.mkv
Esse erro ocorre se você configurou o AWS CLI com um output
tipo dejson
. Reconfigure o AWS CLI com o tipo de saída padrão (none
). Para obter informações sobre como configurar o AWS CLI, consulte configure na Referência de AWS CLI Comandos.
Erro: "Unable to determine service/operation name to be authorized" (Não foi possível determinar o nome do serviço/operação a ser autorizado)
GetMedia
pode falhar com o erro a seguir:
Unable to determine service/operation name to be authorized
Esse erro pode ocorrer se o endpoint não for especificado corretamente. Ao obter o endpoint, certifique-se de incluir o seguinte parâmetro na GetDataEndpoint
chamada, dependendo do API a ser chamado:
--api-name GET_MEDIA --api-name PUT_MEDIA --api-name GET_MEDIA_FOR_FRAGMENT_LIST --api-name LIST_FRAGMENTS
Erro: "Failed to put a frame in the stream" (Falha ao inserir um quadro no streaming)
PutMedia
pode falhar com o erro a seguir:
Failed to put a frame in the stream
Esse erro pode ocorrer se não houver conectividade ou permissões para o serviço. Execute o seguinte no AWS CLI e verifique se as informações do stream podem ser recuperadas:
aws kinesisvideo describe-stream --stream-name
StreamName
--endpointhttps://ServiceEndpoint.kinesisvideo.region.amazonaws.com
Se a chamada falhar, consulte Solução de problemas de AWS CLI erros para obter mais informações.
Erro: “O serviço fechou a conexão antes do recebimento final AckEvent ”
PutMedia
pode falhar com o erro a seguir:
com.amazonaws.SdkClientException: Service closed connection before final AckEvent was received
Esse erro pode ocorrer se PushbackInputStream
for implementado inadequadamente. Verifique se os unread()
métodos foram implementados corretamente.
Erro: "STATUS_ STORE _ OUT MEMORY _OF_”
PutMedia
pode falhar com o erro a seguir:
The content store is out of memory.
Esse erro ocorre quando o armazenamento de conteúdo não está alocado com dimensões suficientes. Para aumentar o tamanho do armazenamento de conteúdo, aumente o valor de StorageInfo.storageSize
. Para obter mais informações, consulte StorageInfo.
Erro: “A credencial deve ter como escopo uma região válida”.
Esse erro ocorre se a região de assinatura não corresponder à região do endpoint.
Por exemplo, se você especificar us-west-2
como sua região de assinatura, mas tentar se conectar ao endpoint kinesisvideo.us-east-1.amazonaws.com
(us-east-1
), você receberá esse erro.
Em alguns aplicativos, como kvssink, o padrão da cadeia de fallback da região é. us-west-2
Verifique se você configurou sua região corretamente de acordo com o aplicativo que você está usando.
Problemas na HLS
Se o stream de vídeo não for reproduzido corretamente, consulteSolução de problemas do HLS.
Problemas de Java
Esta seção descreve como solucionar problemas comuns de Java encontrados ao trabalhar com o Kinesis Video Streams.
Problemas
Habilitar logs do Java
Para solucionar problemas com amostras e bibliotecas de Java, é útil ativar e examinar os registros de depuração. Para habilitar logs de depuração, faça o seguinte:
-
Adicione
log4j
ao arquivopom.xml
no nó
dependencies
:<dependency> <groupId>log4j</groupId> <artifactId>log4j</artifactId> <version>1.2.17</version> </dependency>
-
No diretório
target/classes
, crie um arquivo denominadolog4j.properties
com o conteúdo a seguir:# 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
Em seguida, os registros de depuração são impressos no IDE console.
Problemas na biblioteca do produtor
Esta seção descreve problemas que você pode encontrar ao trabalhar com o Faça o upload para o Kinesis Video Streams.
Problemas
Erro: "falha ao enviar quadro ao cliente de vídeo do Kinesis"
Erro: “Instrução ilegal” ao executar a GStreamer demonstração no Raspberry Pi
Arquivo jni.h não encontrado durante a compilação no macOS High Sierra
Erros de curl ao executar o aplicativo de GStreamer demonstração
Declaração de time stamp/intervalo no tempo de execução no Raspberry Pi
Declaração em gst_value_set_fraction_range_full no Raspberry Pi
STATUSErro _ MKV _ INVALID _ ANNEXB _ NALU _IN_ FRAME _ DATA (0x3200000d) no Android
Erro "Invalid thing name passed" ao usar a autorização da IoT
Não é possível compilar o produtor SDK
Verifique se as bibliotecas necessárias estão no caminho. Para verificá-las, use o seguinte comando:
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
O streaming de vídeo não aparece no console
Para exibir o fluxo de vídeo no console, ele deve ser codificado no formato AvCC usando H.264. Se o stream não for exibido, verifique o seguinte:
-
Seus NALbandeiras de adaptação estão definidos como
NAL_ADAPTATION_ANNEXB_NALS | NAL_ADAPTATION_ANNEXB_CPD_NALS
se o stream original estiver no formato Annex-B. Este é o valor padrão no construtorStreamDefinition
. -
Você está fornecendo os dados privados do codec corretamente. Para H.264, esse é o parâmetro de sequência set (SPS) e o parâmetro de imagem set (). PPS Dependendo de sua origem de mídia, esses dados podem ser recuperados da origem de mídia separadamente ou codificados no quadro.
Muitos streams elementares estão no seguinte formato, em que
Ab
é o código de início de Annex-B (001 ou 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)
O CPD (Codec Private Data), se o H.264 estiver no fluxo como SPS ePPS, pode ser adaptado para o formato AvCC. A menos que o pipeline de mídia forneça CPD separadamente, o aplicativo pode extraí-lo CPD do quadro procurando o primeiro quadro Idr (que deve conter o SPS ePPS), extrair os dois NALUs (que serão Ab (Sps) Ab (Pps)) e configurá-lo no in. CPD
StreamDefinition
Erro: “O token de segurança incluído na solicitação é inválido” ao transmitir dados usando o aplicativo de GStreamer demonstração
Se esse erro ocorrer, isso significa que existe um problema com suas credenciais. Verifique o seguinte:
-
Se estiver usando credenciais temporárias, você precisa especifica o token da sessão.
-
Verifique se suas credenciais temporárias expiraram.
-
Verifique se você tem os direitos apropriados configurados.
-
No macOS, verifique se você tem credenciais armazenadas em cache no Keychain.
Erro: "falha ao enviar quadro ao cliente de vídeo do Kinesis"
Esse erro ocorre, pois os time stamps não estão definidos corretamente no streaming de origem. Faça o seguinte:
-
Use a SDK amostra mais recente, que pode ter uma atualização que corrija seu problema.
-
Defina o fluxo de alta qualidade para uma taxa de bits mais alta e corrija qualquer instabilidade no fluxo de origem, se a câmera suportar isso.
GStreamero aplicativo é interrompido com a mensagem “streaming interrompido, motivo não negociado” no OS X
O streaming pode ser interrompido no OS X com a seguinte mensagem:
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)
Uma possível solução alternativa para isso é remover os parâmetros de taxa de quadros da gst_caps_new_simple
chamada em: 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);
Erro: “Falha na alocação da pilha” ao criar o Kinesis Video Client em uma demonstração no GStreamer Raspberry Pi
O aplicativo de GStreamer amostra tenta alocar 512 MB deRAM, o que pode não estar disponível em seu sistema. Você pode reduzir essa alocação, diminuindo o seguinte valor em KinesisVideoProducer.cpp
:
device_info.storageInfo.storageSize =
512
* 1024 * 1024;
Erro: “Instrução ilegal” ao executar a GStreamer demonstração no Raspberry Pi
Se você encontrar o erro a seguir ao executar a GStreamer demonstração, verifique se você compilou o aplicativo para a versão correta do seu dispositivo. (Por exemplo, verifique se você não está compilando para o Raspberry Pi 3 quando estiver executando o Raspberry Pi 2.)
INFO - Initializing curl. Illegal instruction
A câmera não carrega no Raspberry Pi
Para verificar se a câmera está carregada, execute o seguinte:
ls /dev/video*
Se nada for encontrado, execute o seguinte:
vcgencmd get_camera
A saída deve ser semelhante à seguinte:
supported=1 detected=1
Se o driver não detectar a câmera, faça o seguinte:
-
Verifique a configuração da câmera física e se ela está conectada corretamente.
-
Execute os comandos a seguir para atualizar o firmware:
sudo rpi-update
-
Reinicie o dispositivo.
-
Execute os comandos a seguir para carregar o driver:
sudo modprobe bcm2835-v4l2
-
Verifique se a câmera foi detectada:
ls /dev/video*
Não é possível encontrar a câmera no macOS High Sierra
No macOS High Sierra, o aplicativo de demonstração não consegue encontrar a câmera quando existe mais de uma câmera disponível.
Arquivo jni.h não encontrado durante a compilação no macOS High Sierra
Para resolver esse erro, atualize sua instalação do Xcode para a versão mais recente.
Erros de curl ao executar o aplicativo de GStreamer demonstração
Para resolver erros de curl ao executar o aplicativo de GStreamer demonstração, copie esse arquivo de certificado/etc/ssl/cert.pem
Declaração de time stamp/intervalo no tempo de execução no Raspberry Pi
Se uma declaração de time stamp/intervalo ocorrer no tempo de execução, atualize o firmware e reinicie o dispositivo:
sudo rpi-update $ sudo reboot
Declaração em gst_value_set_fraction_range_full no Raspberry Pi
A seguinte declaração será exibida se o serviço uv4l
estiver em execução:
gst_util_fraction_compare (numerator_start, denominator_start, numerator_end, denominator_end) < 0' failed
Se isso ocorrer, interrompa o serviço uv4l
e reinicie o aplicativo.
STATUSErro _ MKV _ INVALID _ ANNEXB _ NALU _IN_ FRAME _ DATA (0x3200000d) no Android
O seguinte erro será exibido se o NALbandeiras de adaptação estiver incorreto para o streaming de mídia:
putKinesisVideoFrame(): Failed to put a frame with status code 0x3200000d
Se esse erro ocorrer, forneça o sinalizador .withNalAdaptationFlags
correto para a mídia (por exemplo, NAL_ADAPTATION_ANNEXB_CPD_NALS
). Forneça esse sinalizador na seguinte linha do Android:
A duração máxima do fragmento foi atingida (erro)
Esse erro ocorre quando um fragmento de mídia em um streaming excede o limite máximo de duração do fragmento. Veja o limite máximo de duração do fragmento na Cotas de serviços de mídia e mídia arquivada API seção.
Para resolver esse problema, tente o seguinte:
-
Se você estiver usando uma USB webcam/câmera, faça o seguinte:
-
Se você estiver usando fragmentação baseada em quadros-chave, configure o codificador para fornecer quadros-chave em 10 segundos.
-
Se você não estiver usando a fragmentação baseada em quadros-chave, ao definir o stream emEscreva e examine o código, defina o limite máximo de duração do fragmento para um valor inferior a 10 segundos.
-
Se você estiver usando codificadores de software (como x264) no GStreamer pipeline, você pode definir o key-int-max atributo para um valor em 10 segundos. Por exemplo, key-int-max defina como 60, com fps definido como 30, para ativar quadros-chave a cada 2 segundos.
-
-
Se você estiver usando uma RPI câmera, defina o atributo keyframe-interval para ser inferior a 10 segundos.
-
Se você estiver usando uma câmera IP (RTSP), defina o GOP tamanho para 60.
Erro "Invalid thing name passed" ao usar a autorização da IoT
Para evitar esse erro (HTTP Error 403: Response: {"message":"Invalid thing name passed"}
) ao usar credenciais de IoT para autorização, certifique-se de que o valor de stream-name
(um parâmetro obrigatório do kvssink
elemento) seja idêntico ao valor de. iot-thingname
Para obter mais informações, consulte GStreamerreferência do parâmetro do elemento.
Problemas na biblioteca do analisador de fluxo
Esta seção descreve problemas que você pode encontrar ao trabalhar com o Transmita usando a biblioteca de analisadores.
Não é possível acessar um quadro único do streaming
Para acessar um único quadro de uma fonte de streaming em seu aplicativo consumidor, verifique se o stream contém os dados privados corretos do codec. Para obter mais informações sobre o formato dos dados em um stream, consulte Modelo de dados.
Erro na decodificação de fragmentos
Se seus fragmentos não estão codificados corretamente em um formato H.264 e no nível ao qual o navegador oferece suporte, você pode ver o seguinte erro ao executar seu streaming no console:
Fragment Decoding Error There was an error decoding the video data. Verify that the stream contains valid H.264 content
Se isso ocorrer, verifique se:
-
A resolução dos quadros corresponde com a resolução especificada nos dados privados do codec.
-
O perfil H.264 e o nível dos quadros codificados correspondem com o nível e o perfil especificado nos dados privados do codec.
-
O navegador é compatível com a combinação de perfil/nível. A maioria dos navegadores atuais são compatíveis com todas as combinações de nível e perfil.
-
Os time stamps são precisos e estão na ordem correta, e nenhum time stamp duplicado está sendo criado.
-
O aplicativo está codificando os dados do quadro usando o formato H.264.
Problemas de rede
Se você encontrar erros de conexão, como “Tempo limite de conexão” ou “Falha na conexão”, ao tentar se conectar ao Kinesis Video Streams, isso pode ser devido a restrições de intervalo de endereços IP na sua configuração de rede.
Importante
A lista de intervalos de IP não é uma lista completa dos endereços IP do Kinesis Video Streams. Inclua os intervalos de endereços IP que você vê e esteja ciente de que os endereços IP podem mudar com o tempo.
Para obter mais informações, consulte Intervalos de AWS IP. Para ser notificado quando os intervalos de IP mudarem, siga o procedimento de assinatura.