기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.
샘플 애플리케이션을 실행하려면 다음 정보가 필요합니다.
-
사전 조건 단원에서 생성한 스트림 이름입니다.
-
Kinesis Video Streams에 쓸 수 있는 권한이 있는 IAM 사용자 생성에서 생성한 계정 자격 증명(액세스 키 ID 및 보안 액세스 키)입니다.
자격 증명과 리전을 설정합니다.
export AWS_ACCESS_KEY_ID=
YourAccessKey
export AWS_SECRET_ACCESS_KEY=YourSecretKey
export AWS_DEFAULT_REGION=us-west-2
기타 인증 방법은 섹션을 참조하세요에 자격 증명 제공 kvssink.
참고
C++ 생산자는 기본적으로 미국 서부(오레곤)(
us-west-2
) 리전을 SDK 사용합니다. 기본값을 사용하려면 미국 서부(오레곤) 리전에서 Kinesis 비디오 스트림을 AWS 리전 생성합니다.Kinesis 비디오 스트림에 다른 리전을 사용하려면 다음 환경 변수를 해당 리전(예:
us-east-1
)으로 설정합니다.export AWS_DEFAULT_REGION=
us-east-1
입력 미디어에 따라 다음 중 하나를 선택합니다.
이 GStreamer 파이프라인은 해상도가 640x480픽셀인 초당 10프레임으로 실행되는 표준 테스트 패턴을 사용하여 라이브 테스트 비디오 스트림을 생성합니다. 현재 시스템 시간과 날짜를 표시하는 오버레이가 추가됩니다. 그런 다음 비디오가 H.264 형식으로 인코딩되고 최대 10프레임마다 키프레임이 생성되어 조각 지속 시간(사진 그룹(GoP) 크기라고도 함)이 1초가 됩니다. kvssink는 H.264로 인코딩된 비디오 스트림을 가져와서 Matroska(MKV) 컨테이너 형식으로 패키징하고 Kinesis 비디오 스트림에 업로드합니다.
다음 명령 실행:
gst-launch-1.0 -v videotestsrc is-live=true \ ! video/x-raw,framerate=10/1,width=640,height=480 \ ! clockoverlay time-format="%a %B %d, %Y %I:%M:%S %p" \ ! x264enc bframes=0 key-int-max=10 \ ! h264parse \ ! kvssink stream-name="
YourStreamName
"GStreamer 파이프라인을 중지하려면 터미널 창을 선택하고 CTRL+C를 누릅니다.
샘플 비디오 GStreamer 파이프라인은 다음과 같습니다.
하드웨어 사용
일부 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 \ !
omxh264enc
control-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
\ !v4l2h264enc
extra-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
:libcamerasrc
GStreamer 요소를 설치"버퍼 풀 활성화 실패" 오류하려면 섹션을 참조하세요.omxh264enc
또는v4l2h264enc
:소프트웨어 사전 조건 설치를 따라 모든 GStreamer 라이브러리를 설치합니다. 모든 요소를 설치했지만 이러한 요소가 표시되지 않는 경우 Raspberry Pi에 하드웨어가 없다는 의미입니다.
x264enc
대신 소프트웨어 인코더를 사용합니다.기타: 소프트웨어 사전 조건 설치를 따라 모든 GStreamer 라이브러리를 설치합니다. 다양한 GStreamer 플러그인 그룹(좋음, 나쁨, 이상)에서 다양한 GStreamer 요소가 발견되므로 모두 설치해야 합니다.
"버퍼 풀 활성화 실패" 오류
다음과 같은 오류가 발생하면 사용 중인 파이프라인이를 사용 v4l2src
중이지만 libcamera
대신를 사용해야 한다는 의미입니다.
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가 libcamera
설치되지 않은 상태에서 다음 파이프라인를 사용하는 경우 GStreamer가 파이프라인을 자동 감지하려고 할 때이 오류가 발생할 수 있습니다.
gst-launch-1.0 autovideosrc ! videoconvert ! autovideosink
해결 방법:
libcamera
가 설치되어 있는지 확인하고가 아닌 소스 요소로 사용합니다v4l2src
. libcamera
GStreamer 요소를 설치하려면 다음을 입력합니다.
sudo apt-get update sudo apt-get install gstreamer1.0-libcamera
libcamerasrc
가 설치되면 autovideosrc
요소를 사용하는 경우는 libcamerasrc
대신 올바른 소스를 사용하도록 자동으로 전환GStreamer해야 합니다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
를 구성합니다. 이렇게 하면 실시간 시나리오에 맞게 최적화하여 프레임을 더 빠르게 처리하고 출력할 수 있으므로 인코딩 지연 시간이 크게 줄어듭니다.
구성의 예제:
... ! x264enc tune=zerolatency
byte-stream=true speed-preset=ultrafast bframes=0 key-int-max=60 ! ...
참고
이 솔루션은 파이프라인 스톨링을 효과적으로 방지하지만 인코딩 효율성과 품질에 영향을 미칠 수 있습니다. 짧은 지연 시간과 고품질이 모두 필요한 시나리오의 경우 하드웨어 최적화를 사용하거나 H.264를 직접 출력하는 웹캠을 찾는 등이 인코딩 단계를 건너뛰는 등 대체 접근 방식을 고려하세요.
자세한 내용은 하드웨어 사용 단원을 참조하십시오.
내부 데이터 스트림 오류
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
. 비디오 스케일