Kinesis Video Streams 문제 해결 - Amazon Kinesis Video Streams

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

Kinesis Video Streams 문제 해결

다음 정보를 사용하여 Amazon Kinesis Video Streams에서 발생하는 일반적인 문제를 해결할 수 있습니다.

일반 문제

이 섹션에서는 Kinesis Video Streams를 사용할 때 발생할 수 있는 일반적인 문제에 대해 설명합니다.

너무 긴 지연 시간

Kinesis Video Streams 서비스로 전송되는 프래그먼트의 지속 시간으로 인해 지연 시간이 발생할 수 있습니다. 생산자와 서비스 사이의 지연 시간을 줄이는 한 가지 방법은 조각 지속 시간을 단축하도록 미디어 파이프라인을 구성하는 것입니다.

각 프래그먼트에서 전송되는 프레임 수를 줄이려면 다음 값을 줄여야 합니다. kinesis_video_gstreamer_sample_app.cpp

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

비디오 렌더링의 내부 구현으로 인해 Mozilla Firefox 브라우저의 지연 시간이 더 깁니다.

API문제

이 섹션에서는 Kinesis Video Streams로 작업할 때 발생할 수 있는 API 문제를 설명합니다.

오류: "알 수 없는 옵션"

GetMediaGetMediaForFragmentList가 다음 오류로 인해 실패할 수 있습니다.

Unknown options: <filename>.mkv

이 오류는 를 output 유형으로 AWS CLI 구성한 경우 발생합니다. json 를 기본 출력 유형 (none) AWS CLI 으로 재구성하십시오. 구성에 대한 자세한 내용은 AWS CLI 명령 참조의 구성을 참조하십시오. AWS CLI

오류: "Unable to determine service/operation name to be authorized"(권한을 부여할 서비스/작업 이름을 확인할 수 없음)

GetMedia가 다음 오류로 인해 실패할 수 있습니다.

Unable to determine service/operation name to be authorized

이 오류는 엔드포인트가 제대로 지정되지 않은 경우 발생할 수 있습니다. 엔드포인트를 가져올 때는 호출할 파라미터에 따라 GetDataEndpoint 호출에 다음 파라미터를 API 포함해야 합니다.

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

오류: "Failed to put a frame in the stream"(스트림에 프레임을 넣지 못했음)

PutMedia가 다음 오류로 인해 실패할 수 있습니다.

Failed to put a frame in the stream

이 오류는 서비스에서 연결 또는 권한을 사용할 수 없는 경우 발생할 수 있습니다. 에서 AWS CLI다음을 실행하고 스트림 정보를 검색할 수 있는지 확인합니다.

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

호출이 실패할 경우 자세한 내용은 AWS CLI 오류 문제 해결을 참조하십시오.

오류: “최종 연결이 수신되기 전에 서비스가 연결을 AckEvent 끊었습니다.”

PutMedia가 다음 오류로 인해 실패할 수 있습니다.

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

이 오류는 PushbackInputStream이 올바로 구현되지 않을 경우 발생할 수 있습니다. unread()메서드가 올바르게 구현되었는지 확인하십시오.

오류: "STATUS_ STORE _ OUT MEMORY _OF_”

PutMedia가 다음 오류로 인해 실패할 수 있습니다.

The content store is out of memory.

이 오류는 콘텐츠 스토어가 충분한 크기로 할당되지 않을 때 나타납니다. 콘텐츠 스토어 크기를 늘리려면 StorageInfo.storageSize 값을 증가시킵니다. 자세한 내용은 StorageInfo 단원을 참조하십시오.

HLS이슈

비디오 스트림이 제대로 재생되지 않는 경우 을 참조하십시오HLS 문제 해결.

Java 문제

이 섹션에서는 Kinesis Video Streams를 사용할 때 발생하는 일반적인 Java 문제를 해결하는 방법을 설명합니다.

Java 로그 활성화

