CHAP 18. 멀티미디어.

Slides:



Advertisements
Similar presentations
Android Application. 최신버전 안드로이드 SDK 설치 1. SDK 설치 접속.
Advertisements

All Rights Reserved, Copyright© UBIVELOX co.,Ltd LG U+ 과금 API 소개 Version1.0 Authorubivelox Date21-Feb
Application Create Android Side. Application 설계 시 꼭 지켜야 할 5 가지 UI 쓰레드는 UI 만 처리하게 하자 사용자를 방해하지 말라. 다양한 화면 해상도를 지원하라 –Absolutelayout 을 사용하지 말아라 ( 고정값 )
For Android 이재원.  페이스북 SDK 설치  2 가지 예제 & 소스  API 사용 예제 프로젝트 만들기  Graph API  참고사항 & 사이트.
제 2 강 프로젝트 구성과 View 안드로이드 앱 개발 강좌. 목 차목 차목 차목 차 목 차목 차목 차목 차 안드로이드 프로젝트 구성 2 에뮬레이터 사용법 3 버전과 screen size 4 5 Hello World 앱 작성하기 1 View 와 ViewGroup.
삼성소프트웨어멤버십 20 th 박희근 ( A n d r o i d.
Android Application 데이터베이 스. 데이터베이스 활용하 기  안드로이드에 쓰이는 DBMS 의 이름은 SQLite.  SQLite 는 경량의 임베디드 데이터베이스 엔젠이며, 아이폰, 파이어폭스 등 여 러 곳에서 이미 많이 채택된 검증된 엔진이다. 
컴퓨터공학과 CHAP.1 기초 사항. 컴퓨터공학과 1스마트폰 스마트폰 = 컴퓨터 + mp3 플레이어 + 휴 대용 게임기 다양한 앱 설치 가능.
Unlocking Android 안드로이드 패키지 (1/2) 2 Unlocking Android 안드로이드 패키지 (2/2) 3.
6 메 뉴.
11장. 프로토콜 핸들러 AI &HC I LAB 김 성 현.
14. 위피 게임: 가위바위보 게임 초기에 점수=0 처음 이기면 10 점 그 다음부터 이기면 점수=현재 점수*2 지면
CHAP 8. 그래픽.
CHAP 10. 액티비티와 인텐트.
CHAP 10. 액티비티와 인텐트.
Android Programming 고급위젯
Contents 학습목표 이벤트를 처리하는 여러 가지 형식과 각 형식의 장단점에 대해 상세하게 연구하고 기본적인 이벤트에 대한 실습을 한다. 사용자의 입력을 자유자재로 처리하기 위해서 반드시 습득해야 하는 중요한 기술 실습. 학습내용 이벤트 핸들러 여러 가지 이벤트.
컴퓨터 응용 및 실습 Part1. OOP&Java Programming data type Review
CHAP 19. 구글맵.
○ 본 강의 자료는 이지스퍼블리싱(주)에서 제공하는 강의 교안입니다.
Contents 학습목표 이벤트를 처리하는 여러 가지 형식과 각 형식의 장단점에 대해 상세하게 연구하고 기본적인 이벤트에 대한 실습을 한다. 사용자의 입력을 자유자재로 처리하기 위해서 반드시 습득해야 하는 중요한 기술 실습. 학습내용 이벤트 핸들러 여러 가지 이벤트.
CHAP 7. 메뉴와 대화상자.
Contents 학습목표 Canvas와 Paint 객체를 통해 화면에 원하는 도형을 그리고 속성을 변경하는 기본적인 방법에 대해 소개한다. 토스트로 메시지를 출력하는 방법과 스피커를 통해 소리를 출력하는 방법에 대해서도 알아본다. 학습내용 캔버스 그리기 객체 쉐이더 그외.
04. 기본 위젯 익히기 제목.
Java Seminar 6.
CHAP 4. 이벤트 처리.
CHAP 6. 이벤트 처리.
모바일 서버 만들기 13장 Do it! Node.js 프로그래밍 이지스퍼블리싱 제공 강의 교안 2017/03
UNIT 07 그림책 만들기 1/2 로봇 SW 콘텐츠 연구원 조용수.
CHAP 20. 멀티미디어.
8장 자바 입출력.
제 12장 멀티미디어.
자바 5.0 프로그래밍.
audio/video Chapter 3 Part 1
CHAP 11. 액티비티와 인텐트.
CHAP 7. 메뉴와 대화상자.
01. 직렬화와 역직렬화에 대하여 객체의 직렬화 직렬화와 역직렬화
실전 사운드 처리 프로그래밍 Lecture #11.
Chap07 예외 처리 7.1 예외의 개요 7.2 예외 관련 클래스 7.3 예외 처리.
Software Engineering Project
DataScience Lab. 박사과정 김희찬 (월)
CHAP 8. 그래픽.
주소록 프로그램.
CHAP 6. 이벤트 처리.
CHAP 14. 데이터베이스와 환경 설정.
CHAP 13. 네트워크.
자바 5.0 프로그래밍.
제 4주 2014년 1학기 강원대학교 컴퓨터학부 담당교수: 정충교
DataScience Lab. 박사과정 김희찬 (월)
모바일 운영 체제 구글의 안드로이드 애플의 iOS 마이크로소프트의 윈도폰 8 RIM의 블랙베리 OS
어서와 Java는 처음이지! 제9장 인터페이스, 패키지.
03. 안드로이드를 위한 Java 문법 제목. 03. 안드로이드를 위한 Java 문법 제목.
Ch.1 Iterator Pattern <<interface>> Aggregate +iterator
CHAP 3. 첫번째 애플리케이션.
제 2장 어휘구조와 자료형 토 큰 리 터 럴 주 석 자 료 형 배 열 형.
CHAP 13. 서비스와 방송 수신자.
DataScience Lab. 박사과정 김희찬 (월)
Java Chapter 4 ~ 주차.
컴퓨터공학실습(I) 3주 인공지능연구실.
Ⅳ. 컴퓨터와 생활 오 산 중 학 교.
기술가정 2학년 1학기 4. 컴퓨터와 생활 > 1) 소프트웨어의 활용 > 4-6/11 소리 자료는 어떻게 만들까?
자바 5.0 프로그래밍.
JA V A W. 07 Sb.L.
Java 3장. 자바의 기본 구조 I : 변수, 자료형, 연산자 public class SumTest {
C# 10장. 참조형.
속담이나 관용표현 사용하여 글쓰기 다섯째 마당 국어(말듣쓰) 6학년 1학기 마음을 나누며-되돌아보기 9/9 수업 수업 계획
기술가정 2학년 2학기 4. 컴퓨터와 생활 >1) 소프트웨어의 활용 > 2~3/18 그림 자료는 어떻게 만들까?
CHAP 11. 리소스와 보안.
CHAP 5. 메뉴와 대화상자.
임베디드 프로그래밍 Lecture #
Presentation transcript:

