infiniband 를 통한 4k sdi data 전송 framing (ver 0.5) ㈜ 스마트구루 ( 약칭 mp4rd)
TRANSCRIPT
InfiniBand 를 통한 4K SDI data 전송 Fram-ing
(ver 0.5)
㈜ 스마트구루
( 약칭 MP4RD)
날짜 작성자 버전 내용
2014.05.22 서원석 0.2 StreamFormatBox 내용추가StreamSampleOffset 오류 수정 및 내용 추가
2014.06.03 서원석 0.3 Capture server / Master system network 구조도 추가
2014.07.20 서원석 0.5 ‘blck’, ‘esso’ 박스 추가 , 샘플 사이즈 가변 가능한 구조로 변경
Revision history
3Page. COPYRIGHT 2014. SMART GURU CO., LTD. ALL RIGHTS RESERVED
OVERVIEW개요
4K SDI data networking
01.
Capture server
Encoder system 1 (Master)
MPIinter-face
Encoder system 2
MPIinter-face
Encoder system 3
MPIinter-face
Encoder system 4
MPIinter-face
4K Camera
1
2
3
① 3G SDI * 4
② InfiniBand network
③ MPI Interface
HEVC Encoder Blade Server
Matrox 4K capture card
InfiniBand Interface card
InfiniBand Interface card
Mp4 RAW data framing format
4Page. COPYRIGHT 2014. SMART GURU CO., LTD. ALL RIGHTS RESERVED
MP4 FILE FORMAT개요01.
5Page.
02.
COPYRIGHT 2014. SMART GURU CO., LTD. ALL RIGHTS RESERVED
MP4 RAW data framing
FRAMING STRUCTURE
MPEG4 file structure ( ISO/IEC 14496-12 ) 의 Box 구조 차용 4 개의 3G SDI (SMPTE 424M, 425M) 를 통해 전달되는 Video RAW data, Audio RAW data 전송 YUV 4:2:0 4K (3840 * 2160) 60 p PCM RAW data (16, 24 bit) – Level 별로 상이 . Max 32 channel MPEG4 Box 중 SDI RAW 데이터를 전송하기 위한 필수 frame 및 새로 정의된 Box 를 이용하여
Frame 구조 정의
Frame 구성방안
6Page. COPYRIGHT 2014. SMART GURU CO., LTD. ALL RIGHTS RESERVED
CAPTURE SERVER / MASTER SYSTEM NETWORK 구조도개요
TCP/IP Connection – data channel
01.
Encoder system 1 (Master)Capture server
Connect
Accept
MP4 RAW data
TCP client TCP Server
• TCP/IP network• InfiniBand with
• InfiniBand switch• MP4 RAW data framing
structure
7Page.
03.
COPYRIGHT 2014. SMART GURU CO., LTD. ALL RIGHTS RESERVED
MP4 4K RAW data framing
BOX HIERARCHICAL DIAGRAM
ftyp
moov
tist
mdia
stif
stbl
stso
mdat
blck
변경MP4 표준
신규
‘moov’, ‘mdia’, ‘stbl’, ‘mdia’ Box 는 단순 container box
stfm
hdlr
4K RAW Data block
8Page.
03.
COPYRIGHT 2014. SMART GURU CO., LTD. ALL RIGHTS RESERVED
MP4 4K RAW data framing
BLOCK BOX
Pseudo code
aligned(8) class BlockBox
extends Box(‘blck’) {
}* File 당 1 개 포함
‘ftyp’ Box syntax – 파일 타입 정의
field desc
9Page.
03.
COPYRIGHT 2014. SMART GURU CO., LTD. ALL RIGHTS RESERVED
MP4 4K RAW data framing
FILE TYPE BOX ( 수정 )
Pseudo code
aligned(8) class FileTypeBox
extends Box(‘ftyp’) {
unsigned int(32) major_brand;
unsigned int(32) minor_version;
unsigned int(32) compatible_brands[]; // to end of the box
}* File 당 1 개 포함
‘ftyp’ Box syntax – 파일 타입 정의
field desc
major_brand ‘4krw’ 로 고정
minor_version 1 ( 현재 버전 )
Compatible_brands[] 생략 ( 호환 brand 없음 )
10Page.
03.
COPYRIGHT 2014. SMART GURU CO., LTD. ALL RIGHTS RESERVED
MP4 4K RAW data framing
HANDLER REFERENCE BOX ( 수정 )
Pseudo code
aligned(8) class HandlerBox extends FullBox(‘hdlr’, version = 0, 0) {unsigned int(32) pre_defined = 0;unsigned int(32) handler_type;const unsigned int(32)[3] reserved = 0;string name;
}* ‘moov’ Box 당 1 개 포함 .
‘hdlr’ Box syntax – moov Box 내 포함된 스트림 핸들러 정의
field desc
handler_type ‘4krw’ 로 고정
name ‘4K SDI raw data handler’ (UTF-8) 로 고정
11Page.
03.
COPYRIGHT 2014. SMART GURU CO., LTD. ALL RIGHTS RESERVED
MP4 4K RAW data framing
STREAM INFO BOX ( 신규 )
Pseudo code
aligned(8) class StreamInfoBox
extends Box(‘stif) {
unsigned int(32) stream_count;
unsigned int(32) sample_count;
}
* container – ‘moov’ Box, ‘moov’ box 당 1 개 포함
‘stif’ Box – 포함된 스트림 수 및 샘플 수 정의
field desc
stream_count 프레임 데이터에 포함된 스트림의 수 . (YUV + PCM SDI 데이터 전송시 2 로 고정 )
sample_count 프레임 데이터에 포함된 스트림의 샘플 (frame) 수
12Page.
03.
COPYRIGHT 2014. SMART GURU CO., LTD. ALL RIGHTS RESERVED
MP4 4K RAW data framing
STREAM FORMAT BOX ( 신규 )
Pseudo code
aligned(8) class StreamFormatBox
extends Box(‘stfm’) {
unsigned int(32) stream_id;
unsigned int(32) stream_type;
if ( stream_type == ‘pcma’) {
unsigned int[8] sample_bits;
unsigned int[8] channels;
unsigned int[16] sample_rate;
} else if ( stream_type == ‘yuvr’ ) {
unsigned int[16] width;
unsigned int[16] height;
unsigned int[8] bits_per_pixel;
unsigned int [8] bit_depth;
unsigned int[16] frame_rate_x100;
unsigned int[32] fourCC;
} else if ( stream_type == ‘vdes’ ) {}
}* container – ‘stif’ Box, ‘stif’ box 의 stream_count 만큼 포함
‘stfm’ Box
field desc
stream_id 스트림의 id ( 추후 ‘ stso’ box 에서 사용 )
stream_type 스트림 형태를 box type 과 같은 형태로 (big-endian 32 bit, readable) 정의 .PCM audio : ‘pcma’, YUV : ‘yuvr’
sample_bits PCM sample bits (16, 24, 32)
channels Audio channels
sample_rate Audio sample rate (e.g 48000)
width 가로 픽셀 수
height 세로 픽셀 수
bits_per_pixel Pixel 당 비트수 (4:2:0, 8 bit 일 경우 24. 4:2:0 10 bit 인 경우 30)
bit_depth Color depth (8 bit or 10 bit)
Frame_rate_x100 Frame rate * 100 의 값 ( 60 fps 6000, 59.94 fps 5994)
fourCC YUV data 의 fourcc 값 e.g ‘IYUV’, ‘UYVY’
13Page.
03.
COPYRIGHT 2014. SMART GURU CO., LTD. ALL RIGHTS RESERVED
MP4 4K RAW data framing
STREAM SAMPLE OFFSET( 신규 )
Pseudo code
aligned(8) class SampleOffset {
unsigned int(8) sample_index;
unsigned int(24) sample_size_byte;
unsigned int(64) offset;
unsigned int(64) tist;
}
‘stso’ Box – 스트림의 sample 별 offset 및 timestamp 정의
field desc
sample_index 0 ~ (sample_count - 1 ) 까지의 index
Sample_size_byte 샘플 길이 ( 바이트 )
offset 해당 sample 의 ‘ mdat’ box 내의 offset (length 필드를 포함한 index)
tist 입력 샘플의 timestamp 값
stream_id ‘stfm’ box 에 정의된 stream_id
sample_count SampleInfoBox 의 sample_count 와 같은 값으로 설정 .
offset SampleOffset 데이터 클래스를 sample_count 만큼 정의
Pseudo codealigned(8) class SampleDataIndicatorBox
extends Box(‘stso’) {unsigned int(32) stream_id;unsigned int(32) sample_count;SampleOffset [sample_count] offset;
}
* container – ‘stbl’ Box, ‘stbl’ box 당 stream_count 만큼 포함
14Page.
03.
COPYRIGHT 2014. SMART GURU CO., LTD. ALL RIGHTS RESERVED
MP4 4K RAW data framing
ELEMENTARY STREAM SAMPLE OFFSET(신규 )
Pseudo code
aligned(8) class EsSampleOffset {
unsigned int(8) sample_index;
unsigned int(24) sample_size_byte;
unsigned int(64) offset;
unsigned int(64) tist;
unsigned int(32) frame_type;
unsigned int(32) p_order;
unsigned int(32) d_order;
}
‘stso’ Box – 스트림의 sample 별 offset 및 timestamp 정의
field desc
sample_index 0 ~ (sample_count - 1 ) 까지의 index
Sample_size_byte 샘플 길이 ( 바이트 )
offset 해당 sample 의 ‘ mdat’ box 내의 offset (length 필드를 포함한 index)
tist 입력 샘플의 timestamp 값
stream_id ‘stfm’ box 에 정의된 stream_id
sample_count SampleInfoBox 의 sample_count 와 같은 값으로 설정 .
offset SampleOffset 데이터 클래스를 sample_count 만큼 정의
Pseudo codealigned(8) class ESSampleDataIndicatorBox
extends Box(‘esso’) {unsigned int(32) stream_id;unsigned int(32) sample_count;EsSampleOffset [sample_count] offset;
}
* container – ‘stbl’ Box, ‘stbl’ box 당 stream_count 만큼 포함