본문 바로가기

안드로이드

(21)
Extractor > Decoder > Surface 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 에서 비디오, 오디오 트랙의 위치를 받..
안드로이드 디코딩 mediaCodec decoding은. 파일을 stream으로 열어준다음, frame으로 바꿔주는 과정이다. 이frame 은 surface에 보여줄 수 있다. mediaExtractor 로 mediaFormat을 뽑는다. mediaFormat으로 mediaCodec을 만든다. mediaCodec은 mediaDecoder 만들떄 쓴다. mediaCodec.configure( mediaFormat, surface ) mediaCodec.start() tip) media codec 이 buffer를 몇개 사용할지 정함. ByteBuffer[] inputBuffers = codec.getInputBuffers(); ByteBuffer[] outputBuffers = codec.getOutputBuffers(); tip) decod..
Thread, Task, MessageQueue , looper, Handler, dispatcher https://kimss1502.github.io/%EC%95%88%EB%93%9C%EB%A1%9C%EC%9D%B4%EB%93%9C/Looper,-MessageQueue,-Handler/
Media Player에 대한 설명 [1-1] MediaPlayer 1. 사용 MediaPlayer player = new MediaPlayer(); player.setDataSource(); player.prepare(); player.start(); 2. 앱단과 엔진단의 쌍방향 호출형태 app -( 특정명령 )> MediaPlayer로 호출 Engine - (NuPlayer)의 처리결과(에러, prepare완료, 재생완료, 알람 등) -> App으로 전달 3. new MediaPlayer의 코드 looper 생성 ( 큐잉된 메세지들 처리 ) -> EventHandler생성 ( Async로 작동하는 API 에서 Engine->app으로 보내는 메세지들 큐잉) -> Message [1-2] MediaPlayer API 설명 1.데이터 셋팅..
주말공부 리스트 1.미디어코덱3차에 관해서 2. 쓰레드에 관해서 BlockingQueue : 꽉찬 큐에 enqueue를 요청하거나 빈 큐에 dequeue요청 하면 wait을 통해서 Thread를 죽인다. enque ,deque 끝에서는 notifyAll 을 통해서 wait중인 쓰레드를 살린다. ConvertLayer ( VideoLayer vl) vl 을 inputVideoLayer 로 컨버팅 하고 vl내부에 있는 item 들을 하나씩 InputVideoItem 으로 변경해서 ( Item : 비디오, 오디오, 이미지, 데코레이션, 캡션, 두들 ) inputvideoLayer에 add Item 해준다. Manager 는 getMap 으로 를 가져옴 Element : Video Item Layer LayerGroup Man..
미디어코덱 - 비디오,오디오 디코딩 및 재생 package com.navercorp.deview.mediaplayer import android.graphics.SurfaceTexture import android.media.* import android.os.Bundle import android.os.Handler import android.os.HandlerThread import android.view.Surface import android.view.TextureView import androidx.appcompat.app.AppCompatActivity import kotlinx.android.synthetic.main.activity_main.* import java.util.concurrent.TimeUnit // http://dis..
JNI ExceptionCheck , ExceptionOccurred 1. 일반적인 JNI function call 은 NULL 과 같은 return 으로 예외상황을 알립니다. 2. return value를 통해 error 인지 알 수 없을 경우에는 exception check 를 해주어야 합니다. 현재 thread 에서 일어난 pending exception 의 체크는 ExceptionOccurred 를 통해 check 할 수 있습니다. ( JDK 1.2 에서는 ExceptionCheck 를 사용할 수 있습니다. ) 3.Native code 는 pending exception 을 다음과 같이 2가지 방법으로 처리합니다. - exception 발생시 바로 return 을 해서 caller 가 exception을 handle 할 수 있도록 합니다. - ExceptionCle..
[JNI] C++코드로 JAVA 의 Priavate를 접근할 수 있는가? [JNI] C++코드로 JAVA 의 Priavate를 접근할 수 있는가? 대답은 YES이다. C++의 JNI 는 JAVA IllegalAccessException 이 날수 있는 상황에서도 접근에 성공한다. JAVA차원에서 접근 제어자를 걸어두어도, C++는 상관하지 않고 JAVA의 메모리에 있는 모든 변수 , 함수 들을 가져올 수 있다. 아래는 관련된 공식 문서의 일부를 발췌한 것이다. The JNI Programmer's Guide and Specification says this in "10.9 Violating Access Control Rules": "The JNI does not enforce class, field, and method access control restrictions that..