부록. Xilinx Video SDK 설치 가이드
카카오클라우드 Virtual Machine에서 제공하는 vt1a
인스턴스 패밀리는 실시간 비디오 트랜스코딩(Video transcoding) 기능을 제공하며, 라이브 이벤트 브로드캐스팅, 화상회의 및 실시간 트랜스코딩 애플리케이션에 적합합니다.vt1a
인스턴스 패밀리에 Alveo U30 미디어 액셀러레이터 카드에서 제공하는 하드웨어 가속 기능을 사용하기 위해서는, AMD에서 제공하는 Xilinx Video SDK의 설치가 필요합니다.
본 문서는 카카오클라우드 환경에서 vt1a
인스턴스 패밀리를 사용하기 위해, Alveo U30 미디어 액셀러레이터 카드에 Xilinx Video SDK를 설치하는 순서와 예제를 안내합니다.
지원 플랫폼 및 운영 체제
지원 플랫폼
2023년 9월 기준, Xilinx Video SDK는 다음의 소프트웨어 툴을 지원합니다.
소프트웨어 | 설명 |
---|---|
FFmpeg 4.4 | 동영상과 음성을 기록, 변환, 재생하기 위한 무료 소프트웨어 - 자세한 정보는 FFmpeg 공식 사이트참고 |
GStreamer 1.16.2 | 스트리밍 미디어 애플리케이션을 생성하기 위한 무로 프레임워크 - 자세한 정보는 GStreamer 공식 사이트참고 |
운영체제 및 Kernel 버전
2023년 9월 기준, Xilinx는 Ubuntu와 RHEL 환경에서 모두 Xilinx Video SDK를 사용할 수 있도록 공식 지원하고 있습니다. 현재 카카오클라우드 환경은 Ubuntu 운영체제를 지원합니다.
- Ubuntu 22.04 (Kernel 5.15)
- Ubuntu 20.04.4 (Kernel 5.13)
- Ubuntu 20.04.3 (Kernel 5.11)
- Ubuntu 20.04.1 (Kernel 5.4)
- Ubuntu 20.04.0 (Kernel 5.4)
Step 1. 인스턴스 생성 및 연결
vt1a
인스턴스 패밀리는 vt1a.4xlarge, vt1a.8xlarge, vt1a.32xlarge 크기를 제공합니다. 다음 순서에 따라 인스턴스 생성하고 연결을 수행합니다.
-
카카오클라우드 콘솔 > Beyond Compute Service > Virtual Machine 메뉴로 이동합니다.
-
인스턴스 생성 및 연결하기를 참고하여, 원하는 인스턴스를 생성하고 ssh 명령어를 사용하여 인스턴스에 연결합니다.
- 본 문서의 예제는 Ubuntu22.04과 Kernel 버전 5.15을 기준으로 하므로, Linux 인스턴스에 연결하기를 참고하시기 바랍니다.
- RHEL 운영체제는 추후 지원 예정입니다.
Step 2. SDK 다운로드 및 설치
인스턴스 생성과 연결을 완료한 후, AMD Xilinx Video SDK를 설치합니다.
본 문서의 예제는 Ubuntu22.04과 Kernel 버전 5.15을 기준으로 합니다. 이 환경과 버전을 제외한 기타 환경에 대한 SDK 다운로드 및 설치 방법은 AMD Xilinx Video SDK 공식 문서를 참고하시기 바랍니다.
- AMD Xilinx Video SDK 공식 문서는 온프레미스 환경에 맞춰 설명하고 있습니다. 따라서, 카카오클라우드 Beyond Compute Service(BCS) 서비스 환경에서는 AMD 공식 문서에서 설명하는 7~11 단계 작업은 필요하지 않습니다.
사전 작업
AMD Xilinx Video SDK를 설치하기 위해서는 사전에 Kernel의 자동 업 데이트를 중지하고, 리눅스 배포판의 코드명(distro name) 정보를 확인해야 합니다.
-
/etc/apt/apt.conf.d/20auto-upgrades
파일을 열어 아래 내용을 추가합니다.APT::Periodic::Update-Package-Lists "0";
APT::Periodic::Download-Upgradeable-Packages "0";
APT::Periodic::AutocleanInterval "0";
APT::Periodic::Unattended-Upgrade "0";- (선택 작업) 만약 구버전의 SDK가 설치되어 있다면, 다음 명령어를 사용 후 해당 SDK를 삭제합니다.
sudo apt-get remove xvbm xilinx-u30-xvbm xrmu30decoder xrmu30scaler xrmu30encoder xmpsoccodecs xmultiscaler xlookahead xmaapps xmapropstojson xffmpeg launcher jobslotreservation xcdr
sudo apt-get remove xrm xilinx-container-runtime xilinx-xvbm xilinx-u30-xrm-decoder xilinx-u30-xrm-encoder xilinx-u30-xrm-multiscaler xilinx-u30-xma-multiscaler xilinx-u30-xlookahead xilinx-u30-xmpsoccodecs xilinx-u30-xma-apps xilinx-u30-xmapropstojson xilinx-u30-xffmpeg xilinx-u30-launcher xilinx-u30-jobslotreservation xilinx-u30-xcdr xilinx-u30-gstreamer-1.16.2 xilinx-u30-vvas xilinx-sc-fw-u30 xilinx-u30-gen3x4-base xilinx-u30-gen3x4-validate -
현재 사용 중인 리눅스 배포판의 코드명(distro name) 정보를 확인합니다. 출력된 distro name은
bionic
,focal
또는jammy
중 하나입니다.lsb_release -c
-
/etc/apt/sources.list.d/ 경로에 xilinx.list 파일을 생성한 후, 아래의
<distro name>
부분에 출력된 distro name을 입력합니다.deb [trusted=yes] https://packages.xilinx.com/artifactory/debian-packages <distro name> main
-
Xilinx 퍼블릭 키를 다운로드 및 설정합니다.
wget -q https://www.xilinx.com/content/dam/xilinx/support/download/2024-1/xilinx-master-signing-key.asc
sudo gpg --no-default-keyring --keyring ./xilinx-old.gpg --import xilinx-master-signing-key.asc
sudo gpg --no-default-keyring --keyring ./xilinx-old.gpg --export --output xilinx.gpg
sudo mv xilinx.gpg /etc/apt/trusted.gpg.d/
sudo rm xilinx-master-signing-key.asc xilinx-old.gpg xilinx-old.gpg~
SDK 설치
다음의 명령어를 사용하여 패키지를 업데이트하고, SDK 구성 요소를 설치합니다.
AMD Xilinx Video SDK 패키지를 설치 시, 반드시 bash shell
을 사용하십시오.
sudo apt-get update
sudo apt-get install xrt=2.11.722
sudo apt-mark hold xrt
sudo apt-get install xilinx-alveo-u30-core
sudo apt-get install xilinx-alveo-u30-ffmpeg
sudo apt-get install xilinx-alveo-u30-gstreamer
sudo apt-get install xilinx-alveo-u30-examples
Step 3. 런타임 환경 설정
런타임 환경 설정은 해당 인스턴스에 새로 접속할 때마다 또는 새로 터미널을 열 때마다 실행해야 합니다.
-
런타임 환경을 아래와 같이 설정합니다.
source /opt/xilinx/xcdr/setup.sh
-
다음 명령어를 사용하여 카드가 올바르게 인식되고 있는지 확인합니다.
xbutil examine
-
디바이스가 정상적으로 인식될 경우 아래와 같은 메시지가 출력됩니다. 표시되는 디바이스 목록은 사용 중인 flavor 수에 따라 다르게 표시됩니다.
...
Devices present
[0000:06:00.0] : xilinx_u30_gen3x4_base_2
[0000:05:00.0] : xilinx_u30_gen3x4_base_2
Step 4. 예제 테스트
이번 섹션에서는 Xilinx Video SDK가 지원하는 FFmpeg와 GStreamer를 사용한 예제를 설명합니다. 더 많은 예제는 AMD Xilinx Video SDK 공식 문서의 Tutorials and Examples를 참고하시기 바랍니다.
FFmpeg_Decode Only 예제
FFmpeg 예제를 실행하여 Alveo U30 미디어 액셀러레이터 카드의 하드웨어 가속 기능이 정상적으로 작동하고 있는지 확인할 수 있습니다. 이 예제는 동영상 파일을 RAW 파일 형식으로 디코딩한 후 별도의 디렉터리에 저장하는 내용을 다룹니다.
예제 실행을 위해 H.264
형식의 파일이 필요하며, 샘플 파일을 다운로드하여 활용하시기 바랍니다.
FFmpeg는 동영상과 음성을 기록, 변환, 재생하기 위한 무료 소프트웨어입니다. 자세한 정보는 FFmpeg 공식 사이트를 참고하시기 바랍니다.
-
예제 파일을 테스트하기 전, 환경 설정을 완료합니다.
source /opt/xilinx/xcdr/setup.sh
-
아래와 같이 U30 기기가 정상적으로 인식되는지 확인합니다.
...
Number of U30 devices found: 2
{
"response": {
"name": "load",
"requestId": "1",
"status": "ok"
}
}
-----Load xrm plugins-----
{
"response": {
"name": "loadXrmPlugins",
"requestId": "1",
"status": "ok"
}
} -
/opt/xilinx/examples/u30/ffmpeg/tutorials
경로에 있는 예제 파일을 실행합니다../01_ffmpeg_decode_only.sh /dev/shm/[sample_file_name]
-
다음과 같이 결과가 출력되는지 확인합니다.
ffmpeg version n4.4.xlnx.1 Copyright (c) 2000-2021 the FFmpeg developers
built with gcc 11 (Ubuntu 11.2.0-19ubuntu1)
configuration: --prefix=/opt/xilinx/ffmpeg --datadir=/opt/xilinx/ffmpeg/etc --enable-x86asm --enable-libxma2api --disable-doc --enable-libxvbm --enable-libxrm --enable-libfreetype --enable-libfontconfig --extra-cflags=-I/opt/xilinx/xrt/include/xma2 --extra-ldflags=-L/opt/xilinx/xrt/lib --extra-libs=-lxma2api --extra-libs=-lxrt_core --extra-libs=-lxrt_coreutil --extra-libs=-lpthread --extra-libs=-ldl --disable-static --enable-shared
libavutil 56. 70.100 / 56. 70.100
libavcodec 58.134.100 / 58.134.100
libavformat 58. 76.100 / 58. 76.100
libavdevice 58. 13.100 / 58. 13.100
libavfilter 7.110.100 / 7.110.100
libswscale 5. 9.100 / 5. 9.100
libswresample 3. 9.100 / 3. 9.100
<<<<<<== FFmpeg xrm ===>>>>>>
No device set hence falling to default device 0
------------------i=0------------------------------------------
xclbin_name : /opt/xilinx/xcdr/xclbins/transcode.xclbin
device_id : 0
------------------------------------------------------------
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from '/dev/shm/livealone_10s.mp4':
Metadata:
major_brand : isom
minor_version : 512
compatible_brands: isomiso2avc1mp41
encoder : Lavf60.3.100
Duration: 00:00:10.01, start: 0.000000, bitrate: 3816 kb/s
Stream #0:0(und): Video: h264 (High) (avc1 / 0x31637661), yuv420p(tv, bt709), 1920x1080 [SAR 1:1 DAR 16:9], 3677 kb/s, 29.97 fps, 29.97 tbr, 30k tbn, 59.94 tbc (default)
Metadata:
handler_name : ISO Media file produced by Google Inc.
vendor_id : [0][0][0][0]
encoder : Lavc60.3.100 libx264
Stream #0:1(eng): Audio: aac (LC) (mp4a / 0x6134706D), 44100 Hz, stereo, fltp, 129 kb/s (default)
Metadata:
handler_name : ISO Media file produced by Google Inc.
vendor_id : [0][0][0][0]
[MPSOC H.264 decoder @ 0x557bdd991000] timing information from stream is not available
Stream mapping:
Stream #0:0 -> #0:0 (h264 (mpsoc_vcu_h264) -> rawvideo (native))
Press [q] to stop, [?] for help
[Parsed_xvbm_convert_0 @ 0x557bdd951000] xvbm_conv:: wait for conversion to finish...
Output #0, rawvideo, to '/tmp/xil_dec_out.yuv':
Metadata:
major_brand : isom
minor_version : 512
compatible_brands: isomiso2avc1mp41
encoder : Lavf58.76.100
Stream #0:0(und): Video: rawvideo (I420 / 0x30323449), yuv420p, 1920x1080 [SAR 1:1 DAR 16:9], q=2-31, 745750 kb/s, 29.97 fps, 29.97 tbn (default)
Metadata:
handler_name : ISO Media file produced by Google Inc.
vendor_id : [0][0][0][0]
encoder : Lavc58.134.100 rawvideo
frame= 300 fps=187 q=-0.0 Lsize= 911250kB time=00:00:10.01 bitrate=745750.2kbits/s speed=6.23x
video:911250kB audio:0kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 0.000000% -
마지막으로,
/tmp/
경로에xil_dec_out.yuv
파일이 생성되었는지 확인합니다.
FFmpeg_Encode Only 예제
Encode Only 예제는 YUV420
형식의 RAW 1080p60 클립을 인코더에 전달하여, 비트 전송률이 8Mbps인 H.264로 인코딩된 MP4 출력을 생성하고 디스크에 저장하는 내용을 다룹니다.
이 예제는 Decode Only 예제를 통해 획득한 xil_dec_out.yuv 파일을 샘플 파일로 사용하므로, 먼저 해당 예제를 수행하시기 바랍니다.
-
Decode Only 예제를 통해 획득한 xil_dec_out.yuv 파일을 사용하여 예제 스크립트를 실행합니다.
./02_ffmpeg_encode_only_1080p.sh /tmp/xil_dec_out.yuv
-
예제 스크립트를 실행 후, 아래와 같이 결과가 출력되는지 확인합니다.
ffmpeg version n4.4.xlnx.1 Copyright (c) 2000-2021 the FFmpeg developers
built with gcc 11 (Ubuntu 11.2.0-19ubuntu1)
configuration: --prefix=/opt/xilinx/ffmpeg --datadir=/opt/xilinx/ffmpeg/etc --enable-x86asm --enable-libxma2api --disable-doc --enable-libxvbm --enable-libxrm --enable-libfreetype --enable-libfontconfig --extra-cflags=-I/opt/xilinx/xrt/include/xma2 --extra-ldflags=-L/opt/xilinx/xrt/lib --extra-libs=-lxma2api --extra-libs=-lxrt_core --extra-libs=-lxrt_coreutil --extra-libs=-lpthread --extra-libs=-ldl --disable-static --enable-shared
libavutil 56. 70.100 / 56. 70.100
libavcodec 58.134.100 / 58.134.100
libavformat 58. 76.100 / 58. 76.100
libavdevice 58. 13.100 / 58. 13.100
libavfilter 7.110.100 / 7.110.100
libswscale 5. 9.100 / 5. 9.100
libswresample 3. 9.100 / 3. 9.100
<<<<<<== FFmpeg xrm ===>>>>>>
No device set hence falling to default device 0
------------------i=0------------------------------------------
xclbin_name : /opt/xilinx/xcdr/xclbins/transcode.xclbin
device_id : 0
------------------------------------------------------------
[rawvideo @ 0x556ccf1d9000] Estimating duration from bitrate, this may be inaccurate
Input #0, rawvideo, from '/tmp/xil_dec_out.yuv':
Duration: 00:00:05.00, start: 0.000000, bitrate: 1492992 kb/s
Stream #0:0: Video: rawvideo (I420 / 0x30323449), yuv420p, 1920x1080, 1492992 kb/s, 60 tbr, 60 tbn, 60 tbc
Stream mapping:
Stream #0:0 -> #0:0 (rawvideo (native) -> h264 (mpsoc_vcu_h264))
Press [q] to stop, [?] for help
[mpsoc_vcu_h264 @ 0x556ccf172000] Custom Rate Control Mode is Disabled
XRT build version: 2.11.722
Build hash: d1ecc641da7b8805e778926e3354e8dd3fdaa6a8
Build date: 2023-01-25 15:37:40
Git branch: 2021.1
PID: 19271
UID: 1000
[Thu Sep 21 01:17:11 2023 GMT]
HOST: host-10-10-2-47
EXE: /opt/xilinx/ffmpeg/bin/ffmpeg
[XMA] WARNING: ffmpeg xma-vcu-encoder device warning: !! The specified Level is too low and will be adjusted !!
Output #0, mp4, to '/tmp/xil_enc_out.mp4':
Metadata:
encoder : Lavf58.76.100
Stream #0:0: Video: h264 (avc1 / 0x31637661), nv12(tv, progressive), 1920x1080, q=2-31, 8000 kb/s, 60 fps, 15360 tbn
Metadata:
encoder : Lavc58.134.100 mpsoc_vcu_h264
frame= 300 fps= 89 q=-0.0 Lsize= 4877kB time=00:00:04.96 bitrate=8043.4kbits/s speed=1.48x
video:4873kB audio:0kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 0.075493% -
/tmp/
경로에xil_enc_out.mp4
파일이 생성되었는지 확인합니다.
FFmpeg_기본 Transcode 예제
기본 Transcode 예제는 H.264 클립을 가져와 새로운 비트 전송률인 8Mbps를 사용하여 H.264로 다시 인코딩하는 예제입니다.
이번 예제는 Encode Only 예제에서 획득한 xil_enc_out.mp4 파일을 사용하므로, 먼저 해당 예제를 수행하시기 바랍니다.
-
Encode Only 예제를 통해 획득한 xil_enc_out.mp4 파일을 사용하여 예제 스크립트를 실행합니다.
./03_ffmpeg_transcode_only.sh /tmp/xil_enc_out.mp4
-
아래와 같이 결과가 출력되는지 확인합니다.
ffmpeg version n4.4.xlnx.1 Copyright (c) 2000-2021 the FFmpeg developers
built with gcc 11 (Ubuntu 11.2.0-19ubuntu1)
configuration: --prefix=/opt/xilinx/ffmpeg --datadir=/opt/xilinx/ffmpeg/etc --enable-x86asm --enable-libxma2api --disable-doc --enable-libxvbm --enable-libxrm --enable-libfreetype --enable-libfontconfig --extra-cflags=-I/opt/xilinx/xrt/include/xma2 --extra-ldflags=-L/opt/xilinx/xrt/lib --extra-libs=-lxma2api --extra-libs=-lxrt_core --extra-libs=-lxrt_coreutil --extra-libs=-lpthread --extra-libs=-ldl --disable-static --enable-shared
libavutil 56. 70.100 / 56. 70.100
libavcodec 58.134.100 / 58.134.100
libavformat 58. 76.100 / 58. 76.100
libavdevice 58. 13.100 / 58. 13.100
libavfilter 7.110.100 / 7.110.100
libswscale 5. 9.100 / 5. 9.100
libswresample 3. 9.100 / 3. 9.100
<<<<<<<== FFmpeg xrm ===>>>>>>>>
No device set hence falling to default device 0
------------------i=0------------------------------------------
xclbin_name : /opt/xilinx/xcdr/xclbins/transcode.xclbin
device_id : 0
------------------------------------------------------------
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from '/tmp/xil_enc_out.mp4':
Metadata:
major_brand : isom
minor_version : 512
compatible_brands: isomiso2avc1mp41
encoder : Lavf58.76.100
Duration: 00:00:05.00, start: 0.000000, bitrate: 7989 kb/s
Stream #0:0(und): Video: h264 (High) (avc1 / 0x31637661), yuv420p(tv), 1920x1080 [SAR 1:1 DAR 16:9], 7983 kb/s, 60 fps, 60 tbr, 15360 tbn, 120 tbc (default)
Metadata:
handler_name : VideoHandler
vendor_id : [0][0][0][0]
[MPSOC H.264 decoder @ 0x556e068ef000] timing information from stream is not available
Stream mapping:
Stream #0:0 -> #0:0 (h264 (mpsoc_vcu_h264) -> h264 (mpsoc_vcu_h264))
Press [q] to stop, [?] for help
[mpsoc_vcu_h264 @ 0x556e06853000] Custom Rate Control Mode is Disabled
XRT build version: 2.11.722
Build hash: d1ecc641da7b8805e778926e3354e8dd3fdaa6a8
Build date: 2023-01-25 15:37:40
Git branch: 2021.1
PID: 19325
UID: 1000
[Thu Sep 21 01:25:49 2023 GMT]
HOST: host-10-10-2-47
EXE: /opt/xilinx/ffmpeg/bin/ffmpeg
[XMA] WARNING: ffmpeg xma-vcu-encoder device warning: !! The specified Level is too low and will be adjusted !!
Output #0, mp4, to '/tmp/xil_xcode.mp4':
Metadata:
major_brand : isom
minor_version : 512
compatible_brands: isomiso2avc1mp41
encoder : Lavf58.76.100
Stream #0:0(und): Video: h264 (avc1 / 0x31637661), xlnx_xvbm_8(progressive), 1920x1080 [SAR 1:1 DAR 16:9], q=2-31, 8000 kb/s, 60 fps, 15360 tbn (default)
Metadata:
handler_name : VideoHandler
vendor_id : [0][0][0][0]
encoder : Lavc58.134.100 mpsoc_vcu_h264
frame= 300 fps= 89 q=-0.0 Lsize= 4846kB time=00:00:04.96 bitrate=7992.6kbits/s speed=1.47x
video:4842kB audio:0kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 0.076295% -
/tmp/
경로에xil_xcode.mp4
파일이 생성되었는지 확인합니다.
GStreamer_Decode Only 예제
Decode Only 예제에서는 Alveo U30 미디어 액셀러레이터 카드의 하드웨어 가속 기능이 정상적으로 작동하고 있는지 확인합니다. 이 예제는 FFmpeg 예제와 동일하게, 동영상 파일을 RAW 파일 형식으로 디코딩한 후 별도의 디렉터리에 저장하는 내용을 다룹니다.
예제 실행을 위해 H.264
형식의 파일이 필요하며, 샘플 파일을 다운로드에서 다운로드하여 활용하시기 바랍니다.
GStreamer는 스트리밍 미디어 애플리케이션을 생성하기 위한 프레임워크입니다. 자세한 정보는 GStreamer 공식 사이트를 참고하시기 바랍니다.
-
예제 파일을 테스트하기 전, 환경 설정을 수행합니다.
source /opt/xilinx/xcdr/setup.sh
-
아래와 같이 U30 기기가 정상적으로 인식되는지 확인합니다.
Number of U30 devices found : 2
{
"response": {
"name": "load",
"requestId": "1",
"status": "ok"
}
}
-----Load xrm plugins-----
{
"response": {
"name": "loadXrmPlugins",
"requestId": "1",
"status": "ok"
}
}
--------------------------------------- -
/opt/xilinx/examples/u30/gstreamer/tutorials
경로에 있는 예제 파일을 실행합니다../01_gst_decode_only.sh <Device index> <Input file> <Number of decoder instances, 1 to 8> <Number of buffers> <Fakesink 0/1>
인자 설명 <Device index>
파이프라인을 실행해야 할 디바이스 인덱스 <Input file>
8-bit 또는 10-bit의 샘플 파일 <Number of decoder instances>
동일한 파이프라인에서 실행할 인스턴스 수 <Number of buffers>
실처리할 버퍼 실수이며, 큰 입력 스트림의 일부분을 처리할지 여부를 지정하는 용도
- 값이-1
이라면 전체 비디오 스트림을 처리<Fakesink 0/1>
결괏값으로 출력되는 파일을 디스크 또는 fakesink 중 하나로 출력 실행 결과를 확인합니다.
./01_gst_decode_only.sh 0 /dev/shm/[sample_file_name] 1 -1 0
-
아래와 같이 결과가 출력되는지 확인합니다.
H.264
Input file is of type H.264
24
1920
1080
8
fakesink argument is supplied
num-buffers defined
fakesink value is 0
Script is running for filesink ............
Setting pipeline to PAUSED ...
Pipeline is PREROLLING ...
/GstPipeline:pipeline0/GstFPSDisplaySink:fpsdisplaysink_0/GstFileSink:filesink0: sync = false
/GstPipeline:pipeline0/GstH264Parse:h264parse0.GstPad:src: caps = video/x-h264, width=(int)1920, height=(int)1080, framerate=(fraction)60/1, chroma-format=(string)4:2:0, bit-depth-luma=(uint)8, bit-depth-chroma=(uint)8, colorimetry=(string)bt709, parsed=(boolean)true, stream-format=(string)byte-stream, alignment=(string)au, profile=(string)high, level=(string)4.2
/GstPipeline:pipeline0/GstVvas_XVCUDec:vvas_xvcudec0.GstPad:sink: caps = video/x-h264, width=(int)1920, height=(int)1080, framerate=(fraction)60/1, chroma-format=(string)4:2:0, bit-depth-luma=(uint)8, bit-depth-chroma=(uint)8, colorimetry=(string)bt709, parsed=(boolean)true, stream-format=(string)byte-stream, alignment=(string)au, profile=(string)high, level=(string)4.2
/GstPipeline:pipeline0/GstVvas_XVCUDec:vvas_xvcudec0.GstPad:src: caps = video/x-raw, format=(string)NV12, width=(int)1920, height=(int)1080, interlace-mode=(string)progressive, multiview-mode=(string)mono, multiview-flags=(GstVideoMultiviewFlagsSet)0:ffffffff:/right-view-first/left-flipped/left-flopped/right-flipped/right-flopped/half-aspect/mixed-mono, pixel-aspect-ratio=(fraction)1/1, chroma-site=(string)mpeg2, colorimetry=(string)bt709, framerate=(fraction)60/1
/GstPipeline:pipeline0/GstFPSDisplaySink:fpsdisplaysink_0.GstGhostPad:sink.GstProxyPad:proxypad0: caps = video/x-raw, format=(string)NV12, width=(int)1920, height=(int)1080, interlace-mode=(string)progressive, multiview-mode=(string)mono, multiview-flags=(GstVideoMultiviewFlagsSet)0:ffffffff:/right-view-first/left-flipped/left-flopped/right-flipped/right-flopped/half-aspect/mixed-mono, pixel-aspect-ratio=(fraction)1/1, chroma-site=(string)mpeg2, colorimetry=(string)bt709, framerate=(fraction)60/1
/GstPipeline:pipeline0/GstFPSDisplaySink:fpsdisplaysink_0/GstFileSink:filesink0.GstPad:sink: caps = video/x-raw, format=(string)NV12, width=(int)1920, height=(int)1080, interlace-mode=(string)progressive, multiview-mode=(string)mono, multiview-flags=(GstVideoMultiviewFlagsSet)0:ffffffff:/right-view-first/left-flipped/left-fllopped/right-flipped/right-flopped/half-aspect/mixed-mono, pixel-aspect-ratio=(fraction)1/1, chroma-site=(string)mpeg2, colorimetry=(string)bt709, framerate=(fraction)60/1
/GstPipeline:pipeline0/GstFPSDisplaySink:fpsdisplaysink_0.GstGhostPad:sink: caps = video/x-raw, format=(string)NV12, width=(int)1920, height=(int)1080, interlace-mode=(string)progressive, multiview-mode=(string)mono, multiview-flags=(GstVideoMultiviewFlagsSet)0:ffffffff:/right-view-first/left-flipped/left-flopped/right-flipped/right-flopped/half-aspect/mixed-mono, pixel-aspect-ratio=(fraction)1/1, chroma-site=(string)mpeg2, colorimetry=(string)bt709, framerate=(fraction)60/1
Pipeline is PREROLLED ...
Setting pipeline to PLAYING ...
New clock: GstSystemClock
/GstPipeline:pipeline0/GstFPSDisplaySink:fpsdisplaysink_0/GstFileSink:filesink0: sync = false
/GstPipeline:pipeline0/GstFPSDisplaySink:fpsdisplaysink_0: last-message = rendered: 97, dropped: 0, current: 192.97, average: 192.97
/GstPipeline:pipeline0/GstFPSDisplaySink:fpsdisplaysink_0: last-message = rendered: 193, dropped: 0, current: 191.34, average: 192.15
/GstPipeline:pipeline0/GstFPSDisplaySink:fpsdisplaysink_0: last-message = rendered: 290, dropped: 0, current: 192.43, average: 192.25
/GstPipeline:pipeline0/GstFPSDisplaySink:fpsdisplaysink_0: last-message = rendered: 386, dropped: 0, current: 190.78, average: 191.88
/GstPipeline:pipeline0/GstFPSDisplaySink:fpsdisplaysink_0: last-message = rendered: 482, dropped: 0, current: 191.50, average: 191.80
/GstPipeline:pipeline0/GstFPSDisplaySink:fpsdisplaysink_0: last-message = rendered: 578, dropped: 0, current: 191.86, average: 191.81
Got EOS from element "pipeline0".
Execution ended after 0:00:03.123939154
Setting pipeline to PAUSED ...
Setting pipeline to READY ...
Setting pipeline to NULL ...
Freeing pipeline ... -
/tmp/
경로에xil_dec_out_*.nv12
파일이 생성되었는지 확인합니다.
GStreamer_Encode Only 예제
Encode Only 예제는 1080p60 NV12
형식을 사용합니다. 클립을 인코더에 전달하여 vvas_xvcuenc
플러그인을 사용해 비트 전송률이 8Mbps인 H.264로 인코딩된 MP4 출력을 생성하고 이를 디스크에 저장하는 예제입니다. 이 예제는 Decode Only 예제를 통해 획득한 xil_dec_out_*.nv12
파일을 샘플 파일로 사용하므로, 먼저 해당 예제를 수행하시기 바랍니다.
-
Decode Only 예제를 통해 획득한
xil_dec_out_*.nv12
파일을 사용하여 예제 스크립트를 실행합니다../02_gst_h264_encode_only_1080p.sh <Device index> <Input file> <Number of decoder instances, 1 to 8> <10bit-input 0/1> <Fakesink 0/1>
인자 설명 <Device index>
파이프라인을 실행해야 할 디바이스 인덱스 <Input file>
8-bit 또는 10-bit의 샘플 파일 <Number of encoder instances, 1 to 8>
동일한 파이프라인에서 실행할 인스턴스 수 <10bit-input 0/1>
샘플 파일이 10-bit인지 여부를 확인 <Fakesink 0/1>
결괏값으로 출력되는 파일을 디스크 또는 fakesink 중 하나로 출력 실행 결과를 확인합니다.
./02_gst_h264_encode_only_1080p.sh 0 /tmp/xil_dec_out_*.nv12 1 0 0
-
예제 스크립트를 실행 후, 아래와 같이 결과가 출력되는지 확인합니다.
fakesink argument is supplied
8 bit input argument is supplied
nv12
instance number 0
fakesink value is 0
Script is running for filesink ............
Setting pipeline to PAUSED ...
Pipeline is PREROLLING ...
/GstPipeline:pipeline0/GstFPSDisplaySink:fpsdisplaysink_0/GstFileSink:filesink0: sync = false
/GstPipeline:pipeline0/GstRawVideoParse:rawvideoparse0.GstPad:src: caps = video/x-raw, format=(string)NV12, width=(int)1920, height=(int)1080, interlace-mode=(string)progressive, pixel-aspect-ratio=(fraction)1/1, chroma-site=(string)mpeg2, colorimetry=(string)bt709, framerate=(fraction)60/1
/GstPipeline:pipeline0/GstVvasXVCUEnc:vvasxvcuenc0.GstPad:sink: caps = video/x-raw, format=(string)NV12, width=(int)1920, height=(int)1080, interlace-mode=(string)progressive, pixel-aspect-ratio=(fraction)1/1, chroma-site=(string)mpeg2, colorimetry=(string)bt709, framerate=(fraction)60/1
/GstPipeline:pipeline0/GstVvasXVCUEnc:vvasxvcuenc0.GstPad:src: caps = video/x-h264, stream-format=(string)byte-stream, alignment=(string)au, chroma-format=(string)4:2:0, bit-depth-luma=(uint)8, bit-depth-chroma=(uint)8, width=(int)1920, height=(int)1080, pixel-aspect-ratio=(fraction)1/1, framerate=(fraction)60/1, interlace-mode=(string)progressive, colorimetry=(string)bt709, chroma-site=(string)mpeg2
/GstPipeline:pipeline0/GstH264Parse:h264parse0.GstPad:sink: caps = video/x-h264, stream-format=(string)byte-stream, alignment=(string)au, chroma-format=(string)4:2:0, bit-depth-luma=(uint)8, bit-depth-chroma=(uint)8, width=(int)1920, height=(int)1080, pixel-aspect-ratio=(fraction)1/1, framerate=(fraction)60/1, interlace-mode=(string)progressive, colorimetry=(string)bt709, chroma-site=(string)mpeg2
/GstPipeline:pipeline0/GstH264Parse:h264parse0.GstPad:src: caps = video/x-h264, stream-format=(string)avc, alignment=(string)au, chroma-format=(string)4:2:0, bit-depth-luma=(uint)8, bit-depth-chroma=(uint)8, width=(int)1920, height=(int)1080, pixel-aspect-ratio=(fraction)1/1, framerate=(fraction)60/1, interlace-mode=(string)progressive, colorimetry=(string)bt709, chroma-site=(string)mpeg2, parsed=(boolean)true, profile=(string)high, level=(string)4.2, codec_data=(buffer)0164002affe100272764002aad00cec0780227e5c05a80810178000003000800000303c19b0003d090007a13fffe0501000428ea43cb
/GstPipeline:pipeline0/GstQTMux:qtmux0.GstQTMuxPad:video_0: caps = video/x-h264, stream-format=(string)avc, alignment=(string)au, chroma-format=(string)4:2:0, bit-depth-luma=(uint)8, bit-depth-chroma=(uint)8, width=(int)1920, height=(int)1080, pixel-aspect-ratio=(fraction)1/1, framerate=(fraction)60/1, interlace-mode=(string)progressive, colorimetry=(string)bt709, chroma-site=(string)mpeg2, parsed=(boolean)true, profile=(string)high, level=(string)4.2, codec_data=(buffer)0164002affe100272764002aad00cec0780227e5c05a80810178000003000800000303c19b0003d090007a13fffe0501000428ea43cb
/GstPipeline:pipeline0/GstQTMux:qtmux0.GstPad:src: caps = video/quicktime, variant=(string)apple
/GstPipeline:pipeline0/GstFPSDisplaySink:fpsdisplaysink_0.GstGhostPad:sink.GstProxyPad:proxypad0: caps = video/quicktime, variant=(string)apple
/GstPipeline:pipeline0/GstFPSDisplaySink:fpsdisplaysink_0/GstFileSink:filesink0.GstPad:sink: caps = video/quicktime, variant=(string)apple
/GstPipeline:pipeline0/GstFPSDisplaySink:fpsdisplaysink_0.GstGhostPad:sink: caps = video/quicktime, variant=(string)apple
Pipeline is PREROLLED ...
Setting pipeline to PLAYING ...
New clock: GstSystemClock
/GstPipeline:pipeline0/GstFPSDisplaySink:fpsdisplaysink_0/GstFileSink:filesink0: sync = false
/GstPipeline:pipeline0/GstFPSDisplaySink:fpsdisplaysink_0: last-message = rendered: 48, dropped: 0, current: 93.96, average: 93.96
/GstPipeline:pipeline0/GstFPSDisplaySink:fpsdisplaysink_0: last-message = rendered: 94, dropped: 0, current: 90.71, average: 92.34
/GstPipeline:pipeline0/GstFPSDisplaySink:fpsdisplaysink_0: last-message = rendered: 139, dropped: 0, current: 89.41, average: 91.37
/GstPipeline:pipeline0/GstFPSDisplaySink:fpsdisplaysink_0: last-message = rendered: 185, dropped: 0, current: 90.19, average: 91.07
/GstPipeline:pipeline0/GstFPSDisplaySink:fpsdisplaysink_0: last-message = rendered: 231, dropped: 0, current: 90.20, average: 90.90
/GstPipeline:pipeline0/GstFPSDisplaySink:fpsdisplaysink_0: last-message = rendered: 277, dropped: 0, current: 90.46, average: 90.83
/GstPipeline:pipeline0/GstFPSDisplaySink:fpsdisplaysink_0: last-message = rendered: 323, dropped: 0, current: 90.36, average: 90.76
/GstPipeline:pipeline0/GstFPSDisplaySink:fpsdisplaysink_0: last-message = rendered: 369, dropped: 0, current: 90.95, average: 90.78
/GstPipeline:pipeline0/GstFPSDisplaySink:fpsdisplaysink_0: last-message = rendered: 415, dropped: 0, current: 91.20, average: 90.83
/GstPipeline:pipeline0/GstFPSDisplaySink:fpsdisplaysink_0: last-message = rendered: 461, dropped: 0, current: 91.20, average: 90.87
/GstPipeline:pipeline0/GstFPSDisplaySink:fpsdisplaysink_0: last-message = rendered: 507, dropped: 0, current: 91.21, average: 90.90
/GstPipeline:pipeline0/GstFPSDisplaySink:fpsdisplaysink_0: last-message = rendered: 553, dropped: 0, current: 91.17, average: 90.92
/GstPipeline:pipeline0/GstFPSDisplaySink:fpsdisplaysink_0: last-message = rendered: 598, dropped: 0, current: 87.25, average: 90.63
...
Got EOS from element "pipeline0".
Execution ended after 0:00:06.602619147
Setting pipeline to PAUSED ...
Setting pipeline to READY ...
Setting pipeline to NULL ...
Freeing pipeline ... -
/tmp/
경로에xil_enc_out_*.mp4
파일이 생성되었는지 확인합니다.
GStreamer 기본 Transcode 예제
기본 Transcode 예제에서는 H.264 클립을 가져와 새로운 비트 전송률 8Mbps를 사용하여 H.264로 다시 인코딩하는 방법을 설명합니다. 이번 예제는 Encode Only 예제에서 획득한 xil_enc_out.mp4 파일을 사용하므로, 먼저 해당 예제를 수행하시기 바랍니다.
-
Encode Only 예제를 통해 획득한 xil_enc_out.mp4 파일을 사용하여 예제 스크립트를 실행합니다.
./03_gst_h264_transcode_only.sh <Device index> <Input file> <Number of decoder instances, 1 to 8> <Number of buffers> <Fakesink 0/1>
인자 설명 <Device index>
파이프라인을 실행해야 할 디바이스 인덱스 <Input file>
8-bit 또는 10-bit의 샘플 파일 <Number of transcode instances, 1 to 8>
동일한 파이프라인에서 실행할 인스턴스 수 <Number of buffers>
실처리할 버퍼 실수이며, 큰 입력 스트림의 일부분을 처리할지 여부를 지정하는 용도
- 값이-1
이라면 전체 비디오 스트림을 처리<Fakesink 0/1>
결괏값으로 출력되는 파일을 디스크 또는 fakesink 중 하나로 출력 실행 결과를 확인합니다.
./03_gst_h264_transcode_only.sh 0 /tmp/xil_enc_out_*.mp4 1 -1 0
-
예제 스크립트를 실행 후, 아래와 같이 결과가 출력되는지 확인합니다.
Quicktime
H.264
Input file is of type Quicktime H.264
fakesink argument is supplied
num-buffers defined
0
fakesink value is 0
Script is running for filesink ............
Setting pipeline to PAUSED ...
Pipeline is PREROLLING ...
/GstPipeline:pipeline0/GstFPSDisplaySink:fpsdisplaysink_0/GstFileSink:filesink0: sync = false
/GstPipeline:pipeline0/GstQueue:queue0.GstPad:sink: caps = video/x-h264, stream-format=(string)avc, alignment=(string)au, level=(string)4.2, profile=(string)high, codec_data=(buffer)0164002affe100272764002aad00cec0780227e5c05a80810178000003000800000303c19b0003d090007a13fffe0501000428ea43cb, width=(int)1920, height=(int)1080, framerate=(fraction)60/1, pixel-aspect-ratio=(fraction)1/1, interlace-mode=(string)progressive, colorimetry=(string)bt709
/GstPipeline:pipeline0/GstQueue:queue0.GstPad:src: caps = video/x-h264, stream-format=(string)avc, alignment=(string)au, level=(string)4.2, profile=(string)high, codec_data=(buffer)0164002affe100272764002aad00cec0780227e5c05a80810178000003000800000303c19b0003d090007a13fffe0501000428ea43cb, width=(int)1920, height=(int)1080, framerate=(fraction)60/1, pixel-aspect-ratio=(fraction)1/1, interlace-mode=(string)progressive, colorimetry=(string)bt709
/GstPipeline:pipeline0/GstH264Parse:h264parse0.GstPad:sink: caps = video/x-h264, stream-format=(string)avc, alignment=(string)au, level=(string)4.2, profile=(string)high, codec_data=(buffer)0164002affe100272764002aad00cec0780227e5c05a80810178000003000800000303c19b0003d090007a13fffe0501000428ea43cb, width=(int)1920, height=(int)1080, framerate=(fraction)60/1, pixel-aspect-ratio=(fraction)1/1, interlace-mode=(string)progressive, colorimetry=(string)bt709
/GstPipeline:pipeline0/GstH264Parse:h264parse0.GstPad:src: caps = video/x-h264, stream-format=(string)byte-stream, alignment=(string)au, level=(string)4.2, profile=(string)high, width=(int)1920, height=(int)1080, framerate=(fraction)60/1, pixel-aspect-ratio=(fraction)1/1, interlace-mode=(string)progressive, colorimetry=(string)bt709, chroma-format=(string)4:2:0, bit-depth-luma=(uint)8, bit-depth-chroma=(uint)8, parsed=(boolean)true
/GstPipeline:pipeline0/GstVvas_XVCUDec:vvas_xvcudec0.GstPad:sink: caps = video/x-h264, stream-format=(string)byte-stream, alignment=(string)au, level=(string)4.2, profile=(string)high, width=(int)1920, height=(int)1080, framerate=(fraction)60/1, pixel-aspect-ratio=(fraction)1/1, interlace-mode=(string)progressive, colorimetry=(string)bt709, chroma-format=(string)4:2:0, bit-depth-luma=(uint)8, bit-depth-chroma=(uint)8, parsed=(boolean)true
/GstPipeline:pipeline0/GstVvas_XVCUDec:vvas_xvcudec0.GstPad:src: caps = video/x-raw, format=(string)NV12, width=(int)1920, height=(int)1080, interlace-mode=(string)progressive, multiview-mode=(string)mono, multiview-flags=(GstVideoMultiviewFlagsSet)0:ffffffff:/right-view-first/left-flipped/left-flopped/right-flipped/right-flopped/half-aspect/mixed-mono, pixel-aspect-ratio=(fraction)1/1, chroma-site=(string)mpeg2, colorimetry=(string)bt709, framerate=(fraction)60/1
/GstPipeline:pipeline0/GstQueue:queue1.GstPad:sink: caps = video/x-raw, format=(string)NV12, width=(int)1920, height=(int)1080, interlace-mode=(string)progressive, multiview-mode=(string)mono, multiview-flags=(GstVideoMultiviewFlagsSet)0:ffffffff:/right-view-first/left-flipped/left-fllopped/right-flipped/right-fllopped/half-aspect/mixed-mono, pixel-aspect-ratio=(fraction)1/1, chroma-site=(string)mpeg2, colorimetry=(string)bt709, framerate=(fraction)60/1
/GstPipeline:pipeline0/GstQueue:queue1.GstPad:src: caps = video/x-raw, format=(string)NV12, width=(int)1920, height=(int)1080, interlace-mode=(string)progressive, multiview-mode=(string)mono, multiview-flags=(GstVideoMultiviewFlagsSet)0:ffffffff:/right-view-first/left-flipped/left-fllopped/right-flipped/right-fllopped/half-aspect/mixed-mono, pixel-aspect-ratio=(fraction)1/1, chroma-site=(string)mpeg2, colorimetry=(string)bt709, framerate=(fraction)60/1
/GstPipeline:pipeline0/GstVvasXVCUEnc:vvasxvcuenc0.GstPad:sink: caps = video/x-raw, format=(string)NV12, width=(int)1920, height=(int)1080, interlace-mode=(string)progressive, multiview-mode=(string)mono, multiview-flags=(GstVideoMultiviewFlagsSet)0:ffffffff:/right-view-first/left-flipped/left-fllopped/right-flipped/right-fllopped/half-aspect/mixed-mono, pixel-aspect-ratio=(fraction)1/1, chroma-site=(string)mpeg2, colorimetry=(string)bt709, framerate=(fraction)60/1
/GstPipeline:pipeline0/GstVvasXVCUEnc:vvasxvcuenc0.GstPad:src: caps = video/x-h264, stream-format=(string)byte-stream, alignment=(string)au, chroma-format=(string)4:2:0, bit-depth-luma=(uint)8, bit-depth-chroma=(uint)8, width=(int)1920, height=(int)1080, pixel-aspect-ratio=(fraction)1/1, framerate=(fraction)60/1, interlace-mode=(string)progressive, colorimetry=(string)bt709, chroma-site=(string)mpeg2, multiview-mode=(string)mono, multiview-flags=(GstVideoMultiviewFlagsSet)0:ffffffff:/right-view-first/left-flipped/left-fllopped/right-flipped/right-fllopped/half-aspect/mixed-mono
/GstPipeline:pipeline0/GstH264Parse:h264parse1.GstPad:sink: caps = video/x-h264, stream-format=(string)byte-stream, alignment=(string)au, chroma-format=(string)4:2:0, bit-depth-luma=(uint)8, bit-depth-chroma=(uint)8, width=(int)1920, height=(int)1080, pixel-aspect-ratio=(fraction)1/1, framerate=(fraction)60/1, interlace-mode=(string)progressive, colorimetry=(string)bt709, chroma-site=(string)mpeg2, multiview-mode=(string)mono, multiview-flags=(GstVideoMultiviewFlagsSet)0:ffffffff:/right-view-first/left-flipped/left-fllopped/right-flipped/right-fllopped/half-aspect/mixed-mono
/GstPipeline:pipeline0/GstH264Parse:h264parse1.GstPad:src: caps = video/x-h264, stream-format=(string)avc, alignment=(string)au, chroma-format=(string)4:2:0, bit-depth-luma=(uint)8, bit-depth-chroma=(uint)8, width=(int)1920, height=(int)1080, pixel-aspect-ratio=(fraction)1/1, framerate=(fraction)60/1, interlace-mode=(string)progressive, colorimetry=(string)bt709, chroma-site=(string)mpeg2, multiview-mode=(string)mono, multiview-flags=(GstVideoMultiviewFlagsSet)0:ffffffff:/right-view-first/left-flipped/left-fllopped/right-flipped/right-fllopped/half-aspect/mixed-mono, parsed=(boolean)true, profile=(string)high, level=(string)4.2, codec_data=(buffer)0164002affe100272764002aad00cec0780227e5c05a80810178000003000800000303c19b0003d090007a13fffe0501000428ea43cb
/GstPipeline:pipeline0/GstQTMux:qtmux0.GstQTMuxPad:video_0: caps = video/x-h264, stream-format=(string)avc, alignment=(string)au, chroma-format=(string)4:2:0, bit-depth-luma=(uint)8, bit-depth-chroma=(uint)8, width=(int)1920, height=(int)1080, pixel-aspect-ratio=(fraction)1/1, framerate=(fraction)60/1, interlace-mode=(string)progressive, colorimetry=(string)bt709, chroma-site=(string)mpeg2, multiview-mode=(string)mono, multiview-flags=(GstVideoMultiviewFlagsSet)0:ffffffff:/right-view-first/left-flipped/left-fllopped/right-flipped/right-fllopped/half-aspect/mixed-mono, parsed=(boolean)true, profile=(string)high, level=(string)4.2, codec_data=(buffer)0164002affe100272764002aad00cec0780227e5c05a80810178000003000800000303c19b0003d090007a13fffe0501000428ea43cb
/GstPipeline:pipeline0/GstQTMux:qtmux0.GstPad:src: caps = video/quicktime, variant=(string)apple
/GstPipeline:pipeline0/GstFPSDisplaySink:fpsdisplaysink_0.GstGhostPad:sink.GstProxyPad:proxypad0: caps = video/quicktime, variant=(string)apple
/GstPipeline:pipeline0/GstFPSDisplaySink:fpsdisplaysink_0/GstFileSink:filesink0.GstPad:sink: caps = video/quicktime, variant=(string)apple
/GstPipeline:pipeline0/GstFPSDisplaySink:fpsdisplaysink_0.GstGhostPad:sink: caps = video/quicktime, variant=(string)apple
Pipeline is PREROLLED ...
Setting pipeline to PLAYING ...
New clock: GstSystemClock
/GstPipeline:pipeline0/GstFPSDisplaySink:fpsdisplaysink_0/GstFileSink:filesink0: sync = false
/GstPipeline:pipeline0/GstFPSDisplaySink:fpsdisplaysink_0: last-message = rendered: 47, dropped: 0, current: 93.74, average: 93.74
/GstPipeline:pipeline0/GstFPSDisplaySink:fpsdisplaysink_0: last-message = rendered: 93, dropped: 0, current: 90.61, average: 92.16
/GstPipeline:pipeline0/GstFPSDisplaySink:fpsdisplaysink_0: last-message = rendered: 138, dropped: 0, current: 88.21, average: 90.84
/GstPipeline:pipeline0/GstFPSDisplaySink:fpsdisplaysink_0: last-message = rendered: 184, dropped: 0, current: 90.33, average: 90.71
/GstPipeline:pipeline0/GstFPSDisplaySink:fpsdisplaysink_0: last-message = rendered: 230, dropped: 0, current: 90.17, average: 90.60
/GstPipeline:pipeline0/GstFPSDisplaySink:fpsdisplaysink_0: last-message = rendered: 276, dropped: 0, current: 90.33, average: 90.55
/GstPipeline:pipeline0/GstFPSDisplaySink:fpsdisplaysink_0: last-message = rendered: 322, dropped: 0, current: 90.32, average: 90.52
/GstPipeline:pipeline0/GstFPSDisplaySink:fpsdisplaysink_0: last-message = rendered: 368, dropped: 0, current: 90.89, average: 90.57
/GstPipeline:pipeline0/GstFPSDisplaySink:fpsdisplaysink_0: last-message = rendered: 414, dropped: 0, current: 91.17, average: 90.63
/GstPipeline:pipeline0/GstFPSDisplaySink:fpsdisplaysink_0: last-message = rendered: 460, dropped: 0, current: 91.18, average: 90.69
/GstPipeline:pipeline0/GstFPSDisplaySink:fpsdisplaysink_0: last-message = rendered: 506, dropped: 0, current: 91.10, average: 90.73
/GstPipeline:pipeline0/GstFPSDisplaySink:fpsdisplaysink_0: last-message = rendered: 552, dropped: 0, current: 91.15, average: 90.76
/GstPipeline:pipeline0/GstFPSDisplaySink:fpsdisplaysink_0: last-message = rendered: 598, dropped: 0, current: 87.38, average: 90.49
...
Got EOS from element "pipeline0".
Execution ended after 0:00:06.611305520
Setting pipeline to PAUSED ...
Setting pipeline to READY ...
Setting pipeline to NULL ...
Freeing pipeline ... -
/tmp/
경로에xil_xcode_*.mp4
파일이 생성되었는지 확인합니다.
- AMD Xilinx Video SDK 공식 문서의 Tutorials and Examples에서 더 많은 예제를 확인하실 수 있습니다.
- AMD Xilinx Video SDK의 사용에 문제가 있을 경우, Limitations과 Known Issues를 참고하시기 바랍니다.