녹화 API

Oasis의 녹화 API는 두가지 방식을 지원합니다.

  • 통합 녹화 API: 여러 영상 채널을 하나의 녹화 파일로 저장하는 방식
  • 개별 녹화 API: 각 영상 채널을 개별 녹화 파일로 저장하는 방식

녹화 파일경로 지정

일반 녹화는 통합 녹화의 startRecording 이나 개별 녹화의 startMultiChannelRecording 을 호출하여 녹화를 시작합니다.

통합 녹화의 MediaObserver::queryNewFilePath 나 개별 녹화의 MediaObserver2::queryNewFilePaths 콜백 함수가 호출됩니다.

자동으로 생성된 파일 경로를 콜백 함수의 인수로 전달됩니다.

통합 녹화의 경우 자동 생성 파일 경로 형식은 아래와 같이 패러미터 키 값과 날짜와 시간 조합으로 이루어져있습니다.

<normal-folder-path>/<file-prefix>YYYY-MM-DD-hh-mm-ss.<file-extension>

영상 채널별 개별 녹화의 경우 아래와 같습니다.

<normal-folder-path>/<file-prefix>YYYY-MM-DD-hh-mm-ss-CH<N>.<file-extension>

<N>은 1, 2, 3 등 채널 번호입니다.

이 함수의 매개변수로 전달된 녹화 파일 경로를 응용 프로그램에서 변경할 수 있습니다.

이벤트와 모션 녹화는 녹화 파일 경로를 직접 API 인수로 전달합니다.

각 녹화 파일 경로는 절대 경로입니다.

녹화 파일이 위치하는 폴더는 녹화 객체 생성시 전달한 패러미터의 값을 사용하는 것을 권장하며 다른 폴더 지정도 가능합니다.

  • normal-folder-path
  • event-folder-path
  • motion-folder-path

패러미터 설정

통합 녹화 방식과 개별 녹화 방식은 아래와 같이 각 녹화 객체 생성시 매개변수로 key-value map을 전달합니다.

기본값
필수
설명
file-prefix
oasis-
 
파일명 생성시 쓰이는 접두어입니다. 빈 문자열일 경우, 자동생성 파일이름에 prefix가 적용되지 않습니다. MediaObserver::queryNewFilePath에서 덮어쓸 수 있습니다.
file-extension
avi
 
파일 확장자입니다. avi, mp4 중 하나를 입력합니다.
file-duration-secs
60
 
녹화할 총 시간입니다. 초단위입니다. 녹화 총 시간이 경과되거나 파일 크기 제한에 이르면 새로운 파일로 녹화를 시작합니다. 새파일명은 MediaObserver::queryNewFilePath에서 확인 후 덮어쓸 수 있습니다.
normal-folder-path
/mnt/extsd/​NORMAL
 
일반 녹화 파일의 절대 경로를 자동으로 생성하기 위한 녹화 폴더 경로입니다. Oasis 파일시스템(OFFS) 포맷 시 설정한 일반 녹화 폴더를 기입합니다. 만일 OFFS가 마운팅된 위치가 아닌 다른 파일시스템의 폴더를 기입하면, 기본 파일크기는 16MB로 제한되지만, oasis::fs::offsConfigLocalFormatInfo 호출로 기본 파일 크기를 변경할 수 있습니다.
event-folder-path
/mnt/extsd/​EVENT
 
미디어 데이터 캐쉬 저장용 이벤트 녹화 폴더 경로입니다. Oasis 파일시스템(OFFS) 포맷 시 설정한 이벤트 녹화 폴더를 기입합니다. 읽고 쓰기가 가능한 다른 파일시스템이 마운팅된 위치의 폴더를 지정하여도 무방합니다. enable-persistent-cache 키 값이 "1"인 경우에만 적용됩니다. 실제 이벤트 녹화는 startEventRecording 등 이벤트 녹화 API에서 경로를 지정합니다.
motion-folder-path
/mnt/extsd/​MOTION
 
미디어 데이터 캐쉬 저장용 모션 녹화 폴더 경로입니다. Oasis 파일시스템(OFFS) 포맷 시 설정한 모션 녹화 폴더를 기입합니다. 읽고 쓰기가 가능한 다른 파일시스템이 마운팅된 위치의 폴더를 지정하여도 무방합니다. enable-persistent-cache 키 값이 "1"인 경우에만 적용됩니다. 실제 모션 녹화는 startMotionRecording 등 모션 녹화 API에서 경로를 지정합니다.
event-pre-recording-seconds
10
 
이벤트 발생 전 녹화 시간을 지정합니다. 초단위입니다. 최소 0초, 최대 60초입니다. 메모리 캐쉬 크기와 디스크 쓰기, 비트레이드 등을 고려하여 결정합니다.
event-post-recording-seconds
10
 
