스택오버플로에도 올려놨는데 안펍에도 질문을 해봅니다

http://stackoverflow.com/questions/14618088/change-address-in-android-mjpeg-class


다음의 mjpeg 클래스를 사용해서 안드로이드 기기에서 mjpeg 영상을 출력하고 있습니다

http://stackoverflow.com/questions/10550139/android-ics-and-mjpeg-using-asynctask



현재는 

목록화면에서 선택 - mjpeg 뷰어가 포함된 액티비티 실행 - 액티비티 종료, 목록화면

같은 식으로 무조건 종료를 시킨 뒤에 다시 뷰어를 실행시키는 방식으로 동영상 주소를 변경하고 있습니다.


액티비티 변경 없이 화면상에서 버튼을 누르기만 하면 변하는 방식으로 바꾸고 싶어서

버튼을 누르면 현재 구동중인 MjpegView를 새로 만들어서 레이아웃에 새롭게 추가하는 방식으로 처리하고 있습니다


  	 void setScreen() {	
	    	try {	    		
	    		String title = datas[now_num].getTitle();
	    		TextView tv = (TextView) findViewById(R.id.ipcamview_title);
	    		tv.setText(title);
	    		
	    		url = CamUrl.getMjpegUrl("datas[now_num].getIp(), datas[now_num].getPort(), 
				datas[now_num].getId(), datas[now_num].getPass()); 
		        mv = new MjpegView(getApplicationContext());        

		        LinearLayout l = (LinearLayout)findViewById(R.id.ipcamview_viewlayout);       
		        l.removeAllViews();
		        l.addView(mv);
		        dr = new DoRead().execute(url);
	    	} catch (Exception e) {
	    		Log.i(TAG, "error : " + e.getMessage());
	    	}
	    }



이 메소드를 필요할때 호출하는 방식으로 사용중입니다.

문제는 MjpegView 클래스에서 발생합니다. 쓰레드 오류가 발생합니다 


01-31 12:02:43.970: E/AndroidRuntime(22978): FATAL EXCEPTION: main
01-31 12:02:43.970: E/AndroidRuntime(22978): java.lang.IllegalThreadStateException: Thread already started.
01-31 12:02:43.970: E/AndroidRuntime(22978): at java.lang.Thread.start(Thread.java:1045)
01-31 12:02:43.970: E/AndroidRuntime(22978): at 
com.camera.simplemjpeg.MjpegView.startPlayback(MjpegView.java:198)


위와 같은 오류가 발생합니다.
로그캣으로 확인해보니 MjpegView 클래스의 쓰레드 시작 부분에서 문제가 발생합니다

     public void startPlayback() { 
        if(mIn != null) {
            mRun = true;
            if (!thread.isAlive())
        	thread.start();
        }
    }


오류가 걸리는 부분은 이 곳입니다. 돌아가고 있는 쓰레드와 돌리려고 하는 쓰레드 명이 똑같게 되는 경우가 생기는데, 그때 시작 명령을 주면 오류가 발생하는 것이죠.


개인적으로 위의 isAlive 옵션도 사용해보고, 쓰레드 생성시 쓰레드명을 저장한 다음에 새로 생성되는 쓰레드명과 비교해서 같은 경우에는 시작하지 못하도록 하거나 재생성하는 방식도 사용해봤습니다만 여전히 같은 오류가 발생합니다.



그리고 테스트하다가 발견한건데, MjpegView를 한 화면에 여러개 출력하면 이상하게 뜹니다. 이미지가 막 짬뽐이 되어서 출력됩니다. 


쓰레드 부분에 무슨 문제가 있지 않나 싶기도 하고 아니면 SurfaceView를 뭔가 조절해야 되지 않나 싶기도 하고 그렇습니다. 지금은 지식 부족으로 정확히 무슨 문제이고 뭐를 고쳐야 될지 잘 모르겠습니다.