Java 샘플 및 라이브러리 문제를 해결하려면 디버그 로그를 활성화하고 검사하는 것이 좋습니다. 디버그 로그를 활성화하려면 다음을 수행합니다.

  1. log4jpom.xml 노드에 있는 dependencies 파일에 추가합니다.

    <dependency> <groupId>log4j</groupId> <artifactId>log4j</artifactId> <version>1.2.17</version> </dependency>
  2. target/classes 디렉터리에 다음 콘텐츠로 log4j.properties라는 파일을 생성합니다.

    # 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

그러면 디버그 로그가 콘솔에 인쇄됩니다. IDE

프로듀서 라이브러리 문제

이 단원에서는 생산자 라이브러리 사용 시 발생할 수 있는 문제에 대해 설명합니다.

프로듀서를 컴파일할 수 없습니다. SDK

필요한 라이브러리가 경로에 있는지 확인합니다. 이를 확인하려면 다음 명령을 사용합니다.

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

비디오 스트림이 콘솔에 나타나지 않음

콘솔에 비디오 스트림을 표시하려면 AvCC 형식으로 H.264를 사용하여 인코딩해야 합니다. 스트림이 보이지 않으면 다음을 확인합니다.

  • 기존 스트림이 Annex-B 형식에 있으면 NAL 적응 플래그NAL_ADAPTATION_ANNEXB_NALS | NAL_ADAPTATION_ANNEXB_CPD_NALS로 설정됩니다. 이는 StreamDefinition 생성자의 기본값입니다.

  • 코덱 프라이빗 데이터를 올바르게 제공하고 있습니다. H.264의 경우 이는 시퀀스 파라미터 세트 (SPS) 와 영상 파라미터 세트 () 입니다. PPS 미디어 원본에 따라 이 데이터를 별도로 미디어 원본에서 검색하거나 프레임에 인코딩할 수 있습니다.

    초기 스트림은 다음 형식이며 Ab가 Annex-B 시작 코드(001 혹은 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)

    H.264가 SPS 및 PPS 로 스트림에 있는 경우 CPD (코덱 개인 데이터) 를 avCC 형식에 맞게 조정할 수 있습니다. 미디어 파이프라인이 CPD 별도로 제공하지 않는 한, 응용 프로그램은 첫 번째 Idr 프레임 (and가 포함되어야 함) 을 찾아 CPD 프레임에서 데이터를 SPS 추출하고, 두 프레임 (Ab (SpsPPS) Ab NALUs (Pps)) 을 추출한 다음 in에 설정할 수 있습니다. CPD StreamDefinition

데모 애플리케이션을 사용하여 데이터를 스트리밍할 때 오류: “요청에 포함된 보안 토큰이 유효하지 않습니다.” GStreamer

이 오류가 발생하면 자격 증명에 문제가 있는 것입니다. 다음을 확인합니다.

  • 임시 자격 증명을 사용하는 경우 세션 토큰을 지정해야 합니다.

  • 임시 자격 증명이 만료되지 않았는지 확인합니다.

  • 적절한 권한이 설정되어 있는지 확인합니다.

  • macOS에서 키체인에 자격 증명이 캐시되어 있지 않은지 확인합니다.

오류: "Kinesis 비디오 클라이언트에 프레임을 제출하지 못 함"

이 오류가 발생하면 타임스탬프가 소스 스트림에 제대로 설정되지 않은 것입니다. 다음을 시도해 보십시오.

  • 문제를 해결하는 업데이트가 있을 수 있는 최신 SDK 샘플을 사용하세요.

  • 고품질 스트림을 더 높은 비트레이트로 설정하고, 카메라가 지원하는 경우 소스 스트림의 모든 지터를 수정하십시오.

GStreamerOS X에서 “스트리밍 중지, 이유 협상 안 됨” 메시지가 표시되면서 애플리케이션이 중지됩니다.

다음 메시지와 함께 OS X에서 스트리밍이 중단될 수 있음:

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)

이 문제를 해결할 수 있는 방법은 호출에서 프레임 속도 매개변수를 제거하는 것입니다. gst_caps_new_simple 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);