이벤트 발생 후 녹화 시간을 지정합니다. 초단위입니다. 최소 0초, 최대 60초입니다.
motion-pre-recording-seconds
10
 
모션 발생 전 녹화 시간을 지정합니다. 초단위입니다. 최소 0초, 최대 60초입니다.
motion-post-recording-seconds
10
 
모션 발생 후 녹화 시간을 지정합니다. 초단위입니다. 최소 0초, 최대 60초입니다.
disable-event-recording
0
 
이벤트 녹화를 하지 않습니다.
disable-offs-recording
0
 
녹화 데이터를 파일 시스템에 쓰지 않습니다.
max-files
5
 
최대 녹화 파일 개수입니다. "0"이면 녹화 파일 개수 제한없이 녹화합니다. 녹화 폴더 용량이 다 차면 가장 오래된 파일을 삭제하고 녹화를 재시작합니다.
delete-oldest-file-on-max-files
1
 
"1" 값이면 최대 녹화 파일 개수가 되면 가장 오래된 녹화 파일을 삭제하고, 새파일명으로 녹화를 재시작합니다. "0" 값이면 최대 녹화 파일 개수가 되면 녹화를 중지합니다. max-files가 1 이상인 경우 유효합니다.
recording-size-limit-threshold-seconds
2
 
녹화 파일의 허용 크기를 체크할 때 여유 크기를 지정합니다. 초단위 입니다. 이 값 만큼 녹화 가능하면 녹화 용량이 다 찼다고 판단하여 녹화를 새파일명으로 재시작합니다.
report-media-info-ex
0
 
"1"이면 MediaObserver::onInfoEx를 호출합니다. "0" 이면, MediaObserver::onInfo를 호출합니다.
avi-strd-size-max
1920
 
AVI 녹화시 메타데이터 헤더 최대 크기입니다. 바이트 단위입니다.
mp4-udta-size-max
1920
 
MP4 녹화시 메타데이터 헤더 최대 크기입니다. 바이트 단위입니다.
enable-persistent-cache
0
 
이벤트 녹화의 경우, event-folder-path 키 값의 폴더 경로, 또는 모션 녹화의 경우, motion-folder-path 키 값의 폴더 경로를 임시 미디어 데이터 캐쉬로 사용할지를 지정합니다. 디스크 수명이 짧아질 수 있습니다. Oasis 초기화시 지정된 media-cache-size 키 값으로 미디어 데이터를 메모리에 임시 저장하기 어려운 제약이 있는 시스템의 경우에 유용합니다. "1" 인 경우, 이벤트 녹화와 모션 녹화 파일이 위치할 폴더는 event-folder-pathmotion-folder-path와 동일해야 합니다. 폴더 위치가 다를 경우, 이벤트나 모션 발생 전 데이터는 저장되지 않습니다.
recording-file-header-write-interval-secs
1
 
녹화 파일 컨테이너 헤더의 갱신 주기를 지정합니다. "0"이면 마지막에 헤더를 저장합니다.
enable-sound
1
 
"1" 값이면 소리도 영상과 함께 녹화합니다.
snd-path
오디오 장치 경로입니다. 소리 녹화를 할 경우 필수로 지정합니다.
snd-input-channels
1
 
오디오 채널 수 입니다.
snd-input-sample-size
16
 
오디오 샘플 크기입니다. 비트수 단위입니다.
snd-input-sampling-duration-msec
40
 
오디오 샘플 버퍼 크기입니다. 밀리초단위입니다.
snd-input-sampling-rate
8000
 
오디오 샘플링 레이트 입니다.
aencoder-type
raw
 
오디오 인코더 타입입니다. raw, aac, mp3 중 하나를 지정합니다. raw는 PCM 데이터를 인코딩하지 않고 저장합니다.
aencoder-bitrate
오디오 인코더 비트레이트입니다.
osd-font-size
21
 
글꼴 크기입니다. 포인트 단위입니다. "0" 값이면 OSD를 적용하지 않습니다.
osd-font-face
Serif
 
OSD 텍스트 폰트 패밀리 이름입니다
osd-font-path
 
OSD 텍스트 폰트 파일 경로입니다. 지정하지 않으면 초기화 시 지정한 디폴트 폰트 파일을 사용합니다.
osd-text-color
255,255,255
 
OSD 텍스트 색상입니다. 색상 양식은 "r,g,b" 이거나 "rrggbb" 또는 "aarrggbb" 16진수 값입니다. 예를 들어 흰색이면 "255,255,255" 또는 "ffffff" 와 같습니다.
osd-use-text-color
1
 
"1" 값이면 OSD 텍스트 색상을 사용합니다. "0" 값이면 글자가 표시되지 않습니다.
osd-use-bg-color
0
 
