안녕하세요. 어제도 잠깐 질문을 했었는데.. 죄송하지만 다시한번 질문을 올립니다.
현재까지의 작업을 말씀드리면, 스마트폰과 스마트폰 사이에 원격 동영상촬영을 작업중입니다.
클라이언트 쪽에서 버튼을 이용하지않고 롱터치이벤트로 동영상촬영을 제어하게끔 만들었습니다. 클라이언트에서는 일단 잘 돌아갑니다.
소켓 UDP통신을 이용해 클라이언트에서 롱터치를 했을경우 서버 (상대방 스마트폰)에 동영상촬영의 명령을 하고싶은데... 여기서부터 어떻게 해야하는지 모르겠습니다.. 일단 클라이언트쪽 소스를 올려보겠습니다. (참고로 버튼을 이용해 인텐트를 했습니다. )
protected void onCreate(Bundle savedInstanceState) {
Log.i(this.getPackageName(), "onCreate()");
super.onCreate(savedInstanceState);
try
{
StrictMode.setThreadPolicy(new StrictMode.ThreadPolicy.Builder().permitAll().build());
requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.activity_main);
getWindow().addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN);
// 컨트롤 변수를 설정
//----------------------------
myVideoView_rec = (VideoView) findViewById(R.id.VideoView_rec);
myVideoView_play = (VideoView) findViewById(R.id.VideoView_play);
// GestureDetector설정
// 이 클래스를 리스너로 설정
//---------------------------------
gestureDetector = new GestureDetector(this, this);
// 터치 리스너 등록
//-------------------------
myVideoView_rec.setOnTouchListener(this);
myVideoView_play.setOnTouchListener(this);
// 녹화관계
//----------
SurfaceHolder holder = myVideoView_rec.getHolder();
holder.addCallback(this);
}
catch (Exception e)
{
Log.e(this.getPackageName(), "onCreate : "+e.toString());
}
}
@Override
protected void onResume()
{
Log.i(this.getPackageName(), "onResume()");
super.onResume();
try
{
socket_open_request = true; // 소켓오픈 요구
send_request = true; // 송신요구
//------------------------
// 정기적인 처리 실행
//------------------------
final CameraProcess pro = new CameraProcess(this);
runnable = new Runnable()
{
public void run()
{
// 종료판정
//-----------
if (runnable==null) return;
// 송신요구처리
//--------------
if ((send_request==true) && (udp_socket_list.size()!=0))
{
send_request = false;
}
// 처리
//-------
pro.doSomething();
// 2회처리
//-------
handler.postDelayed(this, REPEAT_INTERVAL2);
}
};
handler.postDelayed(runnable, REPEAT_INTERVAL);
}
catch (Exception e)
{
Log.e(this.getPackageName(), "onResume : "+e.toString());
}
}
//---------------------
// MediaRecorder 설정
//---------------------
public boolean initializeVideoSettings()
{
try
{
if (v_holder==null) return false;
myRecorder.setVideoSource(MediaRecorder.VideoSource.CAMERA);
myRecorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4);
myRecorder.setVideoEncoder(MediaRecorder.VideoEncoder.MPEG_4_SP);
myRecorder.setOutputFile(REC_FILE);
myRecorder.setVideoFrameRate(30);
myRecorder.setVideoSize(1280, 720);
myRecorder.setPreviewDisplay(v_holder.getSurface());
myRecorder.prepare();
}
catch (Exception e)
{
Log.e("VideoRecorderAndPlay", e.getMessage());
return false;
}
return true;
}
@Override
public void surfaceCreated(SurfaceHolder holder) {
}
@Override
public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {
v_holder = holder;
}
public void surfaceDestroyed(SurfaceHolder holder) {
stop();
}
public void stop() {
}
@Override
public boolean onTouch(View view, MotionEvent motionevent)
{
// Log.i(this.getPackageName(), "onTouch");
try
{
if (gestureDetector.onTouchEvent(motionevent))
{
return true;
}
}
catch (Exception e)
{
Log.e(this.getPackageName(), "onTouch : "+e.toString());
return false;
}
return true;
}
@Override
public void onShowPress(MotionEvent motionevent)
{
Log.v("INFO", "onShowPress");
}
@Override
public void onLongPress(MotionEvent motionevent)
{
Log.v("INFO", "onLongPress");
int j ;
if (myRecorder==null)
{
myVideoView_rec.setVisibility(View.VISIBLE);
myVideoView_play.setVisibility(View.INVISIBLE);
myRecorder = new MediaRecorder();
isRecording = false;
isPlay = false;
}
if (isRecording!=true)
{
// 녹화중이 아니라면 녹화개시
//----------------------------
if (initializeVideoSettings()==true) // MediaRecorder의 설정
{
myRecorder.start();
isRecording = true; //플러그
}
}
else
{
// 녹화중이라면 녹화 중지
//--------------------------
myRecorder.stop();
myRecorder.reset();
myRecorder.release();
isRecording = false;
myRecorder = null;
}
}
@Override
public boolean onSingleTapUp(MotionEvent motionevent)
{
Log.v("INFO", "onSingleTapUp");
if (myRecorder!=null)
{
if (isRecording==true)
{
// 녹화중이라면 녹화중지
//--------------------------
myRecorder.stop();
myRecorder.reset();
myRecorder.release();
isRecording = false;
myRecorder = null;
}
}
myVideoView_rec.setVisibility(View.INVISIBLE);
myVideoView_play.setVisibility(View.VISIBLE);
myVideoView_play.setVideoPath(PLAY_FILE);
myVideoView_play.start();
return false;
}