MediaExtractor에서 h264코덱의 데이터를 어떻게 얻어오는지 궁금합니다.
=> java doc에 예제 코드 있잖아요.. 전제가 MP4나 MKV, MpegTS 같은 컨테이너로 이루어진 영상파일에서, H264로 인코딩이 된 데이터가 있을 경우에 해당하는 것으로,
예제 코드에 대해 주석을 달아들이면,
MediaExtractor extractor = new MediaExtractor();
extractor.setDataSource(...); // 데이터를 뽑아올 컨텐츠를 설정하는 부분입니다.
int numTracks = extractor.getTrackCount(); // 컨텐츠에 들어있는 트랙 갯수를 뽑는 부분입니다. 오디오까지 있는 파일이면 2개, 멀티 랭귀지면 2개 이상 나올 수도 있습니다.
for (int i = 0; i < numTracks; ++i) {
MediaFormat format = extractor.getTrackFormat(i); // i 에 해당하는 트랙의 포멧 정보를 가져오는 부분입니다.
String mime = format.getString(MediaFormat.KEY_MIME);
if (mime.equals(MediaFormat.MIMETYPE_VIDEO_AVC)) {
extractor.selectTrack(i); // H264 일 경우 extractor에서 데이터를 읽겠다고 선택하는 부분입니다.
}
}
ByteBuffer inputBuffer = ByteBuffer.allocate(...)
while (extractor.readSampleData(inputBuffer, ...) >= 0) { // H264 데이터를 읽는 부분입니다. inputBuffer 로 한 프레임의 데이터가 반환됩니다.
int trackIndex = extractor.getSampleTrackIndex();
long presentationTimeUs = extractor.getSampleTime(); // 영상을 표시할 시간입니다.
...
// 여기서 H264 데이터(inputBuffer)를 PC로 넘겨주고 PC에서 이 데이터를 디코딩하도록 하면 됩니다.
...
extractor.advance(); // 다음 프레임의 데이터를 읽기 위해 넘기는 부분입니다.
}
extractor.release(); // 종료 하는 부분입니다.
extractor = null;