마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

AsyncTask에서 MediametadataRetriever를 쓸경우..

0 추천
안녕하세요, 백그라운드에서 섬네일을 돌릴필요가있어서

 

AsyncTask 클래스를만들고 MediametadataRetriever를 실행시키고

 

결과값을 원래의 미디어 플레이어로 넘겨주고 있습니다.

 

문제는 이렇게하면 getFrameAtTime(getCurrentPosition); 을 할때

 

원래 보고있던 동영상의 프레임을 못가져오기때문에

 

AsysncTask의 선언부에 Context 를 집어넣고

 

doInBackground에

 

비디오 클래스(videoclass)라 하겠습니다

 

videoclass video = new videoclass(context)

video.getcurrentposition()  (videoclass에 return mediaplayer.getcurrentposition(); 용 메소드를 만들었습니다)

 

를 하니 java.util.concurrent.futuretask에러가 생기더군요. 해결할 방법이 없을까요?
심슨사랑 (690 포인트) 님이 2015년 4월 16일 질문
그냥 실제 에러로그를 올려주세여
 java.util.concurrent.futuretask에러 <-- 이건 도움이 되지 않습니다
04-16 13:53:18.815: W/System.err(19080): java.util.concurrent.ExecutionException: java.lang.AssertionError: Shader compilation failed
04-16 13:53:18.815: W/System.err(19080):     at java.util.concurrent.FutureTask.report(FutureTask.java:93)
04-16 13:53:18.815: W/System.err(19080):     at java.util.concurrent.FutureTask.get(FutureTask.java:163)
04-16 13:53:18.825: W/System.err(19080):     at android.os.AsyncTask.get(AsyncTask.java:483)
04-16 13:53:18.825: W/System.err(19080):     at com.example.cardboardth.component.CerebroMovie.update(CerebroMovie.java:162)
04-16 13:53:18.825: W/dalvikvm(19080): threadid=15: thread exiting with uncaught exception (group=0x419a0da0)
04-16 13:53:18.825: W/System.err(19080):     at com.example.cardboardth.SceneManager.update(SceneManager.java:119)
04-16 13:53:18.825: W/System.err(19080):     at com.example.cardboardth.GunActivity.onNewFrame(GunActivity.java:90)
04-16 13:53:18.825: W/System.err(19080):     at com.google.vrtoolkit.cardboard.CardboardView$StereoRendererHelper.onDrawFrame(CardboardView.java:1275)
04-16 13:53:18.825: W/System.err(19080):     at com.google.vrtoolkit.cardboard.CardboardView$RendererHelper.onDrawFrame(CardboardView.java:1076)
04-16 13:53:18.825: W/System.err(19080):     at android.opengl.GLSurfaceView$GLThread.guardedRun(GLSurfaceView.java:1532)
04-16 13:53:18.835: W/System.err(19080):     at android.opengl.GLSurfaceView$GLThread.run(GLSurfaceView.java:1249)
04-16 13:53:18.835: W/System.err(19080): Caused by: java.lang.AssertionError: Shader compilation failed
04-16 13:53:18.835: W/System.err(19080):     at com.example.cardboardth.util.ShaderUtil.loadGLShader(ShaderUtil.java:29)
04-16 13:53:18.835: W/System.err(19080):     at com.example.cardboardth.util.ShaderUtil.buildGLProgram(ShaderUtil.java:11)
04-16 13:53:18.835: W/System.err(19080):     at com.example.cardboardth.resourcemanager.ScreenShader.<init>(ScreenShader.java:49)
04-16 13:53:18.835: W/System.err(19080):     at com.example.cardboardth.component.CerebroMovie.<init>(CerebroMovie.java:102)
04-16 13:53:18.835: W/System.err(19080):     at com.example.cardboardth.component.SendBitmap.doInBackground(SendBitmap.java:48)
04-16 13:53:18.835: W/System.err(19080):     at com.example.cardboardth.component.SendBitmap.doInBackground(SendBitmap.java:1)
04-16 13:53:18.845: W/System.err(19080):     at android.os.AsyncTask$2.call(AsyncTask.java:288)
04-16 13:53:18.845: W/System.err(19080):     at java.util.concurrent.FutureTask.run(FutureTask.java:237)
04-16 13:53:18.845: W/System.err(19080):     at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231)
04-16 13:53:18.845: W/System.err(19080):     at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
04-16 13:53:18.845: W/System.err(19080):     at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
04-16 13:53:18.845: W/System.err(19080):     at java.lang.Thread.run(Thread.java:841)
04-16 13:53:18.895: W/dalvikvm(19080): threadid=11: thread exiting with uncaught exception (group=0x419a0da0)


에러내역은 위와같습니다

1개의 답변

0 추천
안드로이드 개발 4년차인데 에러 로그도 생소하네요

짐작되기로는 별도의 스레드에서 CelebroMovie 라는 클래스를 생성하면 안될 것 같습니다.

(코드를 직접 보지 않았기 때문에 맞는지는 모르겠으나 생성자에서 바로 UI 작업을 하기 때문인듯?)

 

생성한 AsyncTask의 전역변수로 비디오 클래스를 만들고

onPreExecute()를 오버라이드해서 그 안에서 비디오 클래스를 초기화하고

doInBackground에서는 getCurrentPosition()만 호출하도록 수정해서 해보세여
Gradler (109,780 포인트) 님이 2015년 4월 16일 답변
답변 감사합니다 시도하겠습니다
...