오류: 라즈베리파이에서 GStreamer Kinesis Video Client를 데모로 생성할 때 “힙을 할당하지 못했습니다.”

GStreamer샘플 애플리케이션은 시스템에서 사용할 수 없을 수도 있는 512MB의 RAM 할당을 시도합니다. KinesisVideoProducer.cpp에서 다음 값을 줄임으로써 이 할당을 줄일 수 있습니다.

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

오류: Raspberry Pi에서 GStreamer 데모를 실행할 때 “잘못된 명령” 발생

GStreamer데모를 실행할 때 다음 오류가 발생하는 경우 애플리케이션이 올바른 장치 버전에 맞게 컴파일되었는지 확인하십시오. (예를 들어, 라즈베리 파이 2에서 실행 중일 때는 라즈베리 파이 3용으로 컴파일하고 있지 않은지 확인하세요.)

INFO - Initializing curl. Illegal instruction

카메라가 Raspberry Pi에서 로드하지 못함

카메라가 로드되었는지 확인하려면 다음을 실행합니다.

ls /dev/video*

아무 것도 없으면 다음을 실행합니다.

vcgencmd get_camera

다음과 같이 출력됩니다

supported=1 detected=1

드라이버가 카메라를 감지하지 못하면 다음을 수행합니다.

  1. 실제 카메라 설정을 확인하고 올바르게 연결되었는지 확인하십시오.

  2. 다음을 실행하여 펌웨어를 업그레이드합니다.

    sudo rpi-update
  3. 디바이스를 다시 시작합니다.

  4. 다음을 실행하여 드라이버를 로드합니다.

    sudo modprobe bcm2835-v4l2
  5. 카메라가 감지되었는지 확인합니다.

    ls /dev/video*

macOS High Sierra에서 카메라를 찾을 수 없음

macOS High Sierra에서 두 대 이상의 카메라를 사용할 수 있는 경우 데모 애플리케이션이 카메라를 찾을 수 없습니다.

macOS High Sierra에서 컴파일 시 jni.h 파일을 찾을 수 없음

이 오류를 해결하려면 설치한 Xcode를 최신 버전으로 업데이트합니다.

데모 애플리케이션을 실행할 때 발생하는 curl 오류 GStreamer

GStreamer데모 애플리케이션을 실행할 때 curl 오류를 해결하려면 이 인증서 파일을 에 복사하십시오. /etc/ssl/cert.pem

Raspberry Pi에서 런타임 시 타임스탬프/범위 어설션

런타임 시 타임스탬프 범위 어설션이 발생하면 펌웨어를 업데이트하고 디바이스를 다시 시작합니다.

sudo rpi-update $ sudo reboot

Raspberry Pi에서 gst_value_set_fraction_range_full에 어설션

uv4l 서비스가 실행 중인 경우 다음 어설션이 나타납니다.

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

이 경우 uv4l 서비스를 중지하고 애플리케이션을 다시 시작합니다.

STATUS안드로이드에서는 MKV _ INVALID _ _ ANNEXB NALU _IN_ FRAME _ DATA (0x3200000d) 오류가 발생합니다.

NAL 적응 플래그가 미디어 스트림에 대해 부정확할 경우 다음 오류가 나타납니다.

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

이 오류가 발생하면 해당 미디어(예: NAL_ADAPTATION_ANNEXB_CPD_NALS)에 정확한 .withNalAdaptationFlags 플래그를 제공하십시오. 이 플래그를 Android 생산자 라이브러리의 다음 행에 제공합니다.

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

최대 프래그먼트 지속 시간에 도달했습니다. 오류

이 오류는 스트림의 미디어 조각이 최대 조각 기간 한도를 초과할 때 발생합니다. 섹션의 최대 프래그먼트 지속 시간 제한을 참조하십시오. 미디어 및 아카이브 미디어 API 서비스 할당량

