Do it! 안드로이드 앱프로그래밍 11일차 (19.05.16)

2019. 5. 10. 09:16Engineer/안드로이드 앱 프로그래밍

반응형


 Chapter 10. 멀티미디어 


   10-1 오디오 재생하기


미디어 API는 andoroid.media 패키지에 들어있다. 패키지에 포함된 여러 클래스중 'MediaPlayer'는 음악 파일, 오디오, 동영상 파일 등을 재생할 수 있다.(코덱에 따라 재생이 안될 수도 있음). 미디어 파일 재생을 위한 대상 지정은 URL을 이용한 인터넷에 있는 파일 위치 지정, 프로젝트 파일에 포함한 뒤 위치지정, 단말의 SD카드에 넣은 후 위치 지정을 할 수 있다. 


미디어 플레이어 객체가 이미 리소스를 사용하고 있을 경우 release( ) 메소드를 이용해 리소스를 해제

파일 대상을 설정하는 메소드는 setDataSource( )

재생을 준비하는 메소드는 prepare( )

파일 재생은 start( )

플레이 도중 정지하고자 할때는 현재 재생위치를 기억하기 위해 getCurrentPosition( ) 후, pause( ) 



   10-2 동영상 재생하기


동영상 재생은 MediaPlayer를 사용할 수 도 있지만 비디오뷰(VideoView)를 이용하면 훨씬 간단하게 만들 수 있다. 


setVideoURI( ) 를 이용해 재생할 동영상의 위치 지정

setMediaController( ) 를 이용해 설정

setStreamVolume( ) 을 이용해 소리 크기(볼륨) 설정


동영상을 좀더 세밀하게 제어하고 싶을 때는 MediaPlayer를 사용하는 것이 좋다. 하지만 더 많은 코드와 세심한 제어를 필요로 한다. 



   10-3 오디오 녹음하여 저장하기


오디오 녹음이나 동영상 녹화를 위해서는 'MediaRecorder' 클래스를 이용한다.


우선 앱에서 녹음을 하려면 RECORDER_AUDIO 권한이 있어야 하므로 매니페스트에 권한을 추가한다. 오디오 녹음을 위해 MediaRecorder 객체를 생성하고, 오디오 정보를 입력받을 데이터 소스와 함께 출력 형식을 serAudioSource( )와 setOutputFormat( )을 이용해 설정한다. setAudioEncorder( )와 setOutputFile( )을 이용해 오디오 파일을 만들때 필요한 인코더(Encorder)와 함꼐 파일 이름을 지정한 후, prepare( ) 와 start( )를 사용하여 녹음을 시작하면 오디오 파일이 만들어지고 인코딩된 바이트 스트림이 저장된다.  녹음을 중지 했을 때는 stop( ), release( )를 호출한다. 


녹음을 중지했을 때 결과물로 만들어진 파일을 미디어 앨범에 등록하기 위해서는 ContentValues 객체에 필요한 정보를 put( ) 메소드로 넣은후, insert( ) 메소드를 이용해 이 객체에 추가한다. 



   10-4 동영상 녹화하기


동영상 녹화에도 MediaRecorder 객체를 사용할 수 있다. 오디오 녹음과 다른점은 영상을 녹화하기 위한 입력 소스로 카메라 상수를 지정하여 사용자가 카메라 미리보기를 할 수 있도록 만들어 주어야 한다는 것이다. 


미리보기는 서피스뷰(SurfaceView)를 사용해서 구현한다. SurfaceView는 SurfaceHolder에 의해 제어되는데, 이때 SurfaceHolder 객체의 setType( ) 메소들르 이용해 SURFACE_TYPE_PUSH_BUFFERS로 지정해야 한다. 그외에 setVideoEncoder( )를 잉요한 인코더 정보 설정과 setVideoSource( )메소드를 이용한 비디오 입력 정보 설정을 해야한다.



   10-5 카메라로 사진 찍어 저장하기


카메라로 사진을 찍기 위해 사용된느 방법은 크게 두가지로 나뉜다. 

  1. 앱의 화면에 카메라 미리보기를 보여주고 직접 사진을 찍어 처리하기
  2. 인텐트를 이용해 단말의 카메라 앱을 실행한 후 결과 사진을 받아 처리하기 

두번째 방법은 인텐트 객체를 만들고 startActivity( )메소들르 호출하는 방법이기 때문에 아주 간단하다. 또한 단말의 카메라 앱을 사용하기 때문에 단말의 카매라 앱이 기본적으로 제공하는 기능을 그대로 사용할 수 있다. 하지만 증강 현실과 같은 기능을 필요로 한다면 첫번째 방법을 사용해야 한다. 


카메라 미리 보기를 위해서 서피스뷰를 생성하고 이를 제어하기 위한 서피스 홀더를 참조(setPreviewDisplay( ) )해야한다. 초기 작업이 끝나면 카메라 객체의 startPreview( ) 메소드를 호출, 이때부터 카메라로 입력된 영상을 서피스 뷰를 통해 화면에 보여준다. 


카메라 미리보기를 사용할 때는 일반적으로 뷰를 중첩시켜 사용한다. 서피스뷰 타입을 카메라의 영상을 뿌려주는 데만 사용되도록 설정한 경우(SURFACE_TYPE_PUSH_BUFFERS인 경우) 그위에 별도의 그래픽 그리기가 제한된다. 따라서 나침반, 버튼, 쿠폰등을 보여주는 이미지뷰를 별도의 위젯 또는 그래픽을 그위에 올리거나 그리고 싶다면 또다른 레이아웃을 서피스뷰 위에 겹쳐두고 배경을 투명하게 만드는 방법을 사용한다. 






반응형