CHAP 18. 멀티미디어

안드로이드의 멀티미디어 지원 멀티미디어 재생->MediaPlayer 클래스를 사용 멀티미디어 녹화-> MediaRecorder 클래스를 사용

안드로이드 지원 파일 형식 종류 형식/코덱 엔코더 디코더 지원파일종류(파일확장자) 오디오 AAC LC/LTP • 3GPP (.3gp) 와 MPEG-4 (.mp4, .m4a). raw AAC (.aac)는 지원하지 않음 HE-AACv1 (AAC+)   HE-AACv2 (enhanced AAC+) AMR-NB 3GPP (.3gp) AMR-WB MP3 MP3 (.mp3) MIDI Type 0과 1 (.mid, .xmf, .mxmf). RTTTL/RTX (.rtttl, .rtx), OTA (.ota)와 iMelody (.imy) Ogg Vorbis Ogg (.ogg) PCM/WAVE WAVE (.wav) 이미지 JPEG JPEG (.jpg) GIF GIF (.gif) PNG PNG (.png) BMP BMP (.bmp) 비디오 H.263 3GPP (.3gp) 와 MPEG-4 (.mp4) H.264 AVC MPEG-4 SP VP8 WebM (.webm)

오디오 재생 2가지의 방법 인텐트 사용 MediaPlayer 클래스 사용

