assets.openFd(MEDIA_FILE).use {
MediaExtractor().apply { setDataSource(it) }
}
//0. 파일을 열어서 Extractor 에게 FileDescription을 셋팅해준다.
val extractor = assets.openFd(MEDIA_FILE).use {
MediaExtractor().apply { setDataSource(it) }
}
/* (tip)
* setDataSource(String path);
* setDataSource(MediaSource mediaSource, mime); // getTrack
* setDataSource(FileDescriptor fd);
*/
//1. Extractor 에서 비디오, 오디오 트랙의 위치를 받아온다.
audioTrackIndex = extractor.findFirstTrackFor("video/")
videoTrackIndex = extractor.findFirstTrackFor("audio/")
fun MediaExtractor.findFirstTrackFor(type: String): Int? {
for (i in 0 until trackCount) {
val mediaFormat = getTrackFormat(i)
if (mediaFormat.getString(MediaFormat.KEY_MIME)!!.startsWith(type)) {
return i
}
}
return null
}
//2. 미디어 포맷을 받아온다.(비디오가 가지고 있는 Meta 정보로는 비디오의 bitrate, width, size 등등을)
MediaFormat format = extractor.getTrackFormat(videoTrackIndex);
//3. 미디어 포맷에서 미디어 코덱에 셋팅할 Key_mime을 받아온다. ( 비디오 압축방식 )
String mime = format.getString(MediaFormat.KEY_MIME);
//4. 이를 이용해서 미디어코덱(디코더)를 만든다.
decoder = MediaCodec.createDecoderByType(mime);
//5. 디코딩이후 output 결과를 넣어줄 Surface를 셋팅한다. // 자동으로 화면에 뿌려주게 된다.
outputsurface = Surface(surface);
decoder.configure(format, outputSurface, null, 0);
decoder.start();
'안드로이드' 카테고리의 다른 글
안드로이드 디코딩 mediaCodec (0) | 2023.07.15 |
---|---|
Thread, Task, MessageQueue , looper, Handler, dispatcher (0) | 2023.04.21 |
Media Player에 대한 설명 (0) | 2023.04.07 |
주말공부 리스트 (0) | 2023.02.24 |
미디어코덱 - 비디오,오디오 디코딩 및 재생 (0) | 2023.02.24 |