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

TextrueView MediaPlayer 재생 오류

0 추천

안녕하십니까

 

sd카드에 있는 14메가가 되는 동영사응ㄹ 재생하려고 하는데 아래와 같은 오류가 뜹니다. server이야기 하는데 인터넷쪽 연결은 하지 않구요 ㅜㅜ

private void initView(){

mTextureView =(TextureView)findViewById(R.id.playback_video);

mTextureView.setSurfaceTextureListener(this);

}

 

@Override

public void onSurfaceTextureAvailable(SurfaceTexture surfaceTexture, int width,

int height) {

Surface surface = new Surface(surfaceTexture);

 

mMediaPlayer= new MediaPlayer();

mMediaPlayer.reset();

    mMediaPlayer.setDataSource(sd+"/afile_6226.mp4");

    mMediaPlayer.setOnErrorListener(this);

    mMediaPlayer.setSurface(surface);

    surface.release();

    mMediaPlayer.prepareAsync();

   

    mMediaPlayer.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {

@Override

public void onPrepared(MediaPlayer mp) {

mp.start();

}

});

 

 

 

 

@Override

public void onSurfaceTextureSizeChanged(SurfaceTexture surface, int width,

int height) {

 

}

@Override

public boolean onSurfaceTextureDestroyed(SurfaceTexture surface) {

surface.release();

return true;

}

@Override

public void onSurfaceTextureUpdated(SurfaceTexture surface) {

// TODO Auto-generated method stub

 

}

 

 

@Override

public boolean onError(MediaPlayer mp, int what, int extra) {

Toast.makeText(getApplication(), what+"에러", Toast.LENGTH_SHORT).show();

return false;

}

 

@Override

protected void onDestroy() {

// TODO Auto-generated method stub

super.onDestroy();

 

if (mMediaPlayer != null) {

            mMediaPlayer.stop();

            mMediaPlayer.release();

            mMediaPlayer = null;

        }

}

에러 문구

09-23 11:44:07.003: W/AudioSystem(2166): AudioFlinger server died!
09-23 11:44:07.003: W/IMediaDeathNotifier(2166): media server died
09-23 11:44:07.003: E/MediaPlayer(2166): error (100, 0)
09-23 11:44:07.003: E/MediaPlayer(2166): Error (100,0)
 
흠바바 1 (4,000 포인트) 님이 2014년 9월 23일 질문

1개의 답변

0 추천
http://www.androidpub.com/2436259

같은 문제의 답변일겁니다

doridori2013@nate.com

 

익명사용자 님이 2014년 9월 23일 답변
로그 상
09-24 10:37:31.610: A/CedarXNativeRenderer(3827): frameworks/base/media/CedarX-Projects/CedarXAndroid/IceCreamSandwich/CedarXNativeRenderer.cpp:75 CHECK_EQ( 0,native_window_set_buffers_geometryex( mNativeWindow.get(), bufWidth, bufHeight, halFormat, screenID)) failed: 0 vs. 100
부분이 문제입니다.
CedarXNativeRenderer.cpp 파일의 75라인에서 반횐되는 값이 0이길 기대했으나 100이 반환되어 처리를 못하다보니 강제적으로 미디어 서버를 강종 시킨 듯 합니다.
native_window_set_buffers_geometryex 가 성공시 0이 반환될 듯 한데.
무슨이유에서인지 실패하는 듯 합니다.

CedarXNativeRenderer.cpp  파일은 구글에서 공개한 소스가 아니라.
단말 제조사에서 추가한 렌더러 부분으로 보이네요...
아무래도 해당 단말에서 TextrueView 기능을 100% 지원하지 못하는 경우가 있는 듯 합니다.

그냥 단말 특성이라 생각하셔야 할 듯 하네요....
사악미소님 감사합니다.. 그럼 어떻게 해서든 불가능 하단 말씀이시죠?
제가 이렇게 한이유 TextrueView 를 회전기능을 할수없어서
미니pc나 이런건 회전기능이없어서 동영상이 회전이 안되어서 이걸이용해서 회전하였는데요
videoview나 서페이스뷰를 이용한 방법으로 화면을 회전 강제 회전하는방법은 없을까요
글세요
 videoview나 surfaceview는 holder를 texure로 주지 않는 이상  영상처리가 안되는데. texure 에서 오류가 생겼으니..   마땅한 방법이 안 떠오르네요..
그렇다고 native를 수정하는 것도 어려울 듯 하고요...

될지 모르지만 GLSurfaceView를 사용 해보시는 것도 방안일 듯 하며,
화면 회전 이벤트를 강제로 줘서 회전을 시켜보시는것도 좋을 듯 합니다.
http://stackoverflow.com/questions/10257594/how-control-screen-orientation-of-android-device
저기 나오는 회전이... 해당기기가 회전기능을 지원하지않으니까 아무리해도 아무반응이 없더라구요.. 휴대폰에서만 대는거 같아요 회전기능이 되는 기기요
GLSurfaceView를 이용해서 해봤습니다. 재생은 잘되는데.
회전 문제때문에 회전이 glsurfaceview를
msurfaceview.setrotate(90);을 주니 비디오뷰 회전주는거와 같이 화면이 안나옵니다.
mSurfaceView = new GLSurfaceView(this);
        linearLayout.addView(mSurfaceView, 600, 400);
        setContentView(linearLayout);

        mSurfaceView.setRenderer(new Renderer() {

            @Override
            public void onSurfaceCreated(GL10 gl, EGLConfig config) {
                Log.e("kim", "onSurfaceCreated");
            }

            @Override
            public void onSurfaceChanged(GL10 gl, int width, int height) {
                Log.e("kim", "onSurfaceChanged");
            }

            @Override
            public void onDrawFrame(GL10 gl) {
                Log.e("kim", "onDrawFrame");
            }
        });

        mSurfaceView.getHolder().addCallback(new Callback() {

            @Override
            public void surfaceDestroyed(SurfaceHolder holder) {
                mMediaPlayer.release();
            }

            @Override
            public void surfaceCreated(SurfaceHolder holder) {
                playback();
            }

            @Override
            public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {
            }
        });
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.activity_main, menu);
        return true;
    }

    private void playback() {
        mMediaPlayer = new MediaPlayer();
        try {
            mMediaPlayer.setDataSource(Environment.getExternalStorageDirectory().getPath() + "/afile_6227.mp4");
            mMediaPlayer.setDisplay(mSurfaceView.getHolder());
            mMediaPlayer.prepare();
            mMediaPlayer.start();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
...