(1) 인텐트를 사용하는 방법 public class AudioPlay1Activity extends Activity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); Button playButton = (Button) findViewById(R.id.play); playButton.setOnClickListener(new OnClickListener() { public void onClick(View v) { Intent intent =new Intent(Intent.ACTION_VIEW); Uri uri = Uri.parse("file:///sdcard/old_pop.mp3"); intent.setDataAndType(uri, "audio/mp3"); startActivity(intent); } });

실행 결과

(2) MediaPlayer 클래스를 사용한 오디오 예제

코드 작성 public class AudioPlay2Activity extends Activity { MediaPlayer mp = null; EditText edit; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); edit = (EditText) findViewById(R.id.path); } public void startResAudio(View v) { mp = MediaPlayer.create(this, R.raw.old_pop); mp.start(); public void stopResAudio(View v) { if (mp != null) { mp.stop(); mp.release(); mp = null;

코드 작성 public void startFileAudio(View v) { String file; file = edit.getText().toString(); mp = new MediaPlayer(); try { mp.setDataSource(file); mp.prepare(); } catch (Exception e) { e.printStackTrace(); } mp.start(); public void stopFileAudio(View v) { if (mp != null) { mp.stop(); mp.release(); mp = null;

실행 결과

오디오 녹음 2가지의 방법 인텐트 사용 MediaRecorder 클래스 사용

MediaRecorder를 사용하여서 오디오 녹음

예제

실행 결과

이미지 캡처 2가지의 방법 인텐트 사용 Camera 클래스 사용

예제: 인텐트를 이용한 이미지 획득

사용자 인터페이스 작성 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent"> <Button android:layout_height="wrap_content" android:layout_width="wrap_content" android:text="캡처" android:id="@+id/capture" /> android:text="처리" android:id="@+id/process" /> <ImageView android:id="@+id/imageview" android:layout_height="match_parent" /> </LinearLayout>

코드 작성 public class ImageCapture1Activity extends Activity { private static final int CAMERA_CAPTURE = 0; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE); Button captureButton = (Button) findViewById(R.id.capture); Button processButton = (Button) findViewById(R.id.process); captureButton.setOnClickListener(new OnClickListener() { public void onClick(View v) { Intent i = new Intent( android.provider.MediaStore.ACTION_IMAGE_CAPTURE); i.putExtra(android.provider.MediaStore.EXTRA_OUTPUT, Uri.fromFile(new File("/sdcard/image.jpg"))); startActivityForResult(i, CAMERA_CAPTURE); } });

코드 작성 processButton.setOnClickListener(new OnClickListener() { public void onClick(View v) { Bitmap captureBmp = null; File file = new File("/sdcard/image.jpg"); try { captureBmp = Images.Media.getBitmap(getContentResolver(), Uri.fromFile(file)); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { } int width = captureBmp.getWidth(); int height = captureBmp.getHeight(); Bitmap tmpBmp = captureBmp.copy(Bitmap.Config.ARGB_8888, true); for (int y = 0; y < height; y++) { for (int x = 0; x < width; x++) { int value = captureBmp.getPixel(x, y); if (value < 0xff808080) tmpBmp.setPixel(x, y, 0xff000000); else tmpBmp.setPixel(x, y, 0xffffffff); ImageView imgView = (ImageView) findViewById(R.id.imageview); imgView.setImageBitmap(tmpBmp); });

코드 작성 @Override protected void onActivityResult(int requestCode, int resultCode, Intent intent) { Bitmap captureBmp = null; if (resultCode == RESULT_OK && requestCode == CAMERA_CAPTURE) { File file = new File("/sdcard/image.jpg"); try { captureBmp = Images.Media.getBitmap(getContentResolver(), Uri.fromFile(file)); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { } ImageView imgView = (ImageView) findViewById(R.id.imageview); imgView.setImageBitmap(captureBmp);

실행 결과

Camera 클래스를 이용한 영상 캡처 만약 안드로이드에서 기본적으로 제공하는 카메라 서비스를 이용하지 않고 자신만의 카메라 애플리케 이션을 작성하고자 한다면 Camera 클래스를 이용하 면 된다. Camera 클래스를 이용하면 이미지 캡처 설정 변경, 이미지 프리뷰, 비디오에서 프레임 추출 등을 할 수 있다. 자세한 절차는 교과서를 참고하세요!

사용자 인터페이스 작성

핵심 코드

매니페스트 파일

실행 결과 갤럭시 S3에서는 \Phone\Pictures\CameraCapture 폴더에 MyPic20145609055637와 같은 이름으로 저장된다.

내장 사진 선택하기 ACTION_PICK 인텐트에 다음과 같은 URI를 주면 된 다. // 내장 메모리 android.provider.MediaStore.Images.Media.INTERNAL_CONTENT_URI; // 외장 메모리 android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI;

예제 실행 화면

비디오 재생 MediaPlayer 클래스는 오디오 재생 뿐만 아니라 비 디오 재생도 담당 VideoView 클래스는 MediaPlayer 객체의 생성과 초 기화를 담당한다.

예제: 비디오 재생

사용자 인터페이스 작성 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent" > <VideoView android:id="@+id/videoview" android:layout_width="wrap_content" android:layout_height="wrap_content" /> </LinearLayout>

코드 작성 public class VideoPlayActivity extends Activity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); this.setContentView(R.layout.main); VideoView videoview = (VideoView)this.findViewById(R.id.videoview); MediaController mc = new MediaController(this); videoview.setMediaController(mc); String folder = Environment.getExternalStorageDirectory().getAbsolutePath(); //videoview.setVideoURI(Uri.parse("http://media.w3.org/2010/05/sintel/trailer.mp4")); videoview.setVideoPath(folder + "/trailer.mp4"); videoview.requestFocus(); videoview.start(); }

실행 결과

비디오 녹화 MediaRecorder 클래스: 비디오 녹화 담당 SurfaceView : 캠코더의 화면을 표시

사용자 인터페이스 작성 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" > <SurfaceView android:id="@+id/videoview" android:layout_height="400dp" /> <Button android:id="@+id/mybutton" android:layout_height="wrap_content" android:text="녹화시작" android:textSize="12dp" /> </LinearLayout>

코드 작성 public class VideoRecordActivity extends Activity implements SurfaceHolder.Callback { Button myButton; MediaRecorder mediaRecorder; SurfaceHolder surfaceHolder; boolean is_recording; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); is_recording = false; mediaRecorder = new MediaRecorder(); initMediaRecorder(); setContentView(R.layout.main); SurfaceView myVideoView = (SurfaceView) findViewById(R.id.videoview); surfaceHolder = myVideoView.getHolder(); surfaceHolder.addCallback(this); myButton = (Button) findViewById(R.id.mybutton); myButton.setOnClickListener(myButtonOnClickListener); }

코드 작성 private Button.OnClickListener myButtonOnClickListener = new Button.OnClickListener() { public void onClick(View arg0) { if (is_recording) { mediaRecorder.stop(); mediaRecorder.release(); finish(); } else { mediaRecorder.start(); is_recording = true; myButton.setText("녹화중지"); } }; public void surfaceChanged(SurfaceHolder arg0, int arg1, int arg2, int arg3) { public void surfaceCreated(SurfaceHolder arg0) { prepareMediaRecorder(); public void surfaceDestroyed(SurfaceHolder arg0) {

코드 작성 private void initMediaRecorder() { mediaRecorder.setAudioSource(MediaRecorder.AudioSource.DEFAULT); mediaRecorder.setVideoSource(MediaRecorder.VideoSource.DEFAULT); CamcorderProfile camcorderProfile_HQ = CamcorderProfile .get(CamcorderProfile.QUALITY_LOW); mediaRecorder.setProfile(camcorderProfile_HQ); mediaRecorder.setOutputFile("/sdcard/video.mp4"); mediaRecorder.setMaxDuration(60000); // 최대 시간을 60초로 한정한다. mediaRecorder.setMaxFileSize(5000000); // 최대 파일 크기를 5MB로 한정한다. } private void prepareMediaRecorder() { mediaRecorder.setPreviewDisplay(surfaceHolder.getSurface()); try { mediaRecorder.prepare(); } catch (IllegalStateException e) { e.printStackTrace(); } catch (IOException e) {

실행 결과