멀티미디어

1. 오디오 재생하기

2. 동영상 재생하기

3. 오디오 녹음하기

4. 카메라 앱으로 사진 및 동영상 저장하기

5. Photo 앱으로 선택한 사진 저장하기

1. 오디오 재생하기

1.1 MediaPlayer


1.2 res/raw 폴더에 있는 오디오 리소스 재생


1.3 로컬에서 사용 가능한 URI 기반 재생 방법


1.4 URL로부터 오디오 재생


1.5 MediaPlayer 해제


1.6 MediaPlayer의 다양한 메소드

메소드 설명
void pause() 재생 일시 중지
boolean isPlaying() 재생 중인지 검사
void seekTo(int msec) msec 시간 위치로 재생 위치 이동
int getCurrentPosition() 현재 재생 위치를 반환

2. 동영상 재생하기

2.1 VideoView

예제

https://github.com/kwanulee/AndroidProgramming/blob/master/examples/MultimediaTest/app/src/main/res/layout/activity_video.xml

https://github.com/kwanulee/AndroidProgramming/blob/master/examples/MultimediaTest/app/src/main/java/com/example/kwanwoo/multimediatest/VideoActivity.java

3. 오디오 녹음 하기

3.1 MediaRecorder

[주의] Android 6.0 이상부터는 앱 실행 중에 권한 검사 및 요청 필요

3.2 권한 검사 및 요청

3.3 오디오 녹음 시작

  1. MediaRecorder 객체 생성
  2. setAudioSource()를 사용하여 오디오 소스를 설정합니다. 대개 MIC가 사용됩니다
  3. setOutputFormat()을 사용하여 출력 파일 포맷을 설정합니다.
  4. setAudioEncoder()를 사용하여 오디오 인코더를 설정합니다.
  5. setOutputFile()을 사용하여 출력 파일 이름을 설정합니다. 실제 파일을 나타내는 파일 설명자를 지정해야 합니다.
  6. prepare()를 호출하여 초기화를 완료합니다.
  7. start() 및 stop()을 각각 호출하여 녹음기를 시작 및 중지합니다.

예제 코드

    private void startAudioRec()  {
*          mMediaRecorder = new MediaRecorder();
*          mMediaRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
*          mMediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4);
*          mMediaRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.DEFAULT);

            // currentDateFormat(): 현재 시각을 “yyyyMMdd_HH_mm_ss” 형태로 반환
           recFileN = "VOICE" + currentDateFormat() + ".mp4";
           
            // 출력 파일의 위치를 앱 전용 외부저장소의 /Music/ 위치로 설정
*          mMediaRecorder.setOutputFile(
*                   getExternalFilesDir(Environment.DIRECTORY_MUSIC).getPath()+"/"  + recFileN);
          

           try {
*              mMediaRecorder.prepare();
               Toast.makeText(getApplicationContext(), "녹음을 시작하세요.", Toast.LENGTH_SHORT).show();
*              mMediaRecorder.start();
           } catch (Exception ex) {
               Log.e("SampleAudioRecorder", "Exception : ", ex);
           }
   }

https://github.com/kwanulee/AndroidProgramming/blob/master/examples/MultimediaTest/app/src/main/java/com/example/kwanwoo/multimediatest/MainActivity.java#L310-L326

    private void stopAudioRec()  {

*         mMediaRecorder.stop();
*         mMediaRecorder.release();
          mMediaRecorder = null;

          Uri uri = Uri.parse("file://" + 
                            getExternalFilesDir(Environment.DIRECTORY_MUSIC).getPath()+
                            "/" + 
                            recFileN);
          // 리스트 뷰의 항목으로 녹음된 파일 이름과 URI를 추가
          mAdapter.addItem(new MediaItem(MediaItem.SDCARD, recFileN,uri));

          Toast.makeText(getApplicationContext(), "녹음이 중지되었습니다.", Toast.LENGTH_SHORT).show();

    }

https://github.com/kwanulee/AndroidProgramming/blob/master/examples/MultimediaTest/app/src/main/java/com/example/kwanwoo/multimediatest/MainActivity.java#L328-L338

4. 카메라 앱으로 사진 및 동영상 저장하기

4.1 카메라 앱 실행 요청

4.2 카메라 앱으로 찍은 사진 저장하기

  1. 카메라 앱으로 찍은 이미지를 저장할 파일 객체 생성
  2. 생성된 파일 객체에 대한 Uri 객체를 얻기
  3. Uri 객체를 Extras를 통해 카메라 앱으로 전달

4.3 카메라 앱으로 찍은 사진 결과 처리

4.4 카메라 앱으로 촬영한 동영상 저장하기

  1. 동영상 캡처 작업 요청을 위한 인텐트를 생성
  2. 카메라 앱으로 촬영한 동영상을 저장할 파일 객체 생성
  3. 생성된 파일 객체에 대한 Uri 객체를 얻기
  4. Uri 객체를 앞서 생성한 인텐트의 Extras에 저장
  5. 카메라 앱으로 전달

    static final int REQUEST_VIDEO_CAPTURE = 2;
    
    private void dispatchTakeVideoIntent() {
        //  1. 동영상 캡처 작업 요청을 포함한 인텐트를 생성
    *    Intent takeVideoIntent = new Intent(MediaStore.ACTION_VIDEO_CAPTURE);
    
         if (takeVideoIntent.resolveActivity(getPackageManager()) != null) {
             //2. 카메라 앱으로 찍은 동영상을 저장할 파일 객체 생성
             mVideoFileName = "VIDEO"+currentDateFormat()+".mp4";
             File destination = new File(getExternalFilesDir(Environment.DIRECTORY_MOVIES), 
                                                            mVideoFileName);
             if (destination != null) {
                   //3. 생성된 파일 객체에 대한 Uri 객체를 얻기
                   Uri videoUri = FileProvider.getUriForFile(this, 
                                        "com.example.kwanwoo.multimediatest", destination);
    
                    //4. Uri 객체를 Extras를 통해 카메라 앱으로 전달
                    takeVideoIntent.putExtra(MediaStore.EXTRA_OUTPUT, videoUri);
                    startActivityForResult(takeVideoIntent, REQUEST_VIDEO_CAPTURE);
              }
    }

    https://github.com/kwanulee/AndroidProgramming/blob/master/examples/MultimediaTest/app/src/main/java/com/example/kwanwoo/multimediatest/MainActivity.java#L387-L404

4.5 카메라 앱으로 촬영한 결과를 처리하기

5. Photo/Gallery 앱으로 선택한 사진 저장하기

5.1 Photo/Gallery 앱으로 사진 선택하기

5.2 Photo/Gallery 앱으로 사진 선택한 결과 저장하기