본문으로 건너뛰기

부록. 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 크기를 제공합니다. 다음 순서에 따라 인스턴스 생성하고 연결을 수행합니다.

  1. 카카오클라우드 콘솔 > Beyond Compute Service > Virtual Machine 메뉴로 이동합니다.

  2. 인스턴스 생성 및 연결하기를 참고하여, 원하는 인스턴스를 생성하고 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) 정보를 확인해야 합니다.

  1. /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 "1";
    • (선택 작업) 만약 구버전의 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
  2. 현재 사용 중인 리눅스 배포판의 코드명(distro name) 정보를 확인합니다. 출력된 distro name은 bionic, focal 또는 jammy 중 하나입니다.

    lsb_release -c
  3. /etc/apt/sources.list.d/ 경로에 xilinx.list 파일을 생성한 후, 아래의 <distro name> 부분에 출력된 distro name을 입력합니다.

    deb [trusted=yes] https://packages.xilinx.com/artifactory/debian-packages <distro name> main

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. 런타임 환경 설정

런타임 환경 설정은 해당 인스턴스에 새로 접속할 때마다 또는 새로 터미널을 열 때마다 실행해야 합니다.

  1. 런타임 환경을 아래와 같이 설정합니다.

    source /opt/xilinx/xcdr/setup.sh
  2. 다음 명령어를 사용하여 카드가 올바르게 인식되고 있는지 확인합니다.

    xbutil examine
  3. 디바이스가 정상적으로 인식될 경우 아래와 같은 메시지가 출력됩니다. 표시되는 디바이스 목록은 사용 중인 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 공식 사이트를 참고하시기 바랍니다.

  1. 예제 파일을 테스트하기 전, 환경 설정을 완료합니다.

    source /opt/xilinx/xcdr/setup.sh
  2. 아래와 같이 U30 기기가 정상적으로 인식되는지 확인합니다.

        ...
    Number of U30 devices found: 2

    {
    "response": {
    "name": "load",
    "requestId": "1",
    "status": "ok"
    }
    }

    -----Load xrm plugins-----
    {
    "response": {
    "name": "loadXrmPlugins",
    "requestId": "1",
    "status": "ok"
    }
    }
  3. /opt/xilinx/examples/u30/ffmpeg/tutorials 경로에 있는 예제 파일을 실행합니다.

    ./01_ffmpeg_decode_only.sh /dev/shm/[sample_file_name]
  4. 다음과 같이 결과가 출력되는지 확인합니다.

    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%
  5. 마지막으로, /tmp/ 경로에 xil_dec_out.yuv 파일이 생성되었는지 확인합니다.

FFmpeg_Encode Only 예제

Encode Only 예제는 YUV420 형식의 RAW 1080p60 클립을 인코더에 전달하여, 비트 전송률이 8Mbps인 H.264로 인코딩된 MP4 출력을 생성하고 디스크에 저장하는 내용을 다룹니다. 이 예제는 Decode Only 예제를 통해 획득한 xil_dec_out.yuv 파일을 샘플 파일로 사용하므로, 먼저 해당 예제를 수행하시기 바랍니다.

  1. Decode Only 예제를 통해 획득한 xil_dec_out.yuv 파일을 사용하여 예제 스크립트를 실행합니다.

    ./02_ffmpeg_encode_only_1080p.sh /tmp/xil_dec_out.yuv
  2. 예제 스크립트를 실행 후, 아래와 같이 결과가 출력되는지 확인합니다.

    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%

  3. /tmp/ 경로에 xil_enc_out.mp4 파일이 생성되었는지 확인합니다.

FFmpeg_기본 Transcode 예제

기본 Transcode 예제는 H.264 클립을 가져와 새로운 비트 전송률인 8Mbps를 사용하여 H.264로 다시 인코딩하는 예제입니다.
이번 예제는 Encode Only 예제에서 획득한 xil_enc_out.mp4 파일을 사용하므로, 먼저 해당 예제를 수행하시기 바랍니다.

  1. Encode Only 예제를 통해 획득한 xil_enc_out.mp4 파일을 사용하여 예제 스크립트를 실행합니다.

    ./03_ffmpeg_transcode_only.sh /tmp/xil_enc_out.mp4
  2. 아래와 같이 결과가 출력되는지 확인합니다.

     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%
  3. /tmp/ 경로에 xil_xcode.mp4 파일이 생성되었는지 확인합니다.

GStreamer_Decode Only 예제

Decode Only 예제에서는 Alveo U30 미디어 액셀러레이터 카드의 하드웨어 가속 기능이 정상적으로 작동하고 있는지 확인합니다. 이 예제는 FFmpeg 예제와 동일하게, 동영상 파일을 RAW 파일 형식으로 디코딩한 후 별도의 디렉터리에 저장하는 내용을 다룹니다.
예제 실행을 위해 H.264 형식의 파일이 필요하며, 샘플 파일을 다운로드에서 다운로드하여 활용하시기 바랍니다.

안내

GStreamer는 스트리밍 미디어 애플리케이션을 생성하기 위한 프레임워크입니다. 자세한 정보는 GStreamer 공식 사이트를 참고하시기 바랍니다.

  1. 예제 파일을 테스트하기 전, 환경 설정을 수행합니다.

    source /opt/xilinx/xcdr/setup.sh
  2. 아래와 같이 U30 기기가 정상적으로 인식되는지 확인합니다.

    Number of U30 devices found : 2
    {
    "response": {
    "name": "load",
    "requestId": "1",
    "status": "ok"
    }
    }

    -----Load xrm plugins-----

    {
    "response": {
    "name": "loadXrmPlugins",
    "requestId": "1",
    "status": "ok"
    }
    }
    ---------------------------------------
  3. /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
  4. 아래와 같이 결과가 출력되는지 확인합니다.

    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 ...
  5. /tmp/ 경로에 xil_dec_out_*.nv12 파일이 생성되었는지 확인합니다.

GStreamer_Encode Only 예제

Encode Only 예제는 1080p60 NV12 형식을 사용합니다. 클립을 인코더에 전달하여 vvas_xvcuenc 플러그인을 사용해 비트 전송률이 8Mbps인 H.264로 인코딩된 MP4 출력을 생성하고 이를 디스크에 저장하는 예제입니다. 이 예제는 Decode Only 예제를 통해 획득한 xil_dec_out_*.nv12 파일을 샘플 파일로 사용하므로, 먼저 해당 예제를 수행하시기 바랍니다.

  1. 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
  2. 예제 스크립트를 실행 후, 아래와 같이 결과가 출력되는지 확인합니다.

    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 ...
  3. /tmp/ 경로에 xil_enc_out_*.mp4 파일이 생성되었는지 확인합니다.

GStreamer 기본 Transcode 예제

기본 Transcode 예제에서는 H.264 클립을 가져와 새로운 비트 전송률 8Mbps를 사용하여 H.264로 다시 인코딩하는 방법을 설명합니다. 이번 예제는 Encode Only 예제에서 획득한 xil_enc_out.mp4 파일을 사용하므로, 먼저 해당 예제를 수행하시기 바랍니다.

  1. 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
  2. 예제 스크립트를 실행 후, 아래와 같이 결과가 출력되는지 확인합니다.

     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 ...
  3. /tmp/ 경로에 xil_xcode_*.mp4 파일이 생성되었는지 확인합니다.

안내
  • AMD Xilinx Video SDK 공식 문서의 Tutorials and Examples에서 더 많은 예제를 확인하실 수 있습니다.
  • AMD Xilinx Video SDK의 사용에 문제가 있을 경우, LimitationsKnown Issues를 참고하시기 바랍니다.