📌 둘 다 "사진을 찍는 순간의 짧은 움직임"을 함께 담는 기능이에요. 겉보기엔 비슷하지만, 파일을 저장하는 방식이 근본적으로 달라서 앱이 영상을 꺼내는 방법도 플랫폼마다 다릅니다. 이 페이지는 그 공통점과 차이점을 정리해, MotionStitch가 양쪽을 어떻게 다루는지 이해하는 바탕이 됩니다.
| 항목 | 🤖 안드로이드 모션포토 | 🍎 아이폰 라이브포토 |
|---|---|---|
| 파일 구조 | JPEG 한 개 안에 MP4 내장 (단일 파일) | HEIC/JPEG + .MOV 두 개의 파일 쌍 |
| 묶는 방식 | XMP 메타데이터(MotionPhoto/MicroVideo)에 MP4 시작 오프셋 기록 |
사진·영상에 같은 asset identifier를 넣어 시스템이 한 쌍으로 인식 |
| 이미지 포맷 | JPEG | HEIC(고효율) 또는 JPEG |
| 영상 코덱 | 주로 H.264 (일부 HEVC) | 주로 HEVC(H.265), 구형은 H.264 |
| 영상 길이 | 약 1~3초 | 약 3초 (앞 1.5초 + 뒤 1.5초) |
| 대표(키) 프레임 | 촬영 순간의 프레임 고정 | 키 포토 — 사용자가 대표 프레임 변경 가능 |
| 오디오 | 보통 포함 (없는 경우도 있음) | 포함 |
| 영상 추출 방법 | JPEG 바이트에서 MP4 부분을 잘라냄 (파서) | PhotoKit API로 영상(.MOV)에 접근 (PHAsset) |
| 시스템 식별 | MediaStore의 이미지 + 모션포토 마커 | PHAsset mediaSubtype = photoLive |
같은 "움직이는 사진"이라도 디스크에 저장되는 형태가 이렇게 달라요:
→ 한 파일을 열어 안에서 MP4를 분리
→ 시스템이 묶어둔 영상 파일에 접근
두 형식은 서로 직접 호환되지 않아요. 기기 간에 전송하면 보통 움직임이 사라집니다.
추출 방식이 근본적으로 다르기 때문에, 미디어 처리는 플랫폼별 네이티브 코드로 나눠서 합니다.
→ 그래서 앱 화면의 안내 문구도 기기에 맞춰 "모션포토 / 라이브포토"로 자동 표기돼요.
둘 다 "정지사진 + 짧은 영상"이라는 본질은 같지만, 안드로이드는 JPEG 한 파일에 영상을 숨겨 담고, 아이폰은 사진과 영상을 두 파일로 따로 두고 묶어요. 그래서 영상을 꺼내는 방법이 플랫폼마다 다르고, 서로 전송하면 움직임이 사라집니다.