이 문제를 해결하려면 다음과 같이 해 보십시오.

  • USB웹캠/카메라를 사용하는 경우 다음 중 하나를 수행하십시오.

    • 키프레임 기반 프래그먼트화를 사용하는 경우 10초 이내에 키프레임을 제공하도록 인코더를 설정하십시오.

    • 키프레임 기반 프래그먼트화를 사용하지 않는 경우 에서 2단계: 코드 작성 및 검토 스트림을 정의할 때 최대 프래그먼트 지속 시간 제한을 10초 미만의 값으로 설정하십시오.

    • GStreamer파이프라인에서 소프트웨어 인코더 (예: x264) 를 사용하는 경우 10초 이내에 key-int-max 속성을 값으로 설정할 수 있습니다. 예를 들어 60으로 설정하고 key-int-max fps를 30으로 설정하면 2초마다 키 프레임이 활성화됩니다.

  • RPI카메라를 사용하는 경우 키프레임 간격 속성을 10초 미만으로 설정하십시오.

  • IP (RTSP) 카메라를 사용하는 경우 GOP 크기를 60으로 설정합니다.

IoT 권한 부여를 사용할 때 "Invalid thing name passed(잘못된 이름이 전달되었습니다)" 오류 발생

권한 부여에 IoT 자격 증명을 사용할 때 이 오류 (HTTP Error 403: Response: {"message":"Invalid thing name passed"}) 를 방지하려면 stream-name (kvssink요소의 필수 매개변수) 값이 의 값과 동일한지 확인하십시오iot-thingname. 자세한 내용은 GStreamer 요소 파라미터 레퍼런스 단원을 참조하십시오.

스트림 파서 라이브러리 문제

이 단원에서는 스트림 구문 분석기 라이브러리 사용 시 발생할 수 있는 문제에 대해 설명합니다.

스트림에서 단일 프레임에 액세스할 수 없음

소비자 애플리케이션의 스트리밍 소스에서 단일 프레임에 액세스하려면 스트림에 올바른 코덱 프라이빗 데이터가 포함되어 있는지 확인하세요. 스트림의 데이터 형식에 대한 자세한 내용은 데이터 모델 단원을 참조하십시오.

코덱 프라이빗 데이터를 사용하여 프레임에 액세스하는 방법을 알아보려면 GitHub 웹 사이트에 있는 다음 테스트 파일을 참조하십시오. .java KinesisVideoRendererExampleTest

조각 디코딩 오류

조각이 브라우저에서 지원하는 H.264 형식 및 레벨로 올바르게 인코딩되지 않은 경우 콘솔에서 스트림을 재생할 때 다음 오류가 표시될 수 있습니다.

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

이 경우 다음을 확인합니다.

  • 프레임의 해상도는 코덱 프라이빗 데이터에 지정된 해상도와 일치합니다.

  • 인코딩 프레임의 H.264 프로필 및 레벨은 코덱 프라이빗 데이터에 지정된 프로필 및 레벨과 일치합니다.

  • 브라우저는 프로필/레벨 조합을 지원합니다. 최신 브라우저는 모든 프로필 및 레벨 조합을 지원합니다.

  • 타임스탬프는 정확하고 순서가 올바르며 중복 타임스탬프가 생성되지 않습니다.

  • 애플리케이션이 H.264 형식을 사용하여 프레임 데이터를 인코딩하고 있습니다.

네트워크 문제

Kinesis Video Streams에 연결하려고 할 때 “연결 시간 초과” 또는 “연결 실패”와 같은 연결 오류가 표시되면 네트워킹 설정의 IP 주소 범위 제한 때문일 수 있습니다.

설정에 Kinesis Video Streams에 대한 IP 주소 범위 제한이 있는 경우 Kinesis Video Streams IP 주소 범위를 허용 목록에 포함하도록 네트워크 구성을 업데이트하십시오.

중요

IP 범위 목록은 Kinesis Video Streams IP 주소의 전체 목록이 아닙니다. 보이는 IP 주소 범위를 포함시키고 시간이 지남에 따라 IP 주소가 변경될 수 있다는 점에 유의하세요.

자세한 내용은 AWS IP 범위를 참조하십시오. IP 범위가 변경될 때 알림을 받으려면 구독 절차를 따르십시오.