녹화 API#
Oasis의 녹화 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을 전달합니다.
MediaObserver::queryNewFilePath에서 덮어쓸 수 있습니다.MediaObserver::queryNewFilePath에서 확인 후 덮어쓸 수 있습니다.oasis::fs::offsConfigLocalFormatInfo 호출로 기본 파일 크기를 변경할 수 있습니다.enable-persistent-cache 키 값이 "1"인 경우에만 적용됩니다. 실제 이벤트 녹화는 startEventRecording 등 이벤트 녹화 API에서 경로를 지정합니다.enable-persistent-cache 키 값이 "1"인 경우에만 적용됩니다. 실제 모션 녹화는 startMotionRecording 등 모션 녹화 API에서 경로를 지정합니다.max-files가 1 이상인 경우 유효합니다.event-folder-path 키 값의 폴더 경로, 또는 모션 녹화의 경우, motion-folder-path 키 값의 폴더 경로를 임시 미디어 데이터 캐쉬로 사용할지를 지정합니다. 디스크 수명이 짧아질 수 있습니다. Oasis 초기화시 지정된 media-cache-size 키 값으로 미디어 데이터를 메모리에 임시 저장하기 어려운 제약이 있는 시스템의 경우에 유용합니다. "1" 인 경우, 이벤트 녹화와 모션 녹화 파일이 위치할 폴더는 event-folder-path나 motion-folder-path와 동일해야 합니다. 폴더 위치가 다를 경우, 이벤트나 모션 발생 전 데이터는 저장되지 않습니다.raw, aac, mp3 중 하나를 지정합니다. raw는 PCM 데이터를 인코딩하지 않고 저장합니다.left, center, right 중 하나를 지정합니다.top, center, bottom 중 하나를 지정합니다.각 영상 트랙(채널)별 할당하는 key-value map은 아래와 같습니다. key 이름 앞에 channel<N>- 이 붙습니다. <N>은 1부터 시작하여 1씩 증가합니다.
2160p, 1440p, 1080p, 720p, 480p, 360p 중 한 값을 지정합니다.out-height와 함께 지정되어야 합니다.out-width와 함께 지정되어야 합니다.h264, h265 중 한 값을 지정합니다.kRecordingErrorMediaDataTimeout 이벤트를 발생시킵니다. "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-width와 out-height만 지정되었을 경우, 비트레이트(bps) 표입니다.
| 최소 높이 | 비트레이트 |
|---|---|
| 1440 | 8000000 |
| 1080 | 6000000 |
| 720 | 4000000 |
| 480 | 2000000 |
| 480미만 | 1000000 |
Note
resolution과 out-width, out-height이 같이 있는 경우, out-width, out-height가 적용됩니다.
각 영상 채널 별로 OSD를 설정할 수 있습니다.
영상 인코딩 포맷이 H264일 경우, 아래 key-value map이 적용됩니다.
baseline, main, high 중 한 값을 지정합니다.level1, level11, level12, level13, level2, level21, level22, level3, level31, level32, level4, level41, level42, level5, level51, level52 중 한 값을 지정합니다.영상 인코딩 포맷이 H265일 경우, 아래 key-value map이 적용됩니다.
main, main10, still 중 한 값을 지정합니다.level1, level2, level21, level3, level31, level41, level5, level51, level52, level6, level61, level62 중 한 값을 지정합니다.vbr, cbr, abr, fixqp 중 한 값을 지정합니다.cbr, vbr, abr에 적용됩니다.cbr, vbr, abr에 적용됩니다.vbr, abr에 적용됩니다.abr에 적용됩니다.abr에 적용됩니다.vbr, abr에 적용됩니다.vbr, abr에 적용됩니다.fixqp 모드에 적용됩니다.fixqp 모드에 적용됩니다.dual, smart, normal 값 중 하나입니다.smart 모드 시 적용된 키 프레임 간격입니다.녹화 시나리오 예#
아래는 대쉬캠에 적용 가능한 시나리오입니다.
-
Oasis 파일 시스템(OFFS)로 아래와 같은 폴더 구조로 mkfs.offs를 이용하여 포맷을 합니다. 포맷시 각 폴더의 모드는 "0" 입니다.
- DRIVING
- PARKING
- DRIVE_EVENT
- PARK_EVENT
-
OFFS를
/mnt/sd에 마운팅합니다. -
통합 또는 개별 녹화 객체를 생성할 때
normal-folder-path를/mnt/sd/DRIVING폴더 경로로 지정합니다.createRecorder또는createMultiChannelRecorderAPI를 호출합니다. -
통합 또는 개별 녹화를 시작합니다.
startRecording또는startMultiChannelRecordingAPI 호출합니다. -
이벤트 발생할 경우,
/mnt/sd/DRIVE_EVENT폴더 내에 절대 파일 경로를 생성하여 이벤트 녹화를 호출합니다.startEventRecording또는startMultiChannelEventRecordingAPI 호출합니다. -
주차 모드로 전환을 위해 녹화를 중지합니다.
stopRecording또는stopMultiChannelRecordingAPI를 호출합니다. -
normal-folder-path를/mnt/sd/PARKING폴더로 변경합니다. -
녹화 패러미터 중
file-duration-secs와 각 영상 채널별channel<N>-file-framerate와channel<N>-venc-framerate를 타임랩스 설정 값으로 변경합니다. -
변경된 패러미터를 적용합니다.
changeRecorderParameters또는changeMultiChannelRecorderParametersAPI를 호출합니다. -
녹화를 재시작합니다.
startRecording또는startMultiChannelRecordingAPI 호출합니다. -
타임랩스 녹화 중 이벤트가 발생하면,
/mnt/sd/PARK_EVENT폴더 내에 절대 파일 경로를 생성하여 이벤트 녹화를 호출합니다.startEventRecording또는startMultiChannelEventRecordingAPI 호출합니다.