===== Capture ===== ==== 설명 ==== * 디바이스의 오디오, 이미지, 비디오 캡쳐를 위한 기능을 제공한다. // The global capture object var capture = navigator.device.capture; ==== 제약사항 ==== * Capture API의 플랫폼별 제약사항은 다음과 같다. === Android === == MediaFile.getFormatData == * 미디어 파일의 포맷 정보를 수집하는 API에 대해 제한이 있어, 일부 MediaFileData 속성을 지원하지 않는다. * MediaFileData : codecs, bitrate 을 지원하지 않는다. == CaptureAudioOptions == * duration 파라미터를 지원하지 않는다. * 프로그램적으로 녹음 시간을 제한할 수 없다. * mode 파라미터를 지원하지 않는다. * 오디오 녹음 포맷을 프로그램적으로 정의할 수 없다. * 오디오 녹음의 포맷은 audio/amr 만을 사용할 수 있다. == CaptureImageOptions == * mode 파라미터를 지원하지 않는다. * 이미지의 크기와 포맷을 프로그램적으로 정의할 수 없다. * 하지만 단말기 사용자가 이미지의 크기는 지정할 수 있다. * 이미지는 JPEG (image/jpeg) 로 저장된다. == CaptureVideoOptions == * duration 파라미터를 지원하지 않는다. * 비디오 촬영 크기를 프로그램적으로 제한할 수 없다. * mode 파라미터를 지원하지 않는다. * 비디오의 크기와 파라미터를 프로그램적으로 정의할 수 없다. * 비디오는 3GPP (videp/3gpp) 로 기본적으로 촬영된다. === iOS === == capture.captureAudio == * iOS는 단순한 유저 인터페이스를 가지기 때문에 기본적으로 오디오 녹음을 지원하지 않는다. == MediaFile.getFormatData == * 미디어 파일의 포맷 정보를 수집하는 API에 대해 제한이 있어, 일부 MediaFileData 속성을 지원하지 않는다. * MediaFileData : codecs을 지원하지 않는다. * MediaFileData : bitrate 는 iOS4 에서만 지원한다. == CaptureAudioOptions == * limit 파라미터를 지원하지 않는다. * 한 번에 하나의 녹음만 실행할 수 있다. * 오디오 녹음 포맷을 프로그램적으로 정의할 수 없다. * 오디오 녹음의 포맷은 audio/wav 만을 사용할 수 있다. == CaptureImageOptions == * limit 파라미터를 지원하지 않는다. * 한 번에 하나의 이미지만을 캡처할 수 있다 * mode 파라미터를 지원하지 않는다. * 이미지의 크기와 포맷을 프로그램적으로 정의할 수 없다. * 이미지는 JPEG (image/jpeg) 로 저장된다. == CaptureVideoOptions == * limit 파라미터는 지원하지 않는다. * 한 번에 하나의 비디오 촬영만 할 수 있다. * duration 파라미터를 지원하지 않는다. * 비디오 촬영 크기를 프로그램적으로 제한할 수 없다. * mode 파라미터를 지원하지 않는다. * 비디오의 크기와 파라미터를 프로그램적으로 정의할 수 없다. * 비디오는 MOV (video/quicktime) 로 기본적으로 촬영된다. ==== 환경 설정 ==== === Android === * app/res/xml/config.xml * app/AndroidManifest === iOS === * App/Supporting Files/config.xml ==== 속성 ==== === supportedAudioModes === * 디바이스에서 제공하는 오디오 녹음 포맷. * ConfigurationData[] === supportedImageModes === * 디바이스에서 제공하는 이미지 사이즈와 포맷 * ConfigurationData[] === supportedVideoModes === * 디바이스에서 제공하는 비디오 포맷 * ConfigurationData[] ==== 관련 함수 ==== === capture.captureAudio === * 단말기의 녹음 프로그램을 호출하여 녹음을 하고, 녹음을 완료하면 녹음한 데이터(clip) 를 가져온다. navigator.device.capture.captureAudio( CaptureCB captureSuccess, CaptureErrorCB captureError, [CaptureAudioOptions options] ); * Quick Example // capture callback var captureSuccess = function(mediaFiles) { var i, path, len; for (i = 0, len = mediaFiles.length; i < len; i += 1) { path = mediaFiles[i].fullPath; // do something interesting with the file } }; // capture error callback var captureError = function(error) { navigator.notification.alert('Error code: ' + error.code, null, 'Capture Error'); }; // start audio capture navigator.device.capture.captureAudio(captureSuccess, captureError, {limit:2}); === capture.captureImage === * 단말기의 카메라 프로그램을 호출하여 사진을 찍고 찍은 이미지를 가져온다. * 캡쳐된 이미지 파일에 대한 정보를 가져온다. navigator.device.capture.captureImage( CaptureCB captureSuccess, CaptureErrorCB captureError, [CaptureImageOptions options] ); * Quick Example // capture callback var captureSuccess = function(mediaFiles) { var i, path, len; for (i = 0, len = mediaFiles.length; i < len; i += 1) { path = mediaFiles[i].fullPath; // do something interesting with the file } }; // capture error callback var captureError = function(error) { navigator.notification.alert('Error code: ' + error.code, null, 'Capture Error'); }; // start image capture navigator.device.capture.captureImage(captureSuccess, captureError, {limit:2}); === capture.captureVideo === * 단말기의 카메라 프로그램을 호출하여 동영상을 촬영하고 촬영한 비디오를 가져온다. navigator.device.capture.captureVideo( CaptureCB captureSuccess, CaptureErrorCB captureError, [CaptureVideoOptions options] ); * Quick Example // capture callback var captureSuccess = function(mediaFiles) { var i, path, len; for (i = 0, len = mediaFiles.length; i < len; i += 1) { path = mediaFiles[i].fullPath; // do something interesting with the file } }; // capture error callback var captureError = function(error) { navigator.notification.alert('Error code: ' + error.code, null, 'Capture Error'); }; // start video capture navigator.device.capture.captureVideo(captureSuccess, captureError, {limit:2}); === MediaFile.getFormatData === * 미디어 파일의 포맷 정보를 가져온다. mediaFile.getFormatData( MediaFileDataSuccessCB successCallback, [MediaFileDataErrorCB errorCallback] ); ==== Objects ==== === CaptureAudioOptions === * 녹음을 지원하는 captureAudio() 메소드에 대한 옵션 객체. var options = { limit: 3, duration: 10 }; navigator.device.capture.captureAudio(captureSuccess, captureError, options); ^유형^설명^ |limit|한번에 녹음할 수 있는 횟수를 정의한다.| |duration|녹음할 경우, 최대 녹음시간을 정의한다.| |mode|capture.supportedAudioModes 에서 지원하는 오디오 모드중 하나를 지정한다.| === CaptureImageOptions === * 이미지 촬영을 지원하는 captureImage() 메소드에 대한 옵션 객체. navigator.device.capture.captureImage( CaptureCB captureSuccess, CaptureErrorCB captureError, [CaptureImageOptions options] ); ^유형^설명^ |limit|한번에 사진 촬영할 수 있는 횟수를 정의한다.| |mode|capture.supportedImageModes 에서 지원하는 이미지 모드중 하나를 지정한다.| === CaptureVideoOptions === * 동영상 촬영을 지원하는 captureVideo() 메소드에 대한 옵션 객체. var options = { limit: 3 }; navigator.device.capture.captureVideo(captureSuccess, captureError, options); ^유형^설명^ |limit|한번에 촬영할 수 있는 횟수를 정의한다.| |duration|촬영할 경우, 최대 촬영시간을 정의한다.| |mode|capture.supportedVideoModes 에서 지원하는 비디오 모드중 하나를 지정한다| === CaptureError === * 미디어 촬영 중에 발생할 수 있는 오류코드를 기록하는 객체. ^유형^설명^ |CaptureError.CAPTURE_INTERNAL_ERR|카메라가 사진을 찍거나 마이크로폰이 녹음을 하는 데 실패했을 경우의 오류.| |CaptureError.CAPTURE_APPLICATION_BUSY|카메라 또는 녹음 프로그램을 다른 서비스로 인해 호출할 수 없는 경우의 오류.| |CaptureError.CAPTURE_INVALID_ARGUMENT|옵션의 설정이 올바르지 않을 경우 phoneGap API에서 발생하는 오류.| |CaptureError.CAPTURE_NO_MEDIA_FILES|사용자가 촬영을 중단하고 임의로 빠져나왔을 때 발생하는 오류.| |CaptureError.CAPTURE_NOT_SUPPORTED|요청한 미디어 촬영이 지원하지 않을 때 발생하는 오류.| === CaptureCB === * 미디어 활영에 성공했을 때 실행하는 함수. function captureSuccess( MediaFile[] mediaFiles ) { ... }; * Quick Example function captureSuccess(mediaFiles) { var i, path, len; for (i = 0, len = mediaFiles.length; i < len; i += 1) { path = mediaFiles[i].fullPath; // do something interesting with the file } }; === CaptureErrorCB === * 미디어 촬영에 실패했을 때 실행하는 함수. function captureError( CaptureError error ) { ... }; * Quick Example var captureError = function(error) { navigator.notification.alert('Error code: ' + error.code, null, 'Capture Error'); }; === ConfigurationData === * 디바이스에서 지원하는 캡처 속성들을 기록할 수 있는 객체. * video/3gpp, video/quicktime, image/jpeg, audio/amr, audio/wav * Quick Example var imageModes = navigator.device.capture.supportedImageModes; var width = 0; var selectedmode; for each (var mode in imageModes) { if (mode.width > width) { width = mode.width; selectedmode = mode; } } ^유형^설명^타입^ |type|미디어 유형을 ASCII 코드로 인코딩한 소문자 문자열.|DOMString| |height|이미지나 비디오의 높이(pixel)를 정의하며, 오디오의 경우 0으로 처리한다.|Number| |width|이미지나 비디오의 너비(pixel)를 정의하며, 오디오의 경우 0으로 처리한다.|Number| === MediaFile === * 캡처한 파일의 속성들을 기록할 수 있는 객체. * MediaFile.getFormatData ^유형^설명^타입^ |name|경로를 제외한 파일명.|DOMString| |fullPath|파일명을 제외한 전체경로.|DOMString| |type|미디어 파일의 mime type.|DOMString| |lastModifiedDate|파일의 최종수정날짜.|Date| |size|byte 단위를 가지는 파일의 크기.|Number| === MediaFileData === * 미디어 파일에 대한 포맷 정보를 나타내는 객체. * 지원 속성 ^유형^Android^iOS^비고^ |height|X|X|항상, null이다.| |bitrate|X|O|iOS4에서만 오디오를 유일하게 지원한다. 이미지나 비디오는 항상 0이다.| |height|O|O|이미지와 비디오 파일에서만 지원한다.| |width|O|O|이미지와 비디오 파일에서만 지원한다.| |duration|O|O|이미지와 비디오 파일에서만 지원한다.| ==== 참고 자료 ==== * Cordova : https://cordova.apache.org/docs/en/8.x/reference/cordova-plugin-media-capture/index.html