기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.
Kinesis 비디오 스트림으로 비디오 스트리밍
샘플 애플리케이션을 실행하려면 다음 정보가 필요합니다.
-
사전 조건 단원에서 생성한 스트림 이름입니다.
-
Kinesis Video Streams에 쓸 수 있는 권한이 있는 IAM 사용자 생성에서 생성한 계정 자격 증명(액세스 키 ID 및 보안 액세스 키)입니다.
GStreamer는
kvssink플러그인을 찾을 수 있습니다. 자세한 정보는 Kinesis Video Streams C++ 생산자 SDK 다운로드 및 빌드을 참조하세요.
자격 증명과 리전을 설정합니다.
export AWS_ACCESS_KEY_ID=YourAccessKeyexport AWS_SECRET_ACCESS_KEY=YourSecretKeyexport AWS_DEFAULT_REGION=us-west-2다른 인증 방법은 섹션을 참조하세요에 자격 증명 제공 kvssink.
참고
C++ 생산자 SDK는 기본적으로 미국 서부(오레곤)(
us-west-2) 리전을 사용합니다. 기본값을 사용하려면 미국 서부(오레곤) 리전에서 Kinesis 비디오 스트림을 AWS 리전 생성합니다.Kinesis 비디오 스트림에 다른 리전을 사용하려면 다음 환경 변수를 해당 리전(예:
us-east-1)으로 설정합니다.export AWS_DEFAULT_REGION=us-east-1입력 미디어에 따라 다음 중 하나를 선택합니다.
하드웨어 사용
일부 Raspberry Pi 모델은 하드웨어 가속 H.264 인코더와 함께 제공됩니다. 소프트웨어 인코더x264enc인 대신 사용할 수 있습니다.
-
GStreamer 플러그인이 설치되어 있는지 확인합니다.
sudo apt-get install gstreamer1.0-tools gstreamer1.0-plugins-bad -
Type:
gst-inspect-1.0 | grep h264다음 요소를 사용할 수 있는지 확인합니다.
-
omxh264enc
-
v4l2h264enc
사용 가능한 경우 사용할 수 있습니다. 다음은 이러한 요소를 사용하는 몇 가지 파이프라인 예제입니다.
omxh264enc:gst-launch-1.0 v4l2src device=/dev/video0 \ ! videoconvert \ ! video/x-raw,format=I420,width=640,height=480 \ !omxh264enccontrol-rate=2 target-bitrate=512000 periodicity-idr=45 inline-header=FALSE \ ! h264parse ! video/x-h264,stream-format=avc,alignment=au,profile=baseline \ ! kvssink stream-name="raspberry"v4l2h264enc및v4l2convert:gst-launch-1.0 libcamerasrc \ ! video/x-raw,width=640,height=480,framerate=30/1,format=I420 \ !v4l2convert\ !v4l2h264encextra-controls="controls,repeat_sequence_header=1" \ ! video/x-h264,level='(string)4' \ ! h264parse \ ! video/x-h264,stream-format=avc,alignment=au,width=640,height=480,framerate=30/1 \ ! kvssink stream-name="test-stream" -
런타임 문제
다음은 자주 발생하는 몇 가지 런타임 문제와 이를 해결하는 방법입니다.
이러한 요소 "xxxxxxxxx" 없음
다음과 같은 오류가 발생하면 GStreamer 플러그인이 누락된 것입니다.
WARNING: erroneous pipeline: no element "videoconvert"
해결 방법:
누락된 요소를 기반으로 적절한 작업을 결정합니다.
-
kvssink: 단원을 참조하십시오Kinesis Video Streams C++ 생산자 SDK 다운로드 및 빌드. libcamerasrc:libcamerasrcGStreamer 요소를 설치"버퍼 풀 활성화 실패" 오류하려면 섹션을 참조하세요.omxh264enc또는v4l2h264enc:소프트웨어 사전 조건 설치에 따라 모든 GStreamer 라이브러리를 설치합니다. 모두 설치했는데 이러한 요소가 표시되지 않는 경우 Raspberry Pi에 하드웨어가 없다는 의미입니다.
x264enc대신 소프트웨어 인코더를 사용합니다.기타: 소프트웨어 사전 조건 설치에 따라 모든 GStreamer 라이브러리를 설치합니다. 다양한 GStreamer 플러그인 그룹(좋음, 나쁨, 이상)에서 다양한 GStreamer 요소가 발견되므로 모두 설치해야 합니다.
"버퍼 풀 활성화 실패" 오류
다음과 같은 오류가 발생하면 사용 중인 파이프라인이를 사용 v4l2src중이지만 libcamerasrc 대신를 사용해야 한다는 의미입니다.
ERROR bufferpool gstbufferpool.c:572:gst_buffer_pool_set_active:source:pool0:src start failed
WARN v4l2src gstv4l2src.c:976:gst_v4l2src_decide_allocation: error: Failed to allocate required memory.
WARN v4l2src gstv4l2src.c:976:gst_v4l2src_decide_allocation: error: Buffer pool activation failed
WARN basesrc gstbasesrc.c:3352:gst_base_src_prepare_allocation: Subclass failed to decide allocation
Error received from element source: Failed to allocate required memory.
WARN basesrc gstbasesrc.c:3132:gst_base_src_loop: error: Internal data stream error.
Debugging information: ../sys/v4l2/gstv4l2src.c(976): gst_v4l2src_decide_allocation (): /GstPipeline:live-kinesis-pipeline/GstV4l2Src:source:
Buffer pool activation failed
WARN basesrc gstbasesrc.c:3132:gst_base_src_loop: error: streaming stopped, reason not-negotiated (-4)
예를 들어 카메라 모듈 2가 libcamerasrc 설치되지 않은 상태에서 다음 파이프라인인를 사용하는 경우 GStreamer가 사용할 요소를 자동으로 감지하려고 할 때이 오류가 발생할 수 있습니다.
gst-launch-1.0 autovideosrc ! videoconvert ! autovideosink
해결 방법:
libcamerasrc가 설치되어 있고 대신 소스 요소로 사용해야 합니다v4l2src. 다음을 입력하여 libcamerasrc GStreamer 요소를 설치합니다.
sudo apt-get update sudo apt-get install gstreamer1.0-libcamera
libcamerasrc가 설치되면 autovideosrc 요소를 사용하는 경우 GStreamer는 libcamerasrc 대신 올바른 소스를 사용하도록 자동으로 전환해야 합니다v4l2src.
버스 오류
시작 직후 버스 오류가 발생하면kvssink(일반적으로에 대한 HTTP 호출이 PutMedia완료될 때까지) Raspberry Pi가 정렬되지 않은 메모리 액세스를 지원하지 않는다는 의미입니다. 로그는 다음과 같습니다.
INFO Camera camera.cpp:1197 configuring streams: (0) 640x480-YUV420
INFO RPI pisp.cpp:1450 Sensor: /base/axi/pcie@120000/rp1/i2c@88000/imx708@1a - Selected sensor format: 1536x864-SBGGR10_1X10 - Selected CFE format: 1536x864-PC1B
[INFO ] kinesisVideoStreamFormatChanged(): Stream format changed.
[DEBUG] setRequestHeader(): Appending header to request: user-agent -> AWS-SDK-KVS-CPP-CLIENT/3.4.2/1.5.3 GCC/12.2.0 Linux/6.6.51+rpt-rpi-v8 aarch64 CPPSDK
[DEBUG] setRequestHeader(): Appending header to request: x-amzn-stream-name -> demo-stream
[DEBUG] setRequestHeader(): Appending header to request: x-amzn-producer-start-timestamp -> 1732012345.678
[DEBUG] setRequestHeader(): Appending header to request: x-amzn-fragment-acknowledgment-required -> 1
[DEBUG] setRequestHeader(): Appending header to request: x-amzn-fragment-timecode-type -> ABSOLUTE
[DEBUG] setRequestHeader(): Appending header to request: transfer-encoding -> chunked
[DEBUG] setRequestHeader(): Appending header to request: connection -> keep-alive
[INFO ] putStreamResultEvent(): Put stream result event. New upload handle 0
[WARN ] notifyDataAvailable(): [demo-stream] Failed to un-pause curl with error: 43. Curl object 0xe2f6f418
Bus error
Kinesis Video Streams PIC는 정렬되지 않은 메모리 액세스를 사용하여 모든 디바이스에서 지원되지 않는 메모리 사용량을 최적화합니다.
해결 방법:
SDK를 정렬된 메모리 액세스 모드에서 사용하려면 컴파일 ON 시 ALIGNED_MEMORY_MODEL CMake 플래그를 로 명시적으로 설정해야 합니다. 기본값은 kvssink입니다OFF. 자세한 지침은 Kinesis Video Streams C++ 생산자 SDK 다운로드 및 빌드 단원을 참조하십시오.
타임스탬프가 고정되고 파이프라인이 정지됩니다.
GStreamer 파이프라인x264enc에서를 사용할 때 파이프라인의 타임라인이 몇 초 내에 크게 또는 완전히 멈출 수 있는 상황이 발생할 수 있습니다.
이는 x264enc 기본 설정에서 기본 입력 버퍼의 용량을 초과하는 높은 인코딩 지연 시간이 발생할 수 있기 때문입니다. 따라서 입력 버퍼가 채워져 업스트림 요소가 차단되고 파이프라인이 중지됩니다.
자세한 내용은 GStreamer 설명서를
해결 방법:
튜닝 옵션으로 zerolatency x264enc를 구성합니다. 이렇게 하면 실시간 시나리오에 맞게 최적화하여 프레임을 더 빠르게 처리하고 출력할 수 있으므로 인코딩 지연 시간이 크게 단축됩니다.
구성의 예제:
... ! x264enctune=zerolatencybyte-stream=true speed-preset=ultrafast bframes=0 key-int-max=60 ! ...
참고
이 솔루션은 파이프라인 정지를 효과적으로 방지하지만 인코딩 효율성과 품질에 영향을 미칠 수 있습니다. 짧은 지연 시간과 고품질이 모두 필요한 시나리오의 경우 하드웨어 최적화를 사용하거나 H.264를 직접 출력하는 웹캠을 찾는 등이 인코딩 단계를 건너뛰는 등 대체 접근 방식을 고려하세요.
자세한 내용은 하드웨어 사용 단원을 참조하십시오.
동일한 v4l2 디바이스에서 여러 파이프라인을 동시에 실행할 수 없음
와 같은 디바이스는 한 번에 한 프로세스만 액세스할 /dev/video0 수 있습니다. 여러 프로세스가 동시에 액세스하려고 하면 두 번째 프로세스가 첫 번째 프로세스가 완료될 때까지 대기합니다.
해결 방법:
루프백 디바이스를 생성하여 여러 프로세스가 루프백 인터페이스를 동시에 사용할 수 있도록 합니다. 자세한 내용은 스택 교환
내부 데이터 스트림 오류
GStreamer 파이프라인을 생성할 때 한 요소의 소스 패드를 다른 요소의 싱크 패드에 연결하여 요소를 연결합니다. 이 연결 프로세스를 통해 소스 요소에서 싱크 요소로 데이터를 흐르게 하여 데이터 파이프라인을 구성할 수 있습니다.
로그의 "Pad link failed" 오류 메시지는 GStreamer가 파이프라인에 있는 두 요소의 패드 간에 연결(링크)을 설정하려고 할 때 문제가 발생했음을 나타냅니다.
Pad link failed
Error received from element udpsrc0: Internal data stream error.
해결 방법:
어떤 요소가 서로 연결되지 않는지 결정합니다. 파이프라인 범위를 좁히려면 파이프라인에서 요소를 제거합니다. 가장 오른쪽 요소를 로 바꾸fakesink고 한 번에 하나씩 요소를 제거합니다.
capsfilter
일반적인 경우는 카메라가 지원하지 않는 framerate 또는를 요청하는 resolution 것입니다. 터미널gst-device-monitor-1.0에서를 사용하여 지원되는 framerates, resolutions및를 가져옵니다formats. 비디오스케일
개별 GStreamer 요소에 대해 지원되는 형식을 검사하려면 터미널gst-inspect-1.0 element-name에를 입력합니다.