"1" 값이면 OSD 텍스트 배경색을 사용합니다.
osd-bg-color
0,0,0
 
OSD 텍스트 배경색입니다.
osd-use-outline-color
0
 
"1" 값이면 글자 테두리 색상을 사용합니다.
osd-outline-color
255,255,255
 
글자 테두리 색상입니다.
osd-horz-align
center
 
OSD 텍스트 가로 정렬을 지정합니다. left, center, right 중 하나를 지정합니다.
osd-vert-align
bottom
 
OSD 텍스트 세로 정렬을 지정합니다. top, center, bottom 중 하나를 지정합니다.
channel-count
영상 채널 개수입니다. "0"이면 오디오 채널만 녹화됩니다.

각 영상 트랙(채널)별 할당하는 key-value map은 아래와 같습니다. key 이름 앞에 channel<N>- 이 붙습니다. <N>은 1부터 시작하여 1씩 증가합니다.

기본값
필수
설명
channel<N>-camera-id
 
configCameras에서 지정한 카메라 장치 ID 입니다.
channel<N>-ise-id
 
ISD 장치 ID 입니다. AllWinner 칩셋인 경우 적용됩니다.
channel<N>-resolution
720p
 
영상 인코딩 해상도 입니다. 2160p, 1440p, 1080p, 720p, 480p, 360p 중 한 값을 지정합니다.
channel<N>-out-width
1280
 
인코딩 영상의 너비입니다. 최소 너비는 256입니다. out-height와 함께 지정되어야 합니다.
channel<N>-out-height
720
 
인코딩 영상의 너비입니다. 최소 높이는 128입니다. out-width와 함께 지정되어야 합니다.
channel<N>-bitrate
3145728
 
인코딩 영상 비트레이트입니다.
channel<N>-fps
30
 
영상 입력 FPS입니다.
channel<N>-file-framerate
 
녹화 파일 재생시 frame rate입니다.
channel<N>-vencoder-type
 
인코딩 타입니다. h264, h265 중 한 값을 지정합니다.
channel<N>-venc-framerate
30
 
인코딩 frame rate입니다.
channel<N>-venc-keyframe-interval
30
 
인코딩 시 키 프레임 간격입니다.
channel<N>-media-wait-timeout-secs
0
 
영상 입력 최대 대기 시간입니다. 영상 입력 없이 시간 경과하면 설정에 따라 kRecordingErrorMediaDataTimeout 이벤트를 발생시킵니다. "0" 값이면 이벤트를 발생시키지 않습니다.
channel<N>-media-wait-timeout-notify-oneshot
1
 
"1" 값이면, 영상 데이터 시간 초과 오류 이벤트를 한번만 발생시킵니다. "0"이면 매번 발생시킵니다.

아래는 bitrate가 지정되지 않고 resolution만 지정되었을 경우, 해상도별 적용되는 비트레이트(bps) 표입니다.

해상도 너비 높이 비트레이트
2160p 3840 2160 16000000
1440p 2560 1440 16000000
1080p 1920 1080 8000000
720p 1280 720 4000000
480p 640 480 2000000
360p 640 360 1000000

아래는 bitrate가 지정되지 않고, out-widthout-height만 지정되었을 경우, 비트레이트(bps) 표입니다.

최소 높이 비트레이트
1440 8000000
1080 6000000
720 4000000
480 2000000
480미만 1000000

Note

resolutionout-width, out-height이 같이 있는 경우, out-width, out-height가 적용됩니다.

각 영상 채널 별로 OSD를 설정할 수 있습니다.

영상 인코딩 포맷이 H264일 경우, 아래 key-value map이 적용됩니다.

기본값
필수
설명
channel<N>-h264-profile
high
 
프로파일 입니다. baseline, main, high 중 한 값을 지정합니다.
channel<N>-h264-level
level51
 
레벨입니다. level1, level11, level12, level13, level2, level21, level22, level3, level31, level32, level4, level41, level42, level5, level51, level52 중 한 값을 지정합니다.
channel<N>-h264-min-qp
1
 
최소 QP(양자화 파라미터) 값입니다. 낮은 값일 수록 고화질 영상을 갖습니다. 0~51 범위 값입니다.
channel<N>-h264-max-qp
51
 
최대 QP(양자화 파라미터) 값입니다.
channel<N>-h264-enable-fixqp
0
 
고정 QP 값을 적용할지 여부를 지정합니다. 칩셋에 따라 지원됩니다. "1"이면 고정 QP 값이 적용됩니다.
channel<N>-h264-fix-iqp
30
 
고정 키프레임 QP 입니다. 0~51 값을 갖습니다.
channel<N>-h264-fix-pqp
30
 
고정 P 프레임 QP 입니다. 0~51 값을 갖습니다.

영상 인코딩 포맷이 H265일 경우, 아래 key-value map이 적용됩니다.

기본값
필수
설명
channel<N>-h265-profile
main
 
프로파일입니다. main, main10, still 중 한 값을 지정합니다.
channel<N>-h265-level
level51
 
레벨입니다. level1, level2, level21, level3, level31, level41, level5, level51, level52, level6, level61, level62 중 한 값을 지정합니다.
channel<N>-h265-rc-mode
vbr
 
비트레이트 제어 모드입니다. 칩셋에 따라 지원됩니다. vbr, cbr, abr, fixqp 중 한 값을 지정합니다.
channel<N>-h265-min-qp
1
 
최소 QP(양자화 파라미터) 값입니다. 낮은 값일 수록 고화질 영상을 갖습니다. 0~51 범위 값입니다. cbr, vbr, abr에 적용됩니다.
channel<N>-h265-max-qp
51
 
최대 QP(양자화 파라미터) 값입니다. cbr, vbr, abr에 적용됩니다.
channel<N>-h265-max-bitrate
1000000
 
최대 비트레이트입니다. vbr, abr에 적용됩니다.
channel<N>-h265-min-iqp
30
 
최소 키 프레임 QP값입니다. abr에 적용됩니다.
channel<N>-h265-max-iqp
51
 
최대 키 프레임 QP값입니다. abr에 적용됩니다.
channel<N>-h265-quality
7
 
품질 값입니다. 1~31 범위에 있습니다. 높을 수록 고품질입니다. vbr, abr에 적용됩니다.
channel<N>-h265-ratio-change-op
7
 
Ratio Change Op 값입니다 50~100 범위에 있습니다.. vbr, abr에 적용됩니다.
channel<N>-h265-fix-iqp
30
 
고정 I 프레임 QP 값입니다. fixqp 모드에 적용됩니다.
channel<N>-h265-fix-pqp
30
 
고정 P 프레임 QP 값입니다. fixqp 모드에 적용됩니다.
channel<N>-h265-gop-mode
normal
 
GOP(Group of Pictures) 모드를 지정합니다. 칩셋에 따라 지원됩니다. dual, smart, normal 값 중 하나입니다.
channel<N>-h265-gop-smart-virtual-interval
30
 
smart 모드 시 적용된 키 프레임 간격입니다.
channel<N>-h265-fast-encoding
0
 
빠른 인코딩을 활성화 합니다. 칩셋에 따라 지원됩니다. "1"이면 활성화됩니다.
channel<N>-h265-enable-pframe-intra
 
P 프레임 내에서 Intra 코딩을 허용할 지 여부를 지정합니다. "1"이면 활성화됩니다. 칩셋에 따라 지원됩니다.

녹화 시나리오 예

아래는 대쉬캠에 적용 가능한 시나리오입니다.

  1. Oasis 파일 시스템(OFFS)로 아래와 같은 폴더 구조로 mkfs.offs를 이용하여 포맷을 합니다. 포맷시 각 폴더의 모드는 "0" 입니다.

    • DRIVING
    • PARKING
    • DRIVE_EVENT
    • PARK_EVENT
  2. OFFS를 /mnt/sd에 마운팅합니다.

  3. 통합 또는 개별 녹화 객체를 생성할 때 normal-folder-path/mnt/sd/DRIVING 폴더 경로로 지정합니다. createRecorder 또는 createMultiChannelRecorder API를 호출합니다.

  4. 통합 또는 개별 녹화를 시작합니다. startRecording 또는 startMultiChannelRecording API 호출합니다.

  5. 이벤트 발생할 경우, /mnt/sd/DRIVE_EVENT 폴더 내에 절대 파일 경로를 생성하여 이벤트 녹화를 호출합니다. startEventRecording 또는 startMultiChannelEventRecording API 호출합니다.

  6. 주차 모드로 전환을 위해 녹화를 중지합니다. stopRecording 또는 stopMultiChannelRecording API를 호출합니다.

  7. normal-folder-path/mnt/sd/PARKING 폴더로 변경합니다.

  8. 녹화 패러미터 중 file-duration-secs 와 각 영상 채널별 channel<N>-file-frameratechannel<N>-venc-framerate타임랩스 설정 값으로 변경합니다.

  9. 변경된 패러미터를 적용합니다. changeRecorderParameters 또는 changeMultiChannelRecorderParameters API를 호출합니다.

  10. 녹화를 재시작합니다. startRecording 또는 startMultiChannelRecording API 호출합니다.

  11. 타임랩스 녹화 중 이벤트가 발생하면, /mnt/sd/PARK_EVENT 폴더 내에 절대 파일 경로를 생성하여 이벤트 녹화를 호출합니다. startEventRecording 또는 startMultiChannelEventRecording API 호출합니다.