diff --git a/.asf.yaml b/.asf.yaml new file mode 100644 index 00000000..29a6c7cb --- /dev/null +++ b/.asf.yaml @@ -0,0 +1,22 @@ +# Licensed to the Apache Software Foundation (ASF) under one +# or more contributor license agreements. See the NOTICE file +# distributed with this work for additional information +# regarding copyright ownership. The ASF licenses this file +# to you under the Apache License, Version 2.0 (the +# "License"); you may not use this file except in compliance +# with the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, +# software distributed under the License is distributed on an +# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +# KIND, either express or implied. See the License for the +# specific language governing permissions and limitations +# under the License. + +notifications: + commits: commits@cordova.apache.org + issues: issues@cordova.apache.org + pullrequests_status: issues@cordova.apache.org + pullrequests_comment: issues@cordova.apache.org diff --git a/.eslintrc.yml b/.eslintrc.yml new file mode 100644 index 00000000..6a024577 --- /dev/null +++ b/.eslintrc.yml @@ -0,0 +1,23 @@ +# Licensed to the Apache Software Foundation (ASF) under one +# or more contributor license agreements. See the NOTICE file +# distributed with this work for additional information +# regarding copyright ownership. The ASF licenses this file +# to you under the Apache License, Version 2.0 (the +# "License"); you may not use this file except in compliance +# with the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, +# software distributed under the License is distributed on an +# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +# KIND, either express or implied. See the License for the +# specific language governing permissions and limitations +# under the License. + +root: true +extends: "@cordova/eslint-config/browser" + +overrides: + - files: [tests/**/*.js] + extends: "@cordova/eslint-config/node-tests" diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 00000000..2883a5d2 --- /dev/null +++ b/.gitattributes @@ -0,0 +1,26 @@ +* text eol=lf + +# +## These files are binary and should be left untouched +# + +# (binary is a macro for -text -diff) +*.png binary +*.jpg binary +*.jpeg binary +*.gif binary +*.ico binary +*.mov binary +*.mp4 binary +*.mp3 binary +*.flv binary +*.fla binary +*.swf binary +*.gz binary +*.zip binary +*.7z binary +*.ttf binary +*.eot binary +*.woff binary +*.pyc binary +*.pdf binary diff --git a/.github/ISSUE_TEMPLATE.md b/.github/ISSUE_TEMPLATE.md new file mode 100644 index 00000000..3220c258 --- /dev/null +++ b/.github/ISSUE_TEMPLATE.md @@ -0,0 +1,42 @@ + + +### Issue Type + + +- [ ] Bug Report +- [ ] Feature Request +- [ ] Support Question + +## Description + +## Information + + +### Command or Code + + +### Environment, Platform, Device + + + + +### Version information + + + + +## Checklist + + +- [ ] I searched for already existing GitHub issues about this +- [ ] I updated all Cordova tooling to their most recent version +- [ ] I included all the necessary information above diff --git a/.github/ISSUE_TEMPLATE/BUG_REPORT.md b/.github/ISSUE_TEMPLATE/BUG_REPORT.md new file mode 100644 index 00000000..bd8a3acb --- /dev/null +++ b/.github/ISSUE_TEMPLATE/BUG_REPORT.md @@ -0,0 +1,50 @@ +--- +name: 🐛 Bug Report +about: If something isn't working as expected. + +--- + +# Bug Report + +## Problem + +### What is expected to happen? + + + +### What does actually happen? + + + +## Information + + + + +### Command or Code + + + + +### Environment, Platform, Device + + + + +### Version information + + + + +## Checklist + + +- [ ] I searched for existing GitHub issues +- [ ] I updated all Cordova tooling to most recent version +- [ ] I included all the necessary information above diff --git a/.github/ISSUE_TEMPLATE/FEATURE_REQUEST.md b/.github/ISSUE_TEMPLATE/FEATURE_REQUEST.md new file mode 100644 index 00000000..381fc8a3 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/FEATURE_REQUEST.md @@ -0,0 +1,29 @@ +--- +name: 🚀 Feature Request +about: A suggestion for a new functionality + +--- + +# Feature Request + +## Motivation Behind Feature + + + + +## Feature Description + + + + +## Alternatives or Workarounds + + + diff --git a/.github/ISSUE_TEMPLATE/SUPPORT_QUESTION.md b/.github/ISSUE_TEMPLATE/SUPPORT_QUESTION.md new file mode 100644 index 00000000..516c6e6b --- /dev/null +++ b/.github/ISSUE_TEMPLATE/SUPPORT_QUESTION.md @@ -0,0 +1,27 @@ +--- +name: 💬 Support Question +about: If you have a question, please check out our Slack or StackOverflow! + +--- + + + +Apache Cordova uses GitHub Issues as a feature request and bug tracker _only_. +For usage and support questions, please check out the resources below. Thanks! + +--- + +You can get answers to your usage and support questions about **Apache Cordova** on: + +* Slack Community Chat: https://cordova.slack.com (you can sign-up at http://slack.cordova.io/) +* StackOverflow: https://stackoverflow.com/questions/tagged/cordova using the tag `cordova` + +--- + +If you are using a tool that uses Cordova internally, like e.g. Ionic, check their support channels: + +* **Ionic Framework** + * [Ionic Community Forum](https://forum.ionicframework.com/) + * [Ionic Worldwide Slack](https://ionicworldwide.herokuapp.com/) +* **PhoneGap** + * [PhoneGap Developer Community](https://forums.adobe.com/community/phonegap) diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md index 4bd6da9d..712b2ff0 100644 --- a/.github/PULL_REQUEST_TEMPLATE.md +++ b/.github/PULL_REQUEST_TEMPLATE.md @@ -1,6 +1,5 @@ + + + + +### Description + + + + +### Testing + -### What testing has been done on this change? ### Checklist -- [ ] [ICLA](http://www.apache.org/licenses/icla.txt) has been signed and submitted to secretary@apache.org. -- [ ] [Reported an issue](http://cordova.apache.org/contribute/issues.html) in the JIRA database -- [ ] Commit message follows the format: "CB-3232: (android) Fix bug with resolving file paths", where CB-xxxx is the JIRA ID & "android" is the platform affected. -- [ ] Added automated test coverage as appropriate for this change. + +- [ ] I've run the tests to see all new and existing tests pass +- [ ] I added automated test coverage as appropriate for this change +- [ ] Commit is prefixed with `(platform)` if this change only applies to one platform (e.g. `(android)`) +- [ ] If this Pull Request resolves an issue, I linked to the issue in the text above (and used the correct [keyword to close issues using keywords](https://help.github.com/articles/closing-issues-using-keywords/)) +- [ ] I've updated the documentation if necessary diff --git a/.github/workflows/android.yml b/.github/workflows/android.yml new file mode 100644 index 00000000..806baeb4 --- /dev/null +++ b/.github/workflows/android.yml @@ -0,0 +1,148 @@ +# Licensed to the Apache Software Foundation (ASF) under one +# or more contributor license agreements. See the NOTICE file +# distributed with this work for additional information +# regarding copyright ownership. The ASF licenses this file +# to you under the Apache License, Version 2.0 (the +# "License"); you may not use this file except in compliance +# with the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, +# software distributed under the License is distributed on an +# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +# KIND, either express or implied. See the License for the +# specific language governing permissions and limitations +# under the License. + +name: Android Testsuite + +on: + push: + paths-ignore: + - '**.md' + - 'LICENSE' + - '.eslint*' + pull_request: + paths-ignore: + - '**.md' + - 'LICENSE' + - '.eslint*' + +jobs: + test: + name: Android ${{ matrix.versions.android }} Test + runs-on: macos-latest + + # hoist configurations to top that are expected to be updated + env: + # Storing a copy of the repo + repo: ${{ github.event.pull_request.head.repo.full_name || github.repository }} + + node-version: 16 + + # These are the default Java configurations used by most tests. + # To customize these options, add "java-distro" or "java-version" to the strategy matrix with its overriding value. + default_java-distro: adopt + default_java-version: 8 + + # These are the default Android System Image configurations used by most tests. + # To customize these options, add "system-image-arch" or "system-image-target" to the strategy matrix with its overriding value. + default_system-image-arch: x86_64 + default_system-image-target: google_apis # Most system images have a google_api option. Set this as default. + + # configurations for each testing strategy (test matrix) + strategy: + matrix: + versions: + - android: 5.1 + android-api: 22 + + - android: 6 + android-api: 23 + + - android: 7 + android-api: 24 + + - android: 7.1 + android-api: 25 + + - android: 8 + android-api: 26 + + - android: 8.1 + android-api: 27 + system-image-target: default + + - android: 9 + android-api: 28 + + - android: 10 + android-api: 29 + + - android: 11 + android-api: 30 + java-version: 11 + + timeout-minutes: 60 + + steps: + - uses: actions/checkout@v2 + - uses: actions/setup-node@v2 + with: + node-version: ${{ env.node-version }} + - uses: actions/setup-java@v2 + env: + java-version: ${{ matrix.versions.java-version == '' && env.default_java-version || matrix.versions.java-version }} + java-distro: ${{ matrix.versions.java-distro == '' && env.default_java-distro || matrix.versions.java-distro }} + with: + distribution: ${{ env.java-distro }} + java-version: ${{ env.java-version }} + + - name: Run Environment Information + run: | + node --version + npm --version + java -version + + - name: Run npm install + run: | + export PATH="/usr/local/lib/android/sdk/platform-tools":$PATH + export JAVA_HOME=$JAVA_HOME_11_X64 + npm i -g cordova@latest + npm ci + + - name: Run paramedic install + if: ${{ endswith(env.repo, '/cordova-paramedic') != true }} + run: npm i -g github:apache/cordova-paramedic + + - uses: reactivecircus/android-emulator-runner@5de26e4bd23bf523e8a4b7f077df8bfb8e52b50e + env: + system-image-arch: ${{ matrix.versions.system-image-arch == '' && env.default_system-image-arch || matrix.versions.system-image-arch }} + system-image-target: ${{ matrix.versions.system-image-target == '' && env.default_system-image-target || matrix.versions.system-image-target }} + with: + api-level: ${{ matrix.versions.android-api }} + target: ${{ env.system-image-target }} + arch: ${{ env.system-image-arch }} + force-avd-creation: false + disable-animations: false + emulator-options: -no-window -gpu swiftshader_indirect -noaudio -no-boot-anim + script: echo "Pregenerate the AVD before running Paramedic" + + - name: Run paramedic tests + uses: reactivecircus/android-emulator-runner@5de26e4bd23bf523e8a4b7f077df8bfb8e52b50e + env: + system-image-arch: ${{ matrix.versions.system-image-arch == '' && env.default_system-image-arch || matrix.versions.system-image-arch }} + system-image-target: ${{ matrix.versions.system-image-target == '' && env.default_system-image-target || matrix.versions.system-image-target }} + test_config: 'android-${{ matrix.versions.android }}.config.json' + # Generally, this should automatically work for cordova-paramedic & plugins. If the path is unique, this can be manually changed. + test_plugin_path: ${{ endswith(env.repo, '/cordova-paramedic') && './spec/testable-plugin/' || './' }} + paramedic: ${{ endswith(env.repo, '/cordova-paramedic') && 'node main.js' || 'cordova-paramedic' }} + with: + api-level: ${{ matrix.versions.android-api }} + target: ${{ env.system-image-target }} + arch: ${{ env.system-image-arch }} + force-avd-creation: false + disable-animations: false + emulator-options: -no-window -gpu swiftshader_indirect -noaudio -no-boot-anim + script: ${{ env.paramedic }} --config ./pr/local/${{ env.test_config }} --plugin ${{ env.test_plugin_path }} diff --git a/.github/workflows/chrome.yml b/.github/workflows/chrome.yml new file mode 100644 index 00000000..c44a7d3d --- /dev/null +++ b/.github/workflows/chrome.yml @@ -0,0 +1,73 @@ +# Licensed to the Apache Software Foundation (ASF) under one +# or more contributor license agreements. See the NOTICE file +# distributed with this work for additional information +# regarding copyright ownership. The ASF licenses this file +# to you under the Apache License, Version 2.0 (the +# "License"); you may not use this file except in compliance +# with the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, +# software distributed under the License is distributed on an +# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +# KIND, either express or implied. See the License for the +# specific language governing permissions and limitations +# under the License. + +name: Chrome Testsuite + +on: + push: + paths-ignore: + - '**.md' + - 'LICENSE' + - '.eslint*' + pull_request: + paths-ignore: + - '**.md' + - 'LICENSE' + - '.eslint*' + +jobs: + test: + name: Chrome Latest Test + runs-on: ubuntu-latest + + # hoist configurations to top that are expected to be updated + env: + # Storing a copy of the repo + repo: ${{ github.event.pull_request.head.repo.full_name || github.repository }} + + node-version: 16 + + steps: + - uses: actions/checkout@v2 + - uses: actions/setup-node@v2 + with: + node-version: ${{ env.node-version }} + + - name: Run install xvfb + run: sudo apt-get install xvfb + + - name: Run Environment Information + run: | + node --version + npm --version + + - name: Run npm install + run: | + npm i -g cordova@latest + npm ci + + - name: Run paramedic install + if: ${{ endswith(env.repo, '/cordova-paramedic') != true }} + run: npm i -g github:apache/cordova-paramedic + + - name: Run paramedic tests + env: + test_config: 'browser.config.json' + # Generally, this should automatically work for cordova-paramedic & plugins. If the path is unique, this can be manually changed. + test_plugin_path: ${{ endswith(env.repo, '/cordova-paramedic') && './spec/testable-plugin/' || './' }} + paramedic: ${{ endswith(env.repo, '/cordova-paramedic') && 'node main.js' || 'cordova-paramedic' }} + run: xvfb-run --auto-servernum ${{ env.paramedic }} --config ./pr/local/${{ env.test_config }} --plugin ${{ env.test_plugin_path }} diff --git a/.github/workflows/ios.yml b/.github/workflows/ios.yml new file mode 100644 index 00000000..4697cf0e --- /dev/null +++ b/.github/workflows/ios.yml @@ -0,0 +1,106 @@ +# Licensed to the Apache Software Foundation (ASF) under one +# or more contributor license agreements. See the NOTICE file +# distributed with this work for additional information +# regarding copyright ownership. The ASF licenses this file +# to you under the Apache License, Version 2.0 (the +# "License"); you may not use this file except in compliance +# with the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, +# software distributed under the License is distributed on an +# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +# KIND, either express or implied. See the License for the +# specific language governing permissions and limitations +# under the License. + +name: iOS Testsuite + +on: + push: + paths-ignore: + - '**.md' + - 'LICENSE' + - '.eslint*' + pull_request: + paths-ignore: + - '**.md' + - 'LICENSE' + - '.eslint*' + +jobs: + test: + name: iOS ${{ matrix.versions.ios-version }} Test + runs-on: ${{ matrix.versions.os-version }} + + # hoist configurations to top that are expected to be updated + env: + # Storing a copy of the repo + repo: ${{ github.event.pull_request.head.repo.full_name || github.repository }} + + node-version: 16 + + # > Starting April 26, 2021, all iOS and iPadOS apps submitted to the App Store must be built with Xcode 12 and the iOS 14 SDK. + # Because of Apple's requirement, listed above, We will only be using the latest Xcode release for testing. + # To customize these options, add "xcode-version" to the strategy matrix with its overriding value. + default_xcode-version: latest-stable + + strategy: + matrix: + versions: + - os-version: macos-10.15 + ios-version: 12.x + xcode-version: 11.x + + - os-version: macos-10.15 + ios-version: 13.x + xcode-version: 11.x + + - os-version: macos-10.15 + ios-version: 14.x + xcode-version: 12.x + + - os-version: macos-11 + ios-version: 15.x + xcode-version: 13.x + + steps: + - uses: actions/checkout@v2 + - uses: actions/setup-node@v2 + with: + node-version: ${{ env.node-version }} + - uses: maxim-lobanov/setup-xcode@881be567d30efed8fb3f12b5099d68c3fb72aa3d + env: + xcode-version: ${{ matrix.versions.xcode-version == '' && env.default_xcode-version || matrix.versions.xcode-version }} + with: + xcode-version: ${{ env.xcode-version }} + + - name: Run Environment Information + run: | + node --version + npm --version + xcodebuild -version + + - name: Run npm install + run: | + npm i -g cordova@latest ios-deploy@latest + npm ci + + - name: Run setup iOS 12.x support + if: ${{ matrix.versions.ios-version == '12.x' }} + run: | + sudo mkdir -p /Library/Developer/CoreSimulator/Profiles/Runtimes + sudo ln -s /Applications/Xcode_10.3.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/Library/CoreSimulator/Profiles/Runtimes/iOS.simruntime /Library/Developer/CoreSimulator/Profiles/Runtimes/iOS\ 12.4.simruntime + + - name: Run paramedic install + if: ${{ endswith(env.repo, '/cordova-paramedic') != true }} + run: npm i -g github:apache/cordova-paramedic + + - name: Run paramedic tests + env: + test_config: 'ios-${{ matrix.versions.ios-version }}.config.json' + # Generally, this should automatically work for cordova-paramedic & plugins. If the path is unique, this can be manually changed. + test_plugin_path: ${{ endswith(env.repo, '/cordova-paramedic') && './spec/testable-plugin/' || './' }} + paramedic: ${{ endswith(env.repo, '/cordova-paramedic') && 'node main.js' || 'cordova-paramedic' }} + run: ${{ env.paramedic }} --config ./pr/local/${{ env.test_config }} --plugin ${{ env.test_plugin_path }} diff --git a/.github/workflows/lint.yml b/.github/workflows/lint.yml new file mode 100644 index 00000000..26716d75 --- /dev/null +++ b/.github/workflows/lint.yml @@ -0,0 +1,56 @@ +# Licensed to the Apache Software Foundation (ASF) under one +# or more contributor license agreements. See the NOTICE file +# distributed with this work for additional information +# regarding copyright ownership. The ASF licenses this file +# to you under the Apache License, Version 2.0 (the +# "License"); you may not use this file except in compliance +# with the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, +# software distributed under the License is distributed on an +# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +# KIND, either express or implied. See the License for the +# specific language governing permissions and limitations +# under the License. + +name: Lint Test + +on: + push: + paths: + - '**.js' + - '.eslint*' + - '.github/workflow/lint.yml' + pull_request: + paths: + - '**.js' + - '.eslint*' + - '.github/workflow/lint.yml' + +jobs: + test: + name: Lint Test + runs-on: ubuntu-latest + env: + node-version: 16 + + steps: + - uses: actions/checkout@v2 + - uses: actions/setup-node@v2 + with: + node-version: ${{ env.node-version }} + + - name: Run Environment Information + run: | + node --version + npm --version + + - name: Run npm install + run: | + npm ci + + - name: Run lint test + run: | + npm run lint diff --git a/.jshintrc b/.jshintrc deleted file mode 100644 index 9582eb7b..00000000 --- a/.jshintrc +++ /dev/null @@ -1,18 +0,0 @@ -{ - "browser": true - , "devel": true - , "bitwise": true - , "undef": true - , "trailing": true - , "quotmark": false - , "indent": 4 - , "unused": "vars" - , "latedef": "nofunc" - , "globals": { - "module": false, - "exports": false, - "require": false, - "cordova": true, - "File": true - } -} diff --git a/.npmignore b/.npmignore new file mode 100644 index 00000000..2657abf2 --- /dev/null +++ b/.npmignore @@ -0,0 +1,2 @@ +.* +tests diff --git a/.travis.yml b/.travis.yml deleted file mode 100644 index b9af4c58..00000000 --- a/.travis.yml +++ /dev/null @@ -1,4 +0,0 @@ -language: node_js -sudo: false -node_js: - - "4.2" diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 4c8e6a5e..21a93d72 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -25,13 +25,13 @@ Anyone can contribute to Cordova. And we need your contributions. There are multiple ways to contribute: report bugs, improve the docs, and contribute code. - -For instructions on this, start with the + +For instructions on this, start with the [contribution overview](http://cordova.apache.org/contribute/). The details are explained there, but the important items are: - - Sign and submit an Apache ICLA (Contributor License Agreement). - - Have a Jira issue open that corresponds to your contribution. + - Check for Github issues that corresponds to your contribution and link or create them if necessary. - Run the tests so your patch doesn't break existing functionality. We look forward to your contributions! + diff --git a/README.md b/README.md index 6d10b036..e2023759 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,5 @@ --- -title: Media Capture With MP4 Video Capture for Android / iOS +title: Media Capture description: Capture audio, video, and images. --- +# cordova-plugin-media-capture -# cordova-plugin-media-capture-mp4video +[![Android Testsuite](https://github.com/apache/cordova-plugin-media-capture/actions/workflows/android.yml/badge.svg)](https://github.com/apache/cordova-plugin-media-capture/actions/workflows/android.yml) [![Chrome Testsuite](https://github.com/apache/cordova-plugin-media-capture/actions/workflows/chrome.yml/badge.svg)](https://github.com/apache/cordova-plugin-media-capture/actions/workflows/chrome.yml) [![iOS Testsuite](https://github.com/apache/cordova-plugin-media-capture/actions/workflows/ios.yml/badge.svg)](https://github.com/apache/cordova-plugin-media-capture/actions/workflows/ios.yml) [![Lint Test](https://github.com/apache/cordova-plugin-media-capture/actions/workflows/lint.yml/badge.svg)](https://github.com/apache/cordova-plugin-media-capture/actions/workflows/lint.yml) This plugin provides access to the device's audio, image, and video capture capabilities. -This plugin has been modified to return an mpeg encoded mp4 file when video is captured from from Android or iOS device. - __WARNING__: Collection and use of images, video, or audio from the device's camera or microphone raises important privacy issues. Your app's privacy policy should discuss how the app uses @@ -52,20 +51,15 @@ Although in the global scope, it is not available until after the `deviceready` console.log(navigator.device.capture); } - ## Installation - cordova plugin add cordova-plugin-media-capture-mp4video + cordova plugin add cordova-plugin-media-capture ## Supported Platforms -- Amazon Fire OS - Android -- BlackBerry 10 - Browser - iOS -- Windows Phone 7 and 8 -- Windows 8 - Windows ## Objects @@ -124,12 +118,8 @@ code. ### Supported Platforms -- Amazon Fire OS - Android -- BlackBerry 10 - iOS -- Windows Phone 7 and 8 -- Windows 8 - Windows ### Example @@ -153,22 +143,6 @@ code. ### iOS Quirks -Since iOS 10 it's mandatory to add a `NSCameraUsageDescription`, `NSMicrophoneUsageDescription` and `NSPhotoLibraryUsageDescription` in the info.plist. - -* `NSCameraUsageDescription` describes the reason that the app accesses the user’s camera. -* `NSMicrophoneUsageDescription` describes the reason that the app accesses the user’s microphone. -* `NSPhotoLibraryUsageDescription` describes the reason the app accesses the user's photo library. - -When the system prompts the user to allow access, this string is displayed as part of the dialog box. - -These strings have been hard coded with the following strings to allow the plugin to be used by PhoneGap Build as well as the Cordova CLI: - -* `NSCameraUsageDescription:` This app requires access to the camera to take photos. -* `NSMicrophoneUsageDescription:` This app requires access to the microphone to record audio. -* `NSPhotoLibraryUsageDescription:` This app requires access to the photo library to display images. - -- - - iOS does not have a default audio recording application, so a simple user interface is provided. ### Windows Phone 7 and 8 Quirks @@ -203,19 +177,41 @@ object featuring a `CaptureError.CAPTURE_NO_MEDIA_FILES` error code. ### Supported Platforms -- Amazon Fire OS - Android -- BlackBerry 10 - Browser - iOS -- Windows Phone 7 and 8 -- Windows 8 - Windows -### Windows Phone 7 Quirks +### iOS Quirks + +Since iOS 10 it's mandatory to provide an usage description in the `info.plist` if trying to access privacy-sensitive data. When the system prompts the user to allow access, this usage description string will displayed as part of the permission dialog box, but if you didn't provide the usage description, the app will crash before showing the dialog. Also, Apple will reject apps that access private data but don't provide an usage description. + +This plugins requires the following usage descriptions: + +* `NSCameraUsageDescription` describes the reason the app accesses the user's camera. +* `NSMicrophoneUsageDescription` describes the reason the app accesses the user's microphone. +* `NSPhotoLibraryUsageDescriptionentry` describes the reason the app accesses the user's photo library. -Invoking the native camera application while your device is connected -via Zune does not work, and the error callback executes. + +To add these entries into the `info.plist`, you can use the `edit-config` tag in the `config.xml` like this: + +``` + + need camera access to take pictures + +``` + +``` + + need microphone access to record sounds + +``` + +``` + + need to photo library access to get pictures from there + +``` ### Browser Quirks @@ -274,12 +270,8 @@ capturing a video clip, the `CaptureErrorCB` callback executes with a ### Supported Platforms -- Amazon Fire OS - Android -- BlackBerry 10 - iOS -- Windows Phone 7 and 8 -- Windows 8 - Windows ### Example @@ -302,10 +294,6 @@ capturing a video clip, the `CaptureErrorCB` callback executes with a navigator.device.capture.captureVideo(captureSuccess, captureError, {limit:2}); -### BlackBerry 10 Quirks - -- Cordova for BlackBerry 10 attempts to launch the __Video Recorder__ application, provided by RIM, to capture video recordings. The app receives a `CaptureError.CAPTURE_NOT_SUPPORTED` error code if the application is not installed on the device. - ## CaptureAudioOptions @@ -324,18 +312,10 @@ capturing a video clip, the `CaptureErrorCB` callback executes with a navigator.device.capture.captureAudio(captureSuccess, captureError, options); -### Amazon Fire OS Quirks - -- The `duration` parameter is not supported. Recording lengths cannot be limited programmatically. - ### Android Quirks - The `duration` parameter is not supported. Recording lengths can't be limited programmatically. -### BlackBerry 10 Quirks - -- The `duration` parameter is not supported. Recording lengths can't be limited programmatically. -- The `limit` parameter is not supported, so only one recording can be created for each invocation. ### iOS Quirks @@ -379,10 +359,6 @@ capturing a video clip, the `CaptureErrorCB` callback executes with a navigator.device.capture.captureVideo(captureSuccess, captureError, options); -### BlackBerry 10 Quirks - -- The __duration__ property is ignored, so the length of recordings can't be limited programmatically. - ### iOS Quirks - The __limit__ property is ignored. Only one video is recorded per invocation. @@ -483,7 +459,7 @@ video or image capture. The MIME types should adhere to [RFC2046](http://www.ietf.org/rfc/rfc2046.txt). Examples: - `video/3gpp` -- `video/mpeg` +- `video/quicktime` - `image/jpeg` - `audio/amr` - `audio/wav` @@ -532,23 +508,10 @@ callback. ### Supported Platforms -- Amazon Fire OS - Android -- BlackBerry 10 - iOS -- Windows Phone 7 and 8 -- Windows 8 - Windows -### Amazon Fire OS Quirks - -The API to access media file format information is limited, so not all -`MediaFileData` properties are supported. - -### BlackBerry 10 Quirks - -Does not provide an API for information about media files, so all -`MediaFileData` objects return with default values. ### Android Quirks @@ -596,36 +559,6 @@ The API to access media file format information is limited, so not all - __duration__: The length of the video or sound clip in seconds. The value is zero for images. (Number) -### BlackBerry 10 Quirks - -No API provides format information for media files, so the -`MediaFileData` object returned by `MediaFile.getFormatData` features -the following default values: - -- __codecs__: Not supported, and returns `null`. - -- __bitrate__: Not supported, and returns zero. - -- __height__: Not supported, and returns zero. - -- __width__: Not supported, and returns zero. - -- __duration__: Not supported, and returns zero. - -### Amazon Fire OS Quirks - -Supports the following `MediaFileData` properties: - -- __codecs__: Not supported, and returns `null`. - -- __bitrate__: Not supported, and returns zero. - -- __height__: Supported: image and video files only. - -- __width__: Supported: image and video files only. - -- __duration__: Supported: audio and video files only - ### Android Quirks Supports the following `MediaFileData` properties: diff --git a/RELEASENOTES.md b/RELEASENOTES.md index 655cc259..a2849dd6 100644 --- a/RELEASENOTES.md +++ b/RELEASENOTES.md @@ -20,16 +20,83 @@ --> # Release Notes +### 3.0.3 (Jun 19, 2019) + +- fix(android): Catch ActivityNotFoundException ([#104](https://github.com/apache/cordova-plugin-media-capture/issues/104)) ([`f69ba2a`](https://github.com/apache/cordova-plugin-media-capture/commit/f69ba2a)) +- fix(android): CB-14260: (android) captureImage permission denial on android 8.1 ([#95](https://github.com/apache/cordova-plugin-media-capture/issues/95)) ([`3755f9f`](https://github.com/apache/cordova-plugin-media-capture/commit/3755f9f)) +- docs: remove outdated translations ([`6422b2b`](https://github.com/apache/cordova-plugin-media-capture/commit/6422b2b)) +- build: add `.npmignore` to remove unneeded files from npm package ([`586f917`](https://github.com/apache/cordova-plugin-media-capture/commit/586f917)) +- build: add `.gitattributes` to force LF (instead of possible CRLF on Windows) ([`246ce57`](https://github.com/apache/cordova-plugin-media-capture/commit/246ce57)) +- ci(travis): Update Travis CI configuration for new paramedic ([#134](https://github.com/apache/cordova-plugin-media-capture/issues/134)) ([`f59af25`](https://github.com/apache/cordova-plugin-media-capture/commit/f59af25)) +- chore(github): Add or update GitHub pull request and issue template ([`e5a982e`](https://github.com/apache/cordova-plugin-media-capture/commit/e5a982e)) +- docs: remove JIRA link ([`c3928c8`](https://github.com/apache/cordova-plugin-media-capture/commit/c3928c8)) +- ci(travis): also accept terms for android sdk `android-27` ([`59966ac`](https://github.com/apache/cordova-plugin-media-capture/commit/59966ac)) +- chore(types): Add CaptureError.CAPTURE_PERMISSION_DENIED to type declaration file [#98](https://github.com/apache/cordova-plugin-media-capture/issues/98) ([`eff0128`](https://github.com/apache/cordova-plugin-media-capture/commit/eff0128), [`5fb4917`](https://github.com/apache/cordova-plugin-media-capture/commit/5fb4917)) + +### 3.0.2 (Apr 12, 2018) +* [CB-13866](https://issues.apache.org/jira/browse/CB-13866): **iOS** fix Camera opens in portrait orientation on iphones + +### 3.0.1 (Dec 27, 2017) +* [CB-13707](https://issues.apache.org/jira/browse/CB-13707) Fix to allow 3.0.0 version install (#88) +* Bump cordova-plugin-file dependency to 6.0.0 + +### 3.0.0 (Dec 15, 2017) +* [CB-13669](https://issues.apache.org/jira/browse/CB-13669) : Remove deprecated plugins + +### 2.0.0 (Nov 06, 2017) +* [CB-13520](https://issues.apache.org/jira/browse/CB-13520) (all): Add 'protective' entry to `cordovaDependencies` +* [CB-13266](https://issues.apache.org/jira/browse/CB-13266) (ios): Remove **iOS** usage descriptions +* [CB-13473](https://issues.apache.org/jira/browse/CB-13473) (CI) Removed **Browser** builds from AppVeyor +* [CB-13294](https://issues.apache.org/jira/browse/CB-13294) Remove `cordova-plugin-compat` +* [CB-13299](https://issues.apache.org/jira/browse/CB-13299) (CI) Fix **Android** builds +* [CB-12895](https://issues.apache.org/jira/browse/CB-12895) added `eslint` and removed `jshint` +* [CB-13028](https://issues.apache.org/jira/browse/CB-13028) (CI) **Browser** builds on Travis and AppVeyor +* [CB-12882](https://issues.apache.org/jira/browse/CB-12882) (ios): adds support for permissions checks for `captureVideo` and `captureImage` methods +* [CB-12847](https://issues.apache.org/jira/browse/CB-12847) added `bugs` entry to `package.json`. + +### 1.4.3 (Apr 27, 2017) +* [CB-12622](https://issues.apache.org/jira/browse/CB-12622) Added **Android 6.0** build badges to `README` +* [CB-12685](https://issues.apache.org/jira/browse/CB-12685) added `package.json` to tests folder + +### 1.4.2 (Feb 28, 2017) +* [CB-12353](https://issues.apache.org/jira/browse/CB-12353) Corrected merges usage in `plugin.xml` +* [CB-12369](https://issues.apache.org/jira/browse/CB-12369) Add plugin typings from `DefinitelyTyped` +* [CB-12363](https://issues.apache.org/jira/browse/CB-12363) Added build badges for **iOS 9.3** and **iOS 10.0** +* [CB-12230](https://issues.apache.org/jira/browse/CB-12230) Removed **Windows 8.1** build badges + +### 1.4.1 (Dec 07, 2016) +* [CB-12224](https://issues.apache.org/jira/browse/CB-12224) Updated version and RELEASENOTES.md for release 1.4.1 +* [CB-10701](https://issues.apache.org/jira/browse/CB-10701) [CB-7117](https://issues.apache.org/jira/browse/CB-7117) android: Add manual test to check getting metadata +* [CB-10489](https://issues.apache.org/jira/browse/CB-10489) Fix for MediaFile.getFormatData / audio recording support +* [CB-10488](https://issues.apache.org/jira/browse/CB-10488) Fix for MediaFile.getFormatData +* [CB-11996](https://issues.apache.org/jira/browse/CB-11996) Added a new manual test to capture multiple images +* [CB-11995](https://issues.apache.org/jira/browse/CB-11995) (android) Do not pass a file URI to the camera +* [CB-11917](https://issues.apache.org/jira/browse/CB-11917) - Remove pull request template checklist item: "iCLA has been submitted…" +* [CB-11832](https://issues.apache.org/jira/browse/CB-11832) Incremented plugin version. + +### 1.4.0 (Sep 08, 2016) +* Add mandatory **iOS 10** privacy description for microphone +* [CB-11795](https://issues.apache.org/jira/browse/CB-11795) Add 'protective' entry to cordovaDependencies +* [CB-11821](https://issues.apache.org/jira/browse/CB-11821) (ios) Add mandatory **iOS 10** privacy description +* Plugin uses `Android Log class` and not `Cordova LOG class` +* Add badges for paramedic builds on Jenkins +* [CB-11396](https://issues.apache.org/jira/browse/CB-11396) - Audio Media Capture Crashes if app stores file on external storage +* Add pull request template. +* [CB-11212](https://issues.apache.org/jira/browse/CB-11212) **iOS**: Explicitly set the bundle for images +* [CB-10554](https://issues.apache.org/jira/browse/CB-10554) Implementing plugin `save/restore` API for Android +* [CB-11165](https://issues.apache.org/jira/browse/CB-11165) removed peer dependency +* [CB-10996](https://issues.apache.org/jira/browse/CB-10996) Adding front matter to README.md + ### 1.3.0 (Apr 15, 2016) * Replace `PermissionHelper.java` with `cordova-plugin-compat` -* CB-10670, CB-10994 **Android**, Marshmallow permissions -* CB-10720: Fixing README for display on Cordova website -* CB-10636 Add `JSHint` for plugins -* CB-10690 **windows**, fix crash when user cancels/closes photo app +* CB-10670, [CB-10994](https://issues.apache.org/jira/browse/CB-10994) **Android**, Marshmallow permissions +* [CB-10720](https://issues.apache.org/jira/browse/CB-10720) Fixing README for display on Cordova website +* [CB-10636](https://issues.apache.org/jira/browse/CB-10636) Add `JSHint` for plugins +* [CB-10690](https://issues.apache.org/jira/browse/CB-10690) **windows**, fix crash when user cancels/closes photo app ### 1.2.0 (Jan 15, 2016) -* CB-10100 updated file dependency to not grab new majors -* CB-8863 Fix block usage of self +* [CB-10100](https://issues.apache.org/jira/browse/CB-10100) updated file dependency to not grab new majors +* [CB-8863](https://issues.apache.org/jira/browse/CB-8863) Fix block usage of self ### 1.1.0 (Nov 18, 2015) * [CB-10035](https://issues.apache.org/jira/browse/CB-10035) Updated `RELEASENOTES` to be newest to oldest @@ -76,7 +143,7 @@ * [CB-7429](https://issues.apache.org/jira/browse/CB-7429) Adds media capture support for windows ### 0.3.3 (Sep 17, 2014) -* Renamed test dir, added nested plugin.xml +* Renamed test dir, added nested `plugin.xml` * added documentation for manual tests * [CB-6959](https://issues.apache.org/jira/browse/CB-6959) Added manual tests * [CB-6959](https://issues.apache.org/jira/browse/CB-6959) Port capture tests to plugin-test-framework @@ -127,11 +194,11 @@ ### 0.2.4 (Oct 28, 2013) * [CB-5199](https://issues.apache.org/jira/browse/CB-5199) - ios - Media Capture - UI issues under iOS 7 -* [CB-5128](https://issues.apache.org/jira/browse/CB-5128): added repo + issue tag to plugin.xml for media capture plugin +* [CB-5128](https://issues.apache.org/jira/browse/CB-5128): added repo + issue tag to `plugin.xml` for media capture plugin * [CB-5010](https://issues.apache.org/jira/browse/CB-5010) Incremented plugin version on dev branch. ### 0.2.3 (Oct 9, 2013) -* [CB-4720](https://issues.apache.org/jira/browse/CB-4720): fixed incorrect feature tag in plugin.xml for wp +* [CB-4720](https://issues.apache.org/jira/browse/CB-4720): fixed incorrect feature tag in `plugin.xml` for wp * [CB-4915](https://issues.apache.org/jira/browse/CB-4915) Incremented plugin version on dev branch. ### 0.2.2 (Sept 25, 2013) diff --git a/doc/de/README.md b/doc/de/README.md deleted file mode 100644 index f95e95fa..00000000 --- a/doc/de/README.md +++ /dev/null @@ -1,564 +0,0 @@ - - -# cordova-plugin-media-capture - -[![Build Status](https://travis-ci.org/apache/cordova-plugin-media-capture.svg)](https://travis-ci.org/apache/cordova-plugin-media-capture) - -Dieses Plugin ermöglicht den Zugriff auf des Geräts Audio-, Bild- und video-Capture-Funktionen. - -**Warnung**: Erfassung und Verwendung von Bildern, Video oder Audio von Kamera oder das Mikrofon des Geräts wirft wichtige Privatsphäre Fragen. Ihre app-Datenschutzerklärung sollten besprechen, wie die app solche Sensoren verwendet und ob die aufgezeichneten Daten mit irgendwelchen anderen Parteien geteilt werden. Zusätzlich wenn die app-Nutzung der Kamera oder Mikrofon in der Benutzeroberfläche nicht offensichtlich ist, sollten Sie eine just-in-Time Ihnen vorher die app die Kamera oder das Mikrofon zugreift (wenn das Betriebssystem des Geräts bereits tun nicht). Diese Benachrichtigung sollte der gleichen Informationen, die vorstehend, sowie die Zustimmung des Benutzers (z.B. durch Präsentation Entscheidungen für das **OK** und **Nein danke**). Beachten Sie, dass einige app-Marktplätze können Ihre app eine Frist von just-in-Time und Erlaubnis des Benutzers vor dem Zugriff auf die Kamera oder das Mikrofon einholen. Weitere Informationen finden Sie in der Datenschutz-Guide. - -Dieses Plugin wird global `navigator.device.capture`-Objekt definiert. - -Obwohl im globalen Gültigkeitsbereich, steht es nicht bis nach dem `deviceready`-Ereignis. - - document.addEventListener("deviceready", onDeviceReady, false); - function onDeviceReady() { - console.log(navigator.device.capture); - } - - -## Installation - - cordova plugin add cordova-plugin-media-capture - - -## Unterstützte Plattformen - - * Amazon Fire OS - * Android - * BlackBerry 10 - * Browser - * iOS - * Windows Phone 7 und 8 - * Windows 8 - * Windows - -## Objekte - - * Erfassen - * CaptureAudioOptions - * CaptureImageOptions - * CaptureVideoOptions - * CaptureCallback - * CaptureErrorCB - * ConfigurationData - * MediaFile - * MediaFileData - -## Methoden - - * capture.captureAudio - * capture.captureImage - * capture.captureVideo - * MediaFile.getFormatData - -## Eigenschaften - - * **SupportedAudioModes**: die Audio-Aufnahme vom Gerät unterstützten Formate. (ConfigurationData[]) - - * **SupportedImageModes**: die Aufnahme Bildgrößen und Formaten, die von dem Gerät unterstützt. (ConfigurationData[]) - - * **SupportedVideoModes**: die Aufnahme Bildschirmauflösungen und Formate, die vom Gerät unterstützt. (ConfigurationData[]) - -## capture.captureAudio - -> Die audio-Recorder-Anwendung starten und geben Informationen über aufgenommene audio-Clip-Dateien zurück. - - navigator.device.capture.captureAudio( - CaptureCB captureSuccess, CaptureErrorCB captureError, [CaptureAudioOptions options] - ); - - -### Beschreibung - -Beginnt einen asynchronen Vorgang, Audioaufnahmen, die audio-Aufnahme-Standardanwendung des Geräts erfassen. Die Operation erlaubt dem Benutzer des Geräts, mehrere Aufnahmen in einer einzigen Sitzung zu erfassen. - -Der Capture-Vorgang endet, wenn entweder der Benutzer schließt die Anwendung für die Audioaufnahme, oder die maximale Anzahl der Aufnahmen, die von `CaptureAudioOptions.limit` angegebene erreicht ist. Wenn `kein Grenzwert für den` Parameter angegeben ist, wird standardmaessig eins (1) und der Capture-Vorgang beendet, nachdem der Benutzer ein einzelnes audio-Clips aufgezeichnet. - -Wenn der Capture-Vorgang abgeschlossen ist, führt die `CaptureCallback` mit einem Array von `MediaFile` Objekten beschreibt jede aufgezeichnete audio-Clip-Datei. Wenn der Benutzer den Vorgang beendet wird, bevor ein Audioclip erfasst wird, führt die `CaptureErrorCallback` mit einem `CaptureError`-Objekt, mit dem Fehlercode `CaptureError.CAPTURE_NO_MEDIA_FILES`. - -### Unterstützte Plattformen - - * Amazon Fire OS - * Android - * BlackBerry 10 - * iOS - * Windows Phone 7 und 8 - * Windows 8 - * Windows - -### Beispiel - - // 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}); - - -### iOS Macken - - * iOS muss keine Standard-audio-Recording-Anwendung, so dass eine einfache Benutzeroberfläche bereitgestellt wird. - -### Windows Phone 7 und 8 Eigenarten - - * Windows Phone 7 muss keine Standard-audio-Recording-Anwendung, so dass eine einfache Benutzeroberfläche bereitgestellt wird. - -## CaptureAudioOptions - -> Kapselt Audioaufnahme-Konfigurationsoptionen. - -### Eigenschaften - - * **Limit**: die maximale Anzahl von audio-Clips kann Benutzer des Geräts in einem einzigen Capture-Vorgang aufzeichnen. Der Wert muss größer als oder gleich 1 (Standardwert 1). - - * **Dauer**: die maximale Dauer eines audio-sound-Clips, in Sekunden. - -### Beispiel - - // limit capture operation to 3 media files, no longer than 10 seconds each - var options = { limit: 3, duration: 10 }; - - navigator.device.capture.captureAudio(captureSuccess, captureError, options); - - -### Amazon Fire OS Macken - - * Die `duration` Parameter wird nicht unterstützt. Aufnahme Längen kann nicht programmgesteuert begrenzt. - -### Android Eigenarten - - * Die `duration` Parameter wird nicht unterstützt. Aufnahme Längen kann nicht programmgesteuert begrenzt. - -### BlackBerry 10 Macken - - * Die `duration` Parameter wird nicht unterstützt. Aufnahme Längen kann nicht programmgesteuert begrenzt. - * Die `limit` Parameter wird nicht unterstützt, kann also nur eine Aufnahme für jeden Aufruf erstellt werden. - -### iOS Macken - - * Die `limit` Parameter wird nicht unterstützt, kann also nur eine Aufnahme für jeden Aufruf erstellt werden. - -## capture.captureImage - -> Starten Sie die Kameraanwendung und geben Informationen über aufgenommene Bild-Dateien zurück. - - navigator.device.capture.captureImage( - CaptureCB captureSuccess, CaptureErrorCB captureError, [CaptureImageOptions options] - ); - - -### Beschreibung - -Beginnt einen asynchronen Vorgang, um Aufnahmen mit Kamera-Anwendung des Geräts. Die Operation erlaubt Benutzern, mehr als ein Bild in einer einzigen Sitzung zu erfassen. - -Die Capture Betrieb endet, wenn der Benutzer schließt die Kameraanwendung oder die maximale Anzahl der Aufnahmen, die durch `CaptureAudioOptions.limit` angegeben ist erreicht. Wenn `kein Grenzwert` angegeben ist, wird eins (1 standardmaessig) und der Capture-Vorgang beendet nach fängt der Benutzer ein einzelnes Bild. - -Wenn der Capture-Vorgang abgeschlossen ist, ruft es den `CaptureCB`-Rückruf mit einem Array von `MediaFile` Objekten beschreibt jede aufgenommene Bild-Datei. Wenn der Benutzer den Vorgang vor dem Aufzeichnen eines Abbilds beendet wird, führt der `CaptureErrorCB`-Rückruf mit einem `CaptureError`-Objekt mit einem `CaptureError.CAPTURE_NO_MEDIA_FILES`-Fehlercode. - -### Unterstützte Plattformen - - * Amazon Fire OS - * Android - * BlackBerry 10 - * Browser - * iOS - * Windows Phone 7 und 8 - * Windows 8 - * Windows - -### Windows Phone 7 Macken - -Die native Kameraanwendung aufrufen, während Ihr Gerät via Zune angeschlossen ist, funktioniert nicht, und die Fehler-Callback führt. - -### Browser-Eigenheiten - -Arbeitet in Chrome, Firefox und Opera nur (da IE und Safari nicht unterstützt navigator.getUserMedia-API) - -Anzeigen von Bildern mit erfasst nur Datei-URL in Chrome/Opera verfügbar. Firefox speichert die aufgenommenen Bilder in IndexedDB Speicher (siehe Datei-Plugin-Dokumentation), und aus diesem Grund ist die einzige Möglichkeit, aufgenommene Bild zeigen es und zeigen mit ihrer DataURL lesen. - -### Beispiel - - // 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}); - - -## CaptureImageOptions - -> Image Capture-Konfigurationsoptionen kapselt. - -### Eigenschaften - - * **Limit**: die maximale Anzahl der Bilder, die der Benutzer zu, die in einem einzigen Capture-Vorgang erfassen. Der Wert muss größer als oder gleich 1 (Standardwert 1). - -### Beispiel - - // limit capture operation to 3 images - var options = { limit: 3 }; - - navigator.device.capture.captureImage(captureSuccess, captureError, options); - - -### iOS Macken - - * Der **Limit** -Parameter wird nicht unterstützt, und nur ein Bild pro Aufruf stammt. - -## capture.captureVideo - -> Die Videorecorder-Anwendung starten und geben Informationen zu aufgezeichneten video-Clip-Dateien zurück. - - navigator.device.capture.captureVideo( - CaptureCB captureSuccess, CaptureErrorCB captureError, [CaptureVideoOptions options] - ); - - -### Beschreibung - -Beginnt einen asynchronen Vorgang um Videoaufnahmen mit Videoaufzeichnung-Anwendung des Geräts zu erfassen. Die Operation ermöglicht dem Benutzer, mehrere Aufnahmen in einer einzigen Sitzung zu erfassen. - -Der Capture-Vorgang endet, wenn entweder der Benutzer schließt die Anwendung für die Audioaufnahme, oder die maximale Anzahl der Aufnahmen, die von `CaptureAudioOptions.limit` angegebene erreicht ist. Wenn `kein Grenzwert für den Parameter` angegeben ist, wird standardmaessig eins (1) und der Capture-Vorgang beendet, nachdem der Benutzer einen einzelnen video Clip aufgezeichnet. - -Der Capture-Vorgang abgeschlossen ist, führt er der `CaptureCB`-Rückruf mit einem Array von `MediaFile` Objekten beschreibt jede aufgezeichnete video-Clip-Datei. Wenn der Benutzer den Vorgang vor dem Erfassen eines Videoclips beendet wird, führt der `CaptureErrorCB`-Rückruf mit einem `CaptureError`-Objekt mit einem `CaptureError.CAPTURE_NO_MEDIA_FILES`-Fehlercode. - -### Unterstützte Plattformen - - * Amazon Fire OS - * Android - * BlackBerry 10 - * iOS - * Windows Phone 7 und 8 - * Windows 8 - * Windows - -### Beispiel - - // 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}); - - -### BlackBerry 10 Macken - - * Cordova für BlackBerry 10 versucht, **Video-Recorder** Starten der Anwendung, bereitgestellt durch RIM, Videoaufnahmen zu erfassen. Die app erhält eine `CaptureError.CAPTURE_NOT_SUPPORTED` Fehlercode, wenn die Anwendung nicht auf dem Gerät installiert ist. - -## CaptureVideoOptions - -> Video-Capture-Konfigurationsoptionen kapselt. - -### Eigenschaften - - * **Limit**: die maximale Anzahl von video-Clips des Geräts Benutzer kann in einem einzigen Capture-Vorgang erfassen. Der Wert muss größer als oder gleich 1 (Standardwert 1). - - * **Dauer**: die maximale Dauer eines Videoclips in Sekunden. - -### Beispiel - - // limit capture operation to 3 video clips - var options = { limit: 3 }; - - navigator.device.capture.captureVideo(captureSuccess, captureError, options); - - -### BlackBerry 10 Macken - - * Der **Duration** -Parameter wird nicht unterstützt, so dass die Länge der Aufnahmen programmgesteuert nur beschränkt sein kann. - -### iOS Macken - - * Der **Limit** -Parameter wird nicht unterstützt. Pro Aufruf wird nur ein Video aufgezeichnet. - -## CaptureCB - -> Auf eine erfolgreiche Media-Erfassungsvorgangs aufgerufen. - - function captureSuccess( MediaFile[] mediaFiles ) { ... }; - - -### Beschreibung - -Diese Funktion wird ausgeführt, nachdem ein erfolgreiche Capture-Vorgang abgeschlossen ist. An diesem Punkt kann eine Mediendatei erfasst wurden und entweder der Benutzer die Medien-Capture-Anwendung beendet hat oder die Capture-erreicht. - -Jedes `MediaFile`-Objekt beschreibt eine aufgenommenen Medien-Datei. - -### Beispiel - - // capture callback - 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 - } - }; - - -## CaptureError - -> Kapselt den Fehlercode, der infolge eines fehlerhaften Medien-Erfassungsvorgangs. - -### Eigenschaften - - * **Code**: einer der vordefinierten Fehlercodes aufgeführt. - -### Konstanten - - * `CaptureError.CAPTURE_INTERNAL_ERR`: Die Kamera oder das Mikrofon konnte Bild oder Ton zu erfassen. - - * `CaptureError.CAPTURE_APPLICATION_BUSY`: Eine weitere Aufnahme-Anforderung verbüßt die Kamera oder Audio-Capture-Anwendung. - - * `CaptureError.CAPTURE_INVALID_ARGUMENT`: Ungültige Verwendung der API (z. B. den Wert des `limit` ist kleiner als 1). - - * `CaptureError.CAPTURE_NO_MEDIA_FILES`: Der Benutzer wird die Kamera oder Audio-Capture-Anwendung vor Aufnahme alles beendet. - - * `CaptureError.CAPTURE_NOT_SUPPORTED`: Der angeforderte Capture-Vorgang wird nicht unterstützt. - -## CaptureErrorCB - -> Wird aufgerufen, wenn ein Fehler, während eines Medien auftritt. - - function captureError( CaptureError error ) { ... }; - - -### Beschreibung - -Diese Funktion wird ausgeführt, wenn ein Fehler auftritt, wenn Sie versuchen, starten Sie ein Medium capture Betrieb. Fehlerszenarien enthalten, wenn die Sicherungsanwendung beschäftigt, ein Capture-Vorgang ist bereits im Gange, oder der Benutzer den Vorgang abbricht, bevor alle Mediendateien erfasst werden. - -Diese Funktion führt mit einem `CaptureError`-Objekt enthält einen entsprechenden Fehler-`code`. - -### Beispiel - - // capture error callback - var captureError = function(error) { - navigator.notification.alert('Error code: ' + error.code, null, 'Capture Error'); - }; - - -## ConfigurationData - -> Kapselt eine Reihe von Medien-Aufnahme-Parameter, die ein Gerät unterstützt. - -### Beschreibung - -Beschreibt Medien-Aufnahmemodi, die vom Gerät unterstützt. Die Konfigurationsdaten enthält den MIME-Typ und Capture Dimensionen für die Aufnahme von Video- oder Bilddateien. - -Die MIME-Typen sollten [RFC2046](http://www.ietf.org/rfc/rfc2046.txt) einhalten. Beispiele: - - * `video/3gpp` - * `video/quicktime` - * `image/jpeg` - * `audio/amr` - * `audio/wav` - -### Eigenschaften - - * **Typ**: die ASCII-codierte Zeichenfolge aus Kleinbuchstaben, den Medientyp darstellt. (DOM-String und enthält) - - * **Höhe**: die Höhe des Bildes oder Videos in Pixel. Der Wert ist NULL für sound-Clips. (Anzahl) - - * **Breite**: die Breite des Bildes oder Videos in Pixel. Der Wert ist NULL für sound-Clips. (Anzahl) - -### Beispiel - - // retrieve supported image modes - var imageModes = navigator.device.capture.supportedImageModes; - - // Select mode that has the highest horizontal resolution - var width = 0; - var selectedmode; - for each (var mode in imageModes) { - if (mode.width > width) { - width = mode.width; - selectedmode = mode; - } - } - - -Von jeder Plattform unterstützt nicht. Alle Konfigurations-Daten-Arrays sind leer. - -## MediaFile.getFormatData - -> Ruft formatieren Informationen über die Medien-Capture-Datei. - - mediaFile.getFormatData( - MediaFileDataSuccessCB successCallback, - [MediaFileDataErrorCB errorCallback] - ); - - -### Beschreibung - -Diese Funktion versucht asynchron, die Formatierungsinformationen für die Mediendatei abzurufen. Wenn erfolgreich, wird den `MediaFileDataSuccessCB`-Rückruf mit einem `MediaFileData`-Objekt. Wenn dieser Versuch fehlschlägt, ruft diese Funktion den `MediaFileDataErrorCB`-Rückruf. - -### Unterstützte Plattformen - - * Amazon Fire OS - * Android - * BlackBerry 10 - * iOS - * Windows Phone 7 und 8 - * Windows 8 - * Windows - -### Amazon Fire OS Macken - -Die API zum Zugriff Medien Dateiformat-Information ist begrenzt, so dass nicht alle `MediaFileData` Eigenschaften werden unterstützt. - -### BlackBerry 10 Macken - -Bietet keine API Informationen zum Media-Dateien, so dass alle `MediaFileData`-Objekte mit Standardwerten zurück. - -### Android Eigenarten - -Die API zum Zugriff Medien Dateiformat-Information ist begrenzt, so dass nicht alle `MediaFileData` Eigenschaften werden unterstützt. - -### iOS Macken - -Die API zum Zugriff Medien Dateiformat-Information ist begrenzt, so dass nicht alle `MediaFileData` Eigenschaften werden unterstützt. - -## MediaFile - -> Kapselt Eigenschaften einer Mediendatei erfassen. - -### Eigenschaften - - * **Name**: der Name der Datei, ohne Pfadinformationen. (DOM-String und enthält) - - * **FullPath**: der vollständige Pfad der Datei, einschließlich des Namens. (DOM-String und enthält) - - * **Typ**: Mime-Typ der Datei (DOM-String und enthält) - - * **LastModifiedDate**: das Datum und die Uhrzeit wann die Datei zuletzt geändert wurde. (Datum) - - * **Größe**: die Größe der Datei in Byte. (Anzahl) - -### Methoden - - * **MediaFile.getFormatData**: Ruft die Formatierungsinformationen der Mediendatei. - -## MediaFileData - -> Kapselt Formatinformationen zu einer Mediendatei. - -### Eigenschaften - - * **Codecs**: das tatsächliche Format der Audio- und video-Inhalte. (DOM-String und enthält) - - * **Bitrate**: die durchschnittliche Bitrate des Inhalts. Der Wert ist NULL für Bilder. (Anzahl) - - * **Höhe**: die Höhe des Bildes oder Videos in Pixel. Der Wert ist NULL für audio-Clips. (Anzahl) - - * **Breite**: die Breite des Bildes oder Videos in Pixel. Der Wert ist NULL für audio-Clips. (Anzahl) - - * **Dauer**: die Länge des Video- oder Clips in Sekunden. Der Wert ist NULL für Bilder. (Anzahl) - -### BlackBerry 10 Macken - -Keine API bietet Formatierungsinformationen für Mediendateien, so dass das `MediaFileData`-Objekt durch `MediaFile.getFormatData` Features die folgenden Standardwerte zurückgegeben: - - * **Codecs**: nicht unterstützt, und gibt`null`. - - * **Bitrate**: nicht unterstützt, und gibt den Wert NULL. - - * **Höhe**: nicht unterstützt, und gibt den Wert NULL. - - * **Breite**: nicht unterstützt, und gibt den Wert NULL. - - * **Dauer**: nicht unterstützt, und gibt den Wert NULL. - -### Amazon Fire OS Macken - -Unterstützt die folgenden `MediaFileData` Eigenschaften: - - * **Codecs**: nicht unterstützt, und gibt`null`. - - * **Bitrate**: nicht unterstützt, und gibt den Wert NULL. - - * **Höhe**: unterstützt: nur Bild und Video-Dateien. - - * **Breite**: unterstützt: nur Bild und Video-Dateien. - - * **Dauer**: unterstützt: Audio- und video-Dateien nur - -### Android Eigenarten - -Unterstützt die folgenden `MediaFileData` Eigenschaften: - - * **Codecs**: nicht unterstützt, und gibt`null`. - - * **Bitrate**: nicht unterstützt, und gibt den Wert NULL. - - * **Höhe**: unterstützt: nur Bild und Video-Dateien. - - * **Breite**: unterstützt: nur Bild und Video-Dateien. - - * **Dauer**: unterstützt: Audio- und video-Dateien nur. - -### iOS Macken - -Unterstützt die folgenden `MediaFileData` Eigenschaften: - - * **Codecs**: nicht unterstützt, und gibt`null`. - - * **Bitrate**: iOS4 Geräten für nur Audio unterstützt. Gibt 0 (null) für Bilder und Videos. - - * **Höhe**: unterstützt: nur Bild und Video-Dateien. - - * **Breite**: unterstützt: nur Bild und Video-Dateien. - - * **Dauer**: unterstützt: Audio- und video-Dateien nur. \ No newline at end of file diff --git a/doc/de/index.md b/doc/de/index.md deleted file mode 100644 index 325f84bc..00000000 --- a/doc/de/index.md +++ /dev/null @@ -1,551 +0,0 @@ - - -# cordova-plugin-media-capture - -Dieses Plugin ermöglicht den Zugriff auf des Geräts Audio-, Bild- und video-Capture-Funktionen. - -**Warnung**: Erfassung und Verwendung von Bildern, Video oder Audio von Kamera oder das Mikrofon des Geräts wirft wichtige Privatsphäre Fragen. Ihre app-Datenschutzerklärung sollten besprechen, wie die app solche Sensoren verwendet und ob die aufgezeichneten Daten mit irgendwelchen anderen Parteien geteilt werden. Zusätzlich wenn die app-Nutzung der Kamera oder Mikrofon in der Benutzeroberfläche nicht offensichtlich ist, sollten Sie eine just-in-Time Ihnen vorher die app die Kamera oder das Mikrofon zugreift (wenn das Betriebssystem des Geräts bereits tun nicht). Diese Benachrichtigung sollte der gleichen Informationen, die vorstehend, sowie die Zustimmung des Benutzers (z.B. durch Präsentation Entscheidungen für das **OK** und **Nein danke**). Beachten Sie, dass einige app-Marktplätze können Ihre app eine Frist von just-in-Time und Erlaubnis des Benutzers vor dem Zugriff auf die Kamera oder das Mikrofon einholen. Weitere Informationen finden Sie in der Datenschutz-Guide. - -Dieses Plugin wird global `navigator.device.capture`-Objekt definiert. - -Obwohl im globalen Gültigkeitsbereich, steht es nicht bis nach dem `deviceready`-Ereignis. - - document.addEventListener("deviceready", onDeviceReady, false); - function onDeviceReady() { - console.log(navigator.device.capture); - } - - -## Installation - - cordova plugin add cordova-plugin-media-capture - - -## Unterstützte Plattformen - -* Amazon Fire OS -* Android -* BlackBerry 10 -* iOS -* Windows Phone 7 und 8 -* Windows 8 - -## Objekte - -* Erfassen -* CaptureAudioOptions -* CaptureImageOptions -* CaptureVideoOptions -* CaptureCallback -* CaptureErrorCB -* ConfigurationData -* MediaFile -* MediaFileData - -## Methoden - -* capture.captureAudio -* capture.captureImage -* capture.captureVideo -* MediaFile.getFormatData - -## Eigenschaften - -* **SupportedAudioModes**: die Audio-Aufnahme vom Gerät unterstützten Formate. (ConfigurationData[]) - -* **SupportedImageModes**: die Aufnahme Bildgrößen und Formaten, die von dem Gerät unterstützt. (ConfigurationData[]) - -* **SupportedVideoModes**: die Aufnahme Bildschirmauflösungen und Formate, die vom Gerät unterstützt. (ConfigurationData[]) - -## capture.captureAudio - -> Die audio-Recorder-Anwendung starten und geben Informationen über aufgenommene audio-Clip-Dateien zurück. - - navigator.device.capture.captureAudio( - CaptureCB captureSuccess, CaptureErrorCB captureError, [CaptureAudioOptions options] - ); - - -### Beschreibung - -Beginnt einen asynchronen Vorgang, Audioaufnahmen, die audio-Aufnahme-Standardanwendung des Geräts erfassen. Die Operation erlaubt dem Benutzer des Geräts, mehrere Aufnahmen in einer einzigen Sitzung zu erfassen. - -Der Capture-Vorgang endet, wenn entweder der Benutzer schließt die Anwendung für die Audioaufnahme, oder die maximale Anzahl der Aufnahmen, die von `CaptureAudioOptions.limit` angegebene erreicht ist. Wenn `kein Grenzwert für den` Parameter angegeben ist, wird standardmaessig eins (1) und der Capture-Vorgang beendet, nachdem der Benutzer ein einzelnes audio-Clips aufgezeichnet. - -Wenn der Capture-Vorgang abgeschlossen ist, führt die `CaptureCallback` mit einem Array von `MediaFile` Objekten beschreibt jede aufgezeichnete audio-Clip-Datei. Wenn der Benutzer den Vorgang beendet wird, bevor ein Audioclip erfasst wird, führt die `CaptureErrorCallback` mit einem `CaptureError`-Objekt, mit dem Fehlercode `CaptureError.CAPTURE_NO_MEDIA_FILES`. - -### Unterstützte Plattformen - -* Amazon Fire OS -* Android -* BlackBerry 10 -* iOS -* Windows Phone 7 und 8 -* Windows 8 - -### Beispiel - - // 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}); - - -### iOS Macken - -* iOS muss keine Standard-audio-Recording-Anwendung, so dass eine einfache Benutzeroberfläche bereitgestellt wird. - -### Windows Phone 7 und 8 Eigenarten - -* Windows Phone 7 muss keine Standard-audio-Recording-Anwendung, so dass eine einfache Benutzeroberfläche bereitgestellt wird. - -## CaptureAudioOptions - -> Kapselt Audioaufnahme-Konfigurationsoptionen. - -### Eigenschaften - -* **Limit**: die maximale Anzahl von audio-Clips kann Benutzer des Geräts in einem einzigen Capture-Vorgang aufzeichnen. Der Wert muss größer als oder gleich 1 (Standardwert 1). - -* **Dauer**: die maximale Dauer eines audio-sound-Clips, in Sekunden. - -### Beispiel - - // limit capture operation to 3 media files, no longer than 10 seconds each - var options = { limit: 3, duration: 10 }; - - navigator.device.capture.captureAudio(captureSuccess, captureError, options); - - -### Amazon Fire OS Macken - -* Die `duration` Parameter wird nicht unterstützt. Aufnahme Längen kann nicht programmgesteuert begrenzt. - -### Android Eigenarten - -* Die `duration` Parameter wird nicht unterstützt. Aufnahme Längen kann nicht programmgesteuert begrenzt. - -### BlackBerry 10 Macken - -* Die `duration` Parameter wird nicht unterstützt. Aufnahme Längen kann nicht programmgesteuert begrenzt. -* Die `limit` Parameter wird nicht unterstützt, kann also nur eine Aufnahme für jeden Aufruf erstellt werden. - -### iOS Macken - -* Die `limit` Parameter wird nicht unterstützt, kann also nur eine Aufnahme für jeden Aufruf erstellt werden. - -## capture.captureImage - -> Starten Sie die Kameraanwendung und geben Informationen über aufgenommene Bild-Dateien zurück. - - navigator.device.capture.captureImage( - CaptureCB captureSuccess, CaptureErrorCB captureError, [CaptureImageOptions options] - ); - - -### Beschreibung - -Beginnt einen asynchronen Vorgang, um Aufnahmen mit Kamera-Anwendung des Geräts. Die Operation erlaubt Benutzern, mehr als ein Bild in einer einzigen Sitzung zu erfassen. - -Die Capture Betrieb endet, wenn der Benutzer schließt die Kameraanwendung oder die maximale Anzahl der Aufnahmen, die durch `CaptureAudioOptions.limit` angegeben ist erreicht. Wenn `kein Grenzwert` angegeben ist, wird eins (1 standardmaessig) und der Capture-Vorgang beendet nach fängt der Benutzer ein einzelnes Bild. - -Wenn der Capture-Vorgang abgeschlossen ist, ruft es den `CaptureCB`-Rückruf mit einem Array von `MediaFile` Objekten beschreibt jede aufgenommene Bild-Datei. Wenn der Benutzer den Vorgang vor dem Aufzeichnen eines Abbilds beendet wird, führt der `CaptureErrorCB`-Rückruf mit einem `CaptureError`-Objekt mit einem `CaptureError.CAPTURE_NO_MEDIA_FILES`-Fehlercode. - -### Unterstützte Plattformen - -* Amazon Fire OS -* Android -* BlackBerry 10 -* iOS -* Windows Phone 7 und 8 -* Windows 8 - -### Windows Phone 7 Macken - -Die native Kameraanwendung aufrufen, während Ihr Gerät via Zune angeschlossen ist, funktioniert nicht, und die Fehler-Callback führt. - -### Beispiel - - // 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}); - - -## CaptureImageOptions - -> Image Capture-Konfigurationsoptionen kapselt. - -### Eigenschaften - -* **Limit**: die maximale Anzahl der Bilder, die der Benutzer zu, die in einem einzigen Capture-Vorgang erfassen. Der Wert muss größer als oder gleich 1 (Standardwert 1). - -### Beispiel - - // limit capture operation to 3 images - var options = { limit: 3 }; - - navigator.device.capture.captureImage(captureSuccess, captureError, options); - - -### iOS Macken - -* Der **Limit** -Parameter wird nicht unterstützt, und nur ein Bild pro Aufruf stammt. - -## capture.captureVideo - -> Die Videorecorder-Anwendung starten und geben Informationen zu aufgezeichneten video-Clip-Dateien zurück. - - navigator.device.capture.captureVideo( - CaptureCB captureSuccess, CaptureErrorCB captureError, [CaptureVideoOptions options] - ); - - -### Beschreibung - -Beginnt einen asynchronen Vorgang um Videoaufnahmen mit Videoaufzeichnung-Anwendung des Geräts zu erfassen. Die Operation ermöglicht dem Benutzer, mehrere Aufnahmen in einer einzigen Sitzung zu erfassen. - -Der Capture-Vorgang endet, wenn entweder der Benutzer schließt die Anwendung für die Audioaufnahme, oder die maximale Anzahl der Aufnahmen, die von `CaptureAudioOptions.limit` angegebene erreicht ist. Wenn `kein Grenzwert für den Parameter` angegeben ist, wird standardmaessig eins (1) und der Capture-Vorgang beendet, nachdem der Benutzer einen einzelnen video Clip aufgezeichnet. - -Der Capture-Vorgang abgeschlossen ist, führt er der `CaptureCB`-Rückruf mit einem Array von `MediaFile` Objekten beschreibt jede aufgezeichnete video-Clip-Datei. Wenn der Benutzer den Vorgang vor dem Erfassen eines Videoclips beendet wird, führt der `CaptureErrorCB`-Rückruf mit einem `CaptureError`-Objekt mit einem `CaptureError.CAPTURE_NO_MEDIA_FILES`-Fehlercode. - -### Unterstützte Plattformen - -* Amazon Fire OS -* Android -* BlackBerry 10 -* iOS -* Windows Phone 7 und 8 -* Windows 8 - -### Beispiel - - // 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}); - - -### BlackBerry 10 Macken - -* Cordova für BlackBerry 10 versucht, **Video-Recorder** Starten der Anwendung, bereitgestellt durch RIM, Videoaufnahmen zu erfassen. Die app erhält eine `CaptureError.CAPTURE_NOT_SUPPORTED` Fehlercode, wenn die Anwendung nicht auf dem Gerät installiert ist. - -## CaptureVideoOptions - -> Video-Capture-Konfigurationsoptionen kapselt. - -### Eigenschaften - -* **Limit**: die maximale Anzahl von video-Clips des Geräts Benutzer kann in einem einzigen Capture-Vorgang erfassen. Der Wert muss größer als oder gleich 1 (Standardwert 1). - -* **Dauer**: die maximale Dauer eines Videoclips in Sekunden. - -### Beispiel - - // limit capture operation to 3 video clips - var options = { limit: 3 }; - - navigator.device.capture.captureVideo(captureSuccess, captureError, options); - - -### BlackBerry 10 Macken - -* Der **Duration** -Parameter wird nicht unterstützt, so dass die Länge der Aufnahmen programmgesteuert nur beschränkt sein kann. - -### iOS Macken - -* Der **Limit** -Parameter wird nicht unterstützt. Pro Aufruf wird nur ein Video aufgezeichnet. - -## CaptureCB - -> Auf eine erfolgreiche Media-Erfassungsvorgangs aufgerufen. - - function captureSuccess( MediaFile[] mediaFiles ) { ... }; - - -### Beschreibung - -Diese Funktion wird ausgeführt, nachdem ein erfolgreiche Capture-Vorgang abgeschlossen ist. An diesem Punkt kann eine Mediendatei erfasst wurden und entweder der Benutzer die Medien-Capture-Anwendung beendet hat oder die Capture-erreicht. - -Jedes `MediaFile`-Objekt beschreibt eine aufgenommenen Medien-Datei. - -### Beispiel - - // capture callback - 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 - } - }; - - -## CaptureError - -> Kapselt den Fehlercode, der infolge eines fehlerhaften Medien-Erfassungsvorgangs. - -### Eigenschaften - -* **Code**: einer der vordefinierten Fehlercodes aufgeführt. - -### Konstanten - -* `CaptureError.CAPTURE_INTERNAL_ERR`: Die Kamera oder das Mikrofon konnte Bild oder Ton zu erfassen. - -* `CaptureError.CAPTURE_APPLICATION_BUSY`: Eine weitere Aufnahme-Anforderung verbüßt die Kamera oder Audio-Capture-Anwendung. - -* `CaptureError.CAPTURE_INVALID_ARGUMENT`: Ungültige Verwendung der API (z. B. den Wert des `limit` ist kleiner als 1). - -* `CaptureError.CAPTURE_NO_MEDIA_FILES`: Der Benutzer wird die Kamera oder Audio-Capture-Anwendung vor Aufnahme alles beendet. - -* `CaptureError.CAPTURE_NOT_SUPPORTED`: Der angeforderte Capture-Vorgang wird nicht unterstützt. - -## CaptureErrorCB - -> Wird aufgerufen, wenn ein Fehler, während eines Medien auftritt. - - function captureError( CaptureError error ) { ... }; - - -### Beschreibung - -Diese Funktion wird ausgeführt, wenn ein Fehler auftritt, wenn Sie versuchen, starten Sie ein Medium capture Betrieb. Fehlerszenarien enthalten, wenn die Sicherungsanwendung beschäftigt, ein Capture-Vorgang ist bereits im Gange, oder der Benutzer den Vorgang abbricht, bevor alle Mediendateien erfasst werden. - -Diese Funktion führt mit einem `CaptureError`-Objekt enthält einen entsprechenden Fehler-`code`. - -### Beispiel - - // capture error callback - var captureError = function(error) { - navigator.notification.alert('Error code: ' + error.code, null, 'Capture Error'); - }; - - -## ConfigurationData - -> Kapselt eine Reihe von Medien-Aufnahme-Parameter, die ein Gerät unterstützt. - -### Beschreibung - -Beschreibt Medien-Aufnahmemodi, die vom Gerät unterstützt. Die Konfigurationsdaten enthält den MIME-Typ und Capture Dimensionen für die Aufnahme von Video- oder Bilddateien. - -Die MIME-Typen sollten [RFC2046][1] einhalten. Beispiele: - - [1]: http://www.ietf.org/rfc/rfc2046.txt - -* `video/3gpp` -* `video/quicktime` -* `image/jpeg` -* `audio/amr` -* `audio/wav` - -### Eigenschaften - -* **Typ**: die ASCII-codierte Zeichenfolge aus Kleinbuchstaben, den Medientyp darstellt. (DOM-String und enthält) - -* **Höhe**: die Höhe des Bildes oder Videos in Pixel. Der Wert ist NULL für sound-Clips. (Anzahl) - -* **Breite**: die Breite des Bildes oder Videos in Pixel. Der Wert ist NULL für sound-Clips. (Anzahl) - -### Beispiel - - // retrieve supported image modes - var imageModes = navigator.device.capture.supportedImageModes; - - // Select mode that has the highest horizontal resolution - var width = 0; - var selectedmode; - for each (var mode in imageModes) { - if (mode.width > width) { - width = mode.width; - selectedmode = mode; - } - } - - -Von jeder Plattform unterstützt nicht. Alle Konfigurations-Daten-Arrays sind leer. - -## MediaFile.getFormatData - -> Ruft formatieren Informationen über die Medien-Capture-Datei. - - mediaFile.getFormatData( - MediaFileDataSuccessCB successCallback, - [MediaFileDataErrorCB errorCallback] - ); - - -### Beschreibung - -Diese Funktion versucht asynchron, die Formatierungsinformationen für die Mediendatei abzurufen. Wenn erfolgreich, wird den `MediaFileDataSuccessCB`-Rückruf mit einem `MediaFileData`-Objekt. Wenn dieser Versuch fehlschlägt, ruft diese Funktion den `MediaFileDataErrorCB`-Rückruf. - -### Unterstützte Plattformen - -* Amazon Fire OS -* Android -* BlackBerry 10 -* iOS -* Windows Phone 7 und 8 -* Windows 8 - -### Amazon Fire OS Macken - -Die API zum Zugriff Medien Dateiformat-Information ist begrenzt, so dass nicht alle `MediaFileData` Eigenschaften werden unterstützt. - -### BlackBerry 10 Macken - -Bietet keine API Informationen zum Media-Dateien, so dass alle `MediaFileData`-Objekte mit Standardwerten zurück. - -### Android Eigenarten - -Die API zum Zugriff Medien Dateiformat-Information ist begrenzt, so dass nicht alle `MediaFileData` Eigenschaften werden unterstützt. - -### iOS Macken - -Die API zum Zugriff Medien Dateiformat-Information ist begrenzt, so dass nicht alle `MediaFileData` Eigenschaften werden unterstützt. - -## MediaFile - -> Kapselt Eigenschaften einer Mediendatei erfassen. - -### Eigenschaften - -* **Name**: der Name der Datei, ohne Pfadinformationen. (DOM-String und enthält) - -* **FullPath**: der vollständige Pfad der Datei, einschließlich des Namens. (DOM-String und enthält) - -* **Typ**: Mime-Typ der Datei (DOM-String und enthält) - -* **LastModifiedDate**: das Datum und die Uhrzeit wann die Datei zuletzt geändert wurde. (Datum) - -* **Größe**: die Größe der Datei in Byte. (Anzahl) - -### Methoden - -* **MediaFile.getFormatData**: Ruft die Formatierungsinformationen der Mediendatei. - -## MediaFileData - -> Kapselt Formatinformationen zu einer Mediendatei. - -### Eigenschaften - -* **Codecs**: das tatsächliche Format der Audio- und video-Inhalte. (DOM-String und enthält) - -* **Bitrate**: die durchschnittliche Bitrate des Inhalts. Der Wert ist NULL für Bilder. (Anzahl) - -* **Höhe**: die Höhe des Bildes oder Videos in Pixel. Der Wert ist NULL für audio-Clips. (Anzahl) - -* **Breite**: die Breite des Bildes oder Videos in Pixel. Der Wert ist NULL für audio-Clips. (Anzahl) - -* **Dauer**: die Länge des Video- oder Clips in Sekunden. Der Wert ist NULL für Bilder. (Anzahl) - -### BlackBerry 10 Macken - -Keine API bietet Formatierungsinformationen für Mediendateien, so dass das `MediaFileData`-Objekt durch `MediaFile.getFormatData` Features die folgenden Standardwerte zurückgegeben: - -* **Codecs**: nicht unterstützt, und gibt`null`. - -* **Bitrate**: nicht unterstützt, und gibt den Wert NULL. - -* **Höhe**: nicht unterstützt, und gibt den Wert NULL. - -* **Breite**: nicht unterstützt, und gibt den Wert NULL. - -* **Dauer**: nicht unterstützt, und gibt den Wert NULL. - -### Amazon Fire OS Macken - -Unterstützt die folgenden `MediaFileData` Eigenschaften: - -* **Codecs**: nicht unterstützt, und gibt`null`. - -* **Bitrate**: nicht unterstützt, und gibt den Wert NULL. - -* **Höhe**: unterstützt: nur Bild und Video-Dateien. - -* **Breite**: unterstützt: nur Bild und Video-Dateien. - -* **Dauer**: unterstützt: Audio- und video-Dateien nur - -### Android Eigenarten - -Unterstützt die folgenden `MediaFileData` Eigenschaften: - -* **Codecs**: nicht unterstützt, und gibt`null`. - -* **Bitrate**: nicht unterstützt, und gibt den Wert NULL. - -* **Höhe**: unterstützt: nur Bild und Video-Dateien. - -* **Breite**: unterstützt: nur Bild und Video-Dateien. - -* **Dauer**: unterstützt: Audio- und video-Dateien nur. - -### iOS Macken - -Unterstützt die folgenden `MediaFileData` Eigenschaften: - -* **Codecs**: nicht unterstützt, und gibt`null`. - -* **Bitrate**: iOS4 Geräten für nur Audio unterstützt. Gibt 0 (null) für Bilder und Videos. - -* **Höhe**: unterstützt: nur Bild und Video-Dateien. - -* **Breite**: unterstützt: nur Bild und Video-Dateien. - -* **Dauer**: unterstützt: Audio- und video-Dateien nur. diff --git a/doc/es/README.md b/doc/es/README.md deleted file mode 100644 index 72294a7b..00000000 --- a/doc/es/README.md +++ /dev/null @@ -1,562 +0,0 @@ - - -# cordova-plugin-media-capture - -[![Build Status](https://travis-ci.org/apache/cordova-plugin-media-capture.svg)](https://travis-ci.org/apache/cordova-plugin-media-capture) - -Este plugin proporciona acceso a audio, imagen y las capacidades de captura de vídeo del dispositivo. - -**ADVERTENCIA**: recopilación y uso de imágenes, video o audio desde el micrófono o cámara del dispositivo plantea cuestiones de privacidad importante. Política de privacidad de su aplicación debe discutir cómo la aplicación utiliza dichos sensores y si los datos registrados se compartieron con cualquiera de las partes. Además, si el uso de la aplicación de la cámara o el micrófono no es aparente en la interfaz de usuario, debe proporcionar un aviso de just-in-time antes de la aplicación tiene acceso a la cámara o el micrófono (si el sistema operativo del dispositivo ya no hacerlo). Que el aviso debe proporcionar la misma información mencionada, además de obtener un permiso del usuario (por ejemplo, presentando opciones para **Aceptar** y **No gracias**). Tenga en cuenta que algunos mercados de aplicación pueden requerir su aplicación para proporcionar aviso just-in-time y obtener permiso del usuario antes de acceder a la cámara o el micrófono. Para obtener más información, por favor consulte a la guía de privacidad. - -Este plugin define global `navigator.device.capture` objeto. - -Aunque en el ámbito global, no estará disponible hasta después de la `deviceready` evento. - - document.addEventListener("deviceready", onDeviceReady, false); - function onDeviceReady() { - console.log(navigator.device.capture); - } - - -## Instalación - - cordova plugin add cordova-plugin-media-capture - - -## Plataformas soportadas - - * Amazon fire OS - * Android - * BlackBerry 10 - * Explorador - * iOS - * Windows Phone 7 y 8 - * Windows 8 - * Windows - -## Objetos - - * Capture - * CaptureAudioOptions - * CaptureImageOptions - * CaptureVideoOptions - * CaptureCallback - * CaptureErrorCB - * ConfigurationData - * MediaFile - * MediaFileData - -## Métodos - - * capture.captureAudio - * capture.captureImage - * capture.captureVideo - * MediaFile.getFormatData - -## Propiedades - - * **supportedAudioModes**: la grabación de formatos soportados por el dispositivo de audio. (ConfigurationData[]) - - * **supportedImageModes**: los tamaños de imagen de grabación y formatos soportados por el dispositivo. (ConfigurationData[]) - - * **supportedVideoModes**: las resoluciones de grabación de vídeo y formatos soportados por el dispositivo. (ConfigurationData[]) - -## capture.captureAudio - -> Iniciar la aplicación grabadora de audio y devolver información acerca de los archivos capturados clip de audio. - - navigator.device.capture.captureAudio( - CaptureCB captureSuccess, CaptureErrorCB captureError, [CaptureAudioOptions options] - ); - - -### Descripción - -Inicia una operación asincrónica para capturar grabaciones de audio mediante la aplicación de grabación de audio del dispositivo por defecto. La operación permite al usuario del dispositivo capturar varias grabaciones en una sola sesión. - -La operación de captura termina cuando el usuario sale del audio grabación de aplicación, o el número máximo de registros especificado por `CaptureAudioOptions.limit` se alcanza. Si no `limit` se especifica el valor del parámetro, por defecto a uno (1), y la operación de captura termina después de que el usuario registra un solo clip de audio. - -Cuando finaliza la operación de captura, el `CaptureCallback` se ejecuta con una gran variedad de `MediaFile` objetos describiendo cada uno capturado archivo del clip de audio. Si el usuario finaliza la operación antes de que sea capturado un clip de audio, el `CaptureErrorCallback` se ejecuta con un `CaptureError` de objeto, con el `CaptureError.CAPTURE_NO_MEDIA_FILES` código de error. - -### Plataformas soportadas - - * Amazon fire OS - * Android - * BlackBerry 10 - * iOS - * Windows Phone 7 y 8 - * Windows 8 - * Windows - -### Ejemplo - - // 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}); - - -### iOS rarezas - - * iOS no tiene una aplicación de grabación de audio predeterminada, así se proporciona una sencilla interfaz de usuario. - -### Windows Phone 7 y 8 rarezas - - * Windows Phone 7 no tiene una aplicación de grabación de audio predeterminada, así se proporciona una sencilla interfaz de usuario. - -## CaptureAudioOptions - -> Encapsula las opciones de configuración de captura de audio. - -### Propiedades - - * **límite**: el número máximo de clips de audio del usuario del dispositivo puede grabar en una operación de captura individual. El valor debe ser mayor o igual a 1 (por defecto 1). - - * **duración**: la duración máxima de un clip de sonido audio, en segundos. - -### Ejemplo - - // limit capture operation to 3 media files, no longer than 10 seconds each - var options = { limit: 3, duration: 10 }; - - navigator.device.capture.captureAudio(captureSuccess, captureError, options); - - -### Amazon fuego OS rarezas - - * El `duration` no se admite el parámetro. Longitudes de la grabación no puede limitarse mediante programación. - -### Rarezas Android - - * El `duration` no se admite el parámetro. Longitudes de la grabación no puede limitarse mediante programación. - -### BlackBerry 10 rarezas - - * El `duration` no se admite el parámetro. Longitudes de la grabación no puede limitarse mediante programación. - * El `limit` no se admite el parámetro, tan sólo una grabación puede crearse para cada invocación. - -### iOS rarezas - - * El `limit` no se admite el parámetro, tan sólo una grabación puede crearse para cada invocación. - -## capture.captureImage - -> Iniciar una aplicación de cámara y devolver información acerca de los archivos de imagen capturada. - - navigator.device.capture.captureImage( - CaptureCB captureSuccess, CaptureErrorCB captureError, [CaptureImageOptions options] - ); - - -### Descripción - -Inicia una operación asincrónica para capturar imágenes utilizando la aplicación de la cámara del dispositivo. La operación permite a los usuarios capturar más de una imagen en una sola sesión. - -La operación de captura tampoco termina cuando el usuario cierra una aplicación de cámara, o el número máximo de registros especificado por `CaptureAudioOptions.limit` se alcanza. Si no `limit` se especifica el valor por defecto a uno (1) y termina la operación de captura después de que el usuario capta una sola imagen. - -Cuando finaliza la operación de captura, invoca la `CaptureCB` "callback" con una gran variedad de `MediaFile` objetos que describen cada archivo de imagen capturada. Si el usuario finaliza la operación antes de capturar una imagen, la `CaptureErrorCB` devolución de llamada se ejecuta con un `CaptureError` objeto ofrece un `CaptureError.CAPTURE_NO_MEDIA_FILES` código de error. - -### Plataformas soportadas - - * Amazon fire OS - * Android - * BlackBerry 10 - * Explorador - * iOS - * Windows Phone 7 y 8 - * Windows 8 - * Windows - -### Windows Phone 7 rarezas - -Invocando la aplicación de cámara nativa mientras el dispositivo está conectado vía Zune no funciona, y se ejecuta el callback de error. - -### Navegador rarezas - -Funciona en Chrome, Firefox y Opera solamente (desde IE y Safari no es compatible con API navigator.getUserMedia) - -Visualización de imágenes mediante había capturado URL del archivo disponible en cromo/ópera sólo. Firefox almacena imágenes capturadas en IndexedDB almacenamiento (consulte la documentación de archivo plugin), y debido a esto la única manera de mostrar la imagen capturada es leer y mostrar mediante su DataURL. - -### Ejemplo - - // 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}); - - -## CaptureImageOptions - -> Encapsula las opciones de configuración de captura de imagen. - -### Propiedades - - * **límite**: el número máximo de imágenes que el usuario puede capturar en una operación de captura individual. El valor debe ser mayor o igual a 1 (por defecto 1). - -### Ejemplo - - // limit capture operation to 3 images - var options = { limit: 3 }; - - navigator.device.capture.captureImage(captureSuccess, captureError, options); - - -### iOS rarezas - - * No se admite el parámetro **límite** , y sólo una imagen es tomada por invocación. - -## capture.captureVideo - -> Iniciar la aplicación grabadora de vídeo y devolver información acerca de archivos de vídeo capturado. - - navigator.device.capture.captureVideo (CaptureCB captureSuccess, CaptureErrorCB captureError, [CaptureVideoOptions opciones]); - - -### Descripción - -Inicia una operación asincrónica para capturar video grabaciones mediante aplicación de grabación de vídeo del dispositivo. La operación permite al usuario capturar grabaciones de más de una en una sola sesión. - -La operación de captura termina cuando el usuario sale de la aplicación de grabación de vídeo, o el número máximo de registros especificado por `CaptureVideoOptions.limit` se alcanza. Si no `limit` se especifica el valor del parámetro, por defecto a uno (1), y la operación de captura termina después de que el usuario registra un solo clip de video. - -Cuando finaliza la operación de captura, es la `CaptureCB` devolución de llamada se ejecuta con una gran variedad de `MediaFile` objetos describiendo cada uno capturado archivo de videoclip. Si el usuario finaliza la operación antes de capturar un clip de vídeo, el `CaptureErrorCB` devolución de llamada se ejecuta con un `CaptureError` objeto ofrece un `CaptureError.CAPTURE_NO_MEDIA_FILES` código de error. - -### Plataformas soportadas - - * Amazon fire OS - * Android - * BlackBerry 10 - * iOS - * Windows Phone 7 y 8 - * Windows 8 - * Windows - -### Ejemplo - - // 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}); - - -### BlackBerry 10 rarezas - - * Cordova para BlackBerry 10 intentos iniciar la aplicación **Grabadora de Video** , proporcionada por RIM, para capturar las grabaciones de vídeo. La aplicación recibe una `CaptureError.CAPTURE_NOT_SUPPORTED` código de error si la aplicación no está instalada en el dispositivo. - -## CaptureVideoOptions - -> Encapsula las opciones de configuración de captura de vídeo. - -### Propiedades - - * **límite**: la cantidad máxima de usuario del dispositivo puede capturar en una operación sola captura clips de vídeo. El valor debe ser mayor o igual a 1 (por defecto 1). - - * **duración**: la duración máxima de un clip de vídeo, en segundos. - -### Ejemplo - - // limit capture operation to 3 video clips - var options = { limit: 3 }; - - navigator.device.capture.captureVideo(captureSuccess, captureError, options); - - -### BlackBerry 10 rarezas - - * No se admite el parámetro de **duración** , así que la longitud de las grabaciones no puede limitarse mediante programación. - -### iOS rarezas - - * No se admite el parámetro **límite** . Sólo un vídeo se graba por invocación. - -## CaptureCB - -> Se invoca en una operación de captura exitosa de los medios de comunicación. - - function captureSuccess( MediaFile[] mediaFiles ) { ... }; - - -### Descripción - -Esta función se ejecuta después de que finalice una operación de captura exitosa. En este punto que ha sido capturado un archivo multimedia y tampoco el usuario ha salido de la aplicación de captura de los medios de comunicación, o se ha alcanzado el límite de captura. - -Cada `MediaFile` objeto describe un archivo multimedia capturado. - -### Ejemplo - - // capture callback - 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 - } - }; - - -## CaptureError - -> Encapsula el código de error resultante de una operación de captura de medios fallidos. - -### Propiedades - - * **código**: uno de los códigos de error previamente definidos a continuación. - -### Constantes - - * `CaptureError.CAPTURE_INTERNAL_ERR`: La cámara o el micrófono no pudo capturar la imagen y el sonido. - - * `CaptureError.CAPTURE_APPLICATION_BUSY`: La aplicación de captura de audio o cámara está cumpliendo otro pedido de captura. - - * `CaptureError.CAPTURE_INVALID_ARGUMENT`: Uso no válido de la API (por ejemplo, el valor de `limit` es menor que uno). - - * `CaptureError.CAPTURE_NO_MEDIA_FILES`: El usuario sale de la aplicación de captura de audio o cámara antes de capturar cualquier cosa. - - * `CaptureError.CAPTURE_NOT_SUPPORTED`: La operación de captura solicitada no es compatible. - -## CaptureErrorCB - -> Se invoca si se produce un error durante una operación de captura de los medios de comunicación. - - function captureError( CaptureError error ) { ... }; - - -### Descripción - -Esta función se ejecuta si se produce un error al intentar lanzar un medio de captura de operación. Escenarios de fallas incluyen cuando la solicitud de captura está ocupada, una operación de captura ya está llevando a cabo o el usuario cancela la operación antes de que los archivos de los medios de comunicación son capturados. - -Esta función se ejecuta con un `CaptureError` objeto que contiene un error apropiado`code`. - -### Ejemplo - - // capture error callback - var captureError = function(error) { - navigator.notification.alert('Error code: ' + error.code, null, 'Capture Error'); - }; - - -## ConfigurationData - -> Encapsula un conjunto de parámetros de captura de los medios de comunicación un dispositivo compatible. - -### Descripción - -Describe los modos de captura de los medios de comunicación soportados por el dispositivo. Los datos de configuración incluyen el tipo MIME y captura de dimensiones para captura de vídeo o imagen. - -Los tipos MIME deben adherirse a [RFC2046](http://www.ietf.org/rfc/rfc2046.txt). Ejemplos: - - * `video/3gpp` - * `video/quicktime` - * `image/jpeg` - * `audio/amr` - * `audio/wav` - -### Propiedades - - * **tipo**: cadena codificada en el ASCII en minúsculas que representa el tipo de medios de comunicación. (DOMString) - - * **altura**: la altura de la imagen o vídeo en píxeles. El valor es cero para clips de sonido. (Número) - - * **ancho**: el ancho de la imagen o vídeo en píxeles. El valor es cero para clips de sonido. (Número) - -### Ejemplo - - // retrieve supported image modes - var imageModes = navigator.device.capture.supportedImageModes; - - // Select mode that has the highest horizontal resolution - var width = 0; - var selectedmode; - for each (var mode in imageModes) { - if (mode.width > width) { - width = mode.width; - selectedmode = mode; - } - } - - -No compatible con cualquier plataforma. Todas las matrices de datos configuración están vacías. - -## MediaFile.getFormatData - -> El formato recupera información sobre el archivo de captura de los medios de comunicación. - - mediaFile.getFormatData( - MediaFileDataSuccessCB successCallback, - [MediaFileDataErrorCB errorCallback] - ); - - -### Descripción - -Esta función asincrónica intentará recuperar la información de formato para el archivo de los medios de comunicación. Si exitoso, invoca la `MediaFileDataSuccessCB` devolución de llamada con un `MediaFileData` objeto. Si fracasa el intento, esta función invoca el `MediaFileDataErrorCB` "callback". - -### Plataformas soportadas - - * Amazon fire OS - * Android - * BlackBerry 10 - * iOS - * Windows Phone 7 y 8 - * Windows 8 - * Windows - -### Amazon fuego OS rarezas - -La API de acceso a la prensa archivo formato información es limitada, así que no todos `MediaFileData` se admiten las propiedades. - -### BlackBerry 10 rarezas - -No proporciona una API para obtener información sobre los archivos de medios, para que todos `MediaFileData` devolver objetos con valores predeterminados. - -### Rarezas Android - -La API de acceso a la prensa archivo formato información es limitada, así que no todos `MediaFileData` se admiten las propiedades. - -### iOS rarezas - -La API de acceso a la prensa archivo formato información es limitada, así que no todos `MediaFileData` se admiten las propiedades. - -## MediaFile - -> Encapsula las propiedades de un archivo de captura de los medios de comunicación. - -### Propiedades - - * **nombre**: el nombre del archivo, sin información de la ruta. (DOMString) - - * **fullPath**: la ruta de acceso completa del archivo, incluyendo el nombre. (DOMString) - - * **tipo**: tipo mime del archivo (DOMString) - - * **lastModifiedDate**: la fecha y hora cuando el archivo se modificó por última vez. (Fecha) - - * **tamaño**: el tamaño del archivo, en bytes. (Número) - -### Métodos - - * **MediaFile.getFormatData**: recupera la información del formato del archivo de los medios de comunicación. - -## MediaFileData - -> Encapsula la información de formato de un archivo multimedia. - -### Propiedades - - * **codecs**: el actual formato de los contenidos de audio y video. (DOMString) - - * **bitrate**: el bitrate promedio del contenido. El valor es cero para las imágenes. (Número) - - * **altura**: la altura de la imagen o vídeo en píxeles. El valor es cero para los clips de audio. (Número) - - * **ancho**: el ancho de la imagen o vídeo en píxeles. El valor es cero para los clips de audio. (Número) - - * **duración**: la longitud del clip de vídeo o de sonido en segundos. El valor es cero para las imágenes. (Número) - -### BlackBerry 10 rarezas - -Ninguna API proporciona información de formato para archivos de medios, así que el `MediaFileData` objeto devuelto por `MediaFile.getFormatData` cuenta con los siguientes valores predeterminados: - - * **codecs**: no soportado y devuelve`null`. - - * **bitrate**: no soportado y devuelve el valor cero. - - * **altura**: no soportado y devuelve el valor cero. - - * **anchura**: no soportado y devuelve el valor cero. - - * **duración**: no soportado y devuelve el valor cero. - -### Amazon fuego OS rarezas - -Es compatible con los siguientes `MediaFileData` Propiedades: - - * **codecs**: no soportado y devuelve`null`. - - * **bitrate**: no soportado y devuelve el valor cero. - - * **altura**: apoyado: sólo los archivos de imagen y video. - - * **anchura**: admite: sólo los archivos de imagen y video. - - * **duración**: apoyado: archivos audio y video - -### Rarezas Android - -Es compatible con los siguientes `MediaFileData` Propiedades: - - * **codecs**: no soportado y devuelve`null`. - - * **bitrate**: no soportado y devuelve el valor cero. - - * **altura**: apoyado: sólo los archivos de imagen y video. - - * **anchura**: admite: sólo los archivos de imagen y video. - - * **duración**: apoyado: archivos audio y video. - -### iOS rarezas - -Es compatible con los siguientes `MediaFileData` Propiedades: - - * **codecs**: no soportado y devuelve`null`. - - * **bitrate**: compatible con iOS4 dispositivos de audio solamente. Devuelve cero para imágenes y vídeos. - - * **altura**: apoyado: sólo los archivos de imagen y video. - - * **anchura**: admite: sólo los archivos de imagen y video. - - * **duración**: apoyado: archivos audio y video. \ No newline at end of file diff --git a/doc/es/index.md b/doc/es/index.md deleted file mode 100644 index 4d6e7ecb..00000000 --- a/doc/es/index.md +++ /dev/null @@ -1,498 +0,0 @@ - - -# cordova-plugin-media-capture - -Este plugin proporciona acceso a audio, imagen y las capacidades de captura de vídeo del dispositivo. - -**ADVERTENCIA**: recopilación y uso de imágenes, video o audio desde el micrófono o cámara del dispositivo plantea cuestiones de privacidad importante. Política de privacidad de su aplicación debe discutir cómo la aplicación utiliza dichos sensores y si los datos registrados se compartieron con cualquiera de las partes. Además, si el uso de la aplicación de la cámara o el micrófono no es aparente en la interfaz de usuario, debe proporcionar un aviso de just-in-time antes de la aplicación tiene acceso a la cámara o el micrófono (si el sistema operativo del dispositivo ya no hacerlo). Que el aviso debe proporcionar la misma información mencionada, además de obtener un permiso del usuario (por ejemplo, presentando opciones para **Aceptar** y **No gracias**). Tenga en cuenta que algunos mercados de aplicación pueden requerir su aplicación para proporcionar aviso just-in-time y obtener permiso del usuario antes de acceder a la cámara o el micrófono. Para obtener más información, por favor consulte a la guía de privacidad. - -Este plugin define global `navigator.device.capture` objeto. - -Aunque en el ámbito global, no estará disponible hasta después de la `deviceready` evento. - - document.addEventListener ("deviceready", onDeviceReady, false); - function onDeviceReady() {console.log(navigator.device.capture)}; - - -## Instalación - - Cordova plugin añade cordova-plugin-media-captura - - -## Plataformas soportadas - -* Amazon fire OS -* Android -* BlackBerry 10 -* iOS -* Windows Phone 7 y 8 -* Windows 8 - -## Objetos - -* Captura -* CaptureAudioOptions -* CaptureImageOptions -* CaptureVideoOptions -* CaptureCallback -* CaptureErrorCB -* ConfigurationData -* MediaFile -* MediaFileData - -## Métodos - -* capture.captureAudio -* capture.captureImage -* capture.captureVideo -* MediaFile.getFormatData - -## Propiedades - -* **supportedAudioModes**: la grabación de formatos soportados por el dispositivo de audio. (ConfigurationData[]) - -* **supportedImageModes**: los tamaños de imagen de grabación y formatos soportados por el dispositivo. (ConfigurationData[]) - -* **supportedVideoModes**: las resoluciones de grabación de vídeo y formatos soportados por el dispositivo. (ConfigurationData[]) - -## capture.captureAudio - -> Iniciar la aplicación grabadora de audio y devolver información acerca de los archivos capturados clip de audio. - - navigator.device.capture.captureAudio (CaptureCB captureSuccess, CaptureErrorCB captureError, [CaptureAudioOptions opciones]); - - -### Descripción - -Inicia una operación asincrónica para capturar grabaciones de audio mediante la aplicación de grabación de audio del dispositivo por defecto. La operación permite al usuario del dispositivo capturar varias grabaciones en una sola sesión. - -La operación de captura termina cuando el usuario sale del audio grabación de aplicación, o el número máximo de registros especificado por `CaptureAudioOptions.limit` se alcanza. Si no `limit` se especifica el valor del parámetro, por defecto a uno (1), y la operación de captura termina después de que el usuario registra un solo clip de audio. - -Cuando finaliza la operación de captura, el `CaptureCallback` se ejecuta con una gran variedad de `MediaFile` objetos describiendo cada uno capturado archivo del clip de audio. Si el usuario finaliza la operación antes de que sea capturado un clip de audio, el `CaptureErrorCallback` se ejecuta con un `CaptureError` de objeto, con el `CaptureError.CAPTURE_NO_MEDIA_FILES` código de error. - -### Plataformas soportadas - -* Amazon fire OS -* Android -* BlackBerry 10 -* iOS -* Windows Phone 7 y 8 -* Windows 8 - -### Ejemplo - - captura de devolución de llamada var captureSuccess = function(mediaFiles) {var i, camino, len; - para (yo = 0, len = mediaFiles.length; i < len; += 1) {path = mediaFiles[i].fullPath; - hacer algo interesante con el archivo}}; - - capturar error callback var captureError = function(error) {navigator.notification.alert (' código de Error: ' + error.code, null, "Error de captura");}; - - Iniciar captura de audio navigator.device.capture.captureAudio (captureSuccess, captureError, {limit:2}); - - -### iOS rarezas - -* iOS no tiene una aplicación de grabación de audio predeterminada, así se proporciona una sencilla interfaz de usuario. - -### Windows Phone 7 y 8 rarezas - -* Windows Phone 7 no tiene una aplicación de grabación de audio predeterminada, así se proporciona una sencilla interfaz de usuario. - -## CaptureAudioOptions - -> Encapsula las opciones de configuración de captura de audio. - -### Propiedades - -* **límite**: el número máximo de clips de audio del usuario del dispositivo puede grabar en una operación de captura individual. El valor debe ser mayor o igual a 1 (por defecto 1). - -* **duración**: la duración máxima de un clip de sonido audio, en segundos. - -### Ejemplo - - limitar la operación de captura de archivos 3 multimedia, no más de 10 segundos cada opciones var = { limit: 3, duration: 10 }; - - navigator.device.capture.captureAudio (captureSuccess, captureError, opciones); - - -### Amazon fuego OS rarezas - -* El `duration` no se admite el parámetro. Longitudes de la grabación no puede limitarse mediante programación. - -### Rarezas Android - -* El `duration` no se admite el parámetro. Longitudes de la grabación no puede limitarse mediante programación. - -### BlackBerry 10 rarezas - -* El `duration` no se admite el parámetro. Longitudes de la grabación no puede limitarse mediante programación. -* El `limit` no se admite el parámetro, tan sólo una grabación puede crearse para cada invocación. - -### iOS rarezas - -* El `limit` no se admite el parámetro, tan sólo una grabación puede crearse para cada invocación. - -## capture.captureImage - -> Iniciar una aplicación de cámara y devolver información acerca de los archivos de imagen capturada. - - navigator.device.capture.captureImage (CaptureCB captureSuccess, CaptureErrorCB captureError, [CaptureImageOptions opciones]); - - -### Descripción - -Inicia una operación asincrónica para capturar imágenes utilizando la aplicación de la cámara del dispositivo. La operación permite a los usuarios capturar más de una imagen en una sola sesión. - -La operación de captura tampoco termina cuando el usuario cierra una aplicación de cámara, o el número máximo de registros especificado por `CaptureAudioOptions.limit` se alcanza. Si no `limit` se especifica el valor por defecto a uno (1) y termina la operación de captura después de que el usuario capta una sola imagen. - -Cuando finaliza la operación de captura, invoca la `CaptureCB` "callback" con una gran variedad de `MediaFile` objetos que describen cada archivo de imagen capturada. Si el usuario finaliza la operación antes de capturar una imagen, la `CaptureErrorCB` devolución de llamada se ejecuta con un `CaptureError` objeto ofrece un `CaptureError.CAPTURE_NO_MEDIA_FILES` código de error. - -### Plataformas soportadas - -* Amazon fire OS -* Android -* BlackBerry 10 -* iOS -* Windows Phone 7 y 8 -* Windows 8 - -### Windows Phone 7 rarezas - -Invocando la aplicación de cámara nativa mientras el dispositivo está conectado vía Zune no funciona, y se ejecuta el callback de error. - -### Ejemplo - - captura de devolución de llamada var captureSuccess = function(mediaFiles) {var i, camino, len; - para (yo = 0, len = mediaFiles.length; i < len; += 1) {path = mediaFiles[i].fullPath; - hacer algo interesante con el archivo}}; - - capturar error callback var captureError = function(error) {navigator.notification.alert (' código de Error: ' + error.code, null, "Error de captura");}; - - iniciar navigator.device.capture.captureImage de captura de imagen (captureSuccess, captureError, {limit:2}); - - -## CaptureImageOptions - -> Encapsula las opciones de configuración de captura de imagen. - -### Propiedades - -* **límite**: el número máximo de imágenes que el usuario puede capturar en una operación de captura individual. El valor debe ser mayor o igual a 1 (por defecto 1). - -### Ejemplo - - limitar la operación de captura a las opciones de var 3 imágenes = { limit: 3 }; - - navigator.device.capture.captureImage (captureSuccess, captureError, opciones); - - -### iOS rarezas - -* No se admite el parámetro **límite** , y sólo una imagen es tomada por invocación. - -## capture.captureVideo - -> Iniciar la aplicación grabadora de vídeo y devolver información acerca de archivos de vídeo capturado. - - navigator.device.capture.captureVideo (CaptureCB captureSuccess, CaptureErrorCB captureError, [CaptureVideoOptions opciones]); - - -### Descripción - -Inicia una operación asincrónica para capturar video grabaciones mediante aplicación de grabación de vídeo del dispositivo. La operación permite al usuario capturar grabaciones de más de una en una sola sesión. - -La operación de captura termina cuando el usuario sale de la aplicación de grabación de vídeo, o el número máximo de registros especificado por `CaptureVideoOptions.limit` se alcanza. Si no `limit` se especifica el valor del parámetro, por defecto a uno (1), y la operación de captura termina después de que el usuario registra un solo clip de video. - -Cuando finaliza la operación de captura, es la `CaptureCB` devolución de llamada se ejecuta con una gran variedad de `MediaFile` objetos describiendo cada uno capturado archivo de videoclip. Si el usuario finaliza la operación antes de capturar un clip de vídeo, el `CaptureErrorCB` devolución de llamada se ejecuta con un `CaptureError` objeto ofrece un `CaptureError.CAPTURE_NO_MEDIA_FILES` código de error. - -### Plataformas soportadas - -* Amazon fire OS -* Android -* BlackBerry 10 -* iOS -* Windows Phone 7 y 8 -* Windows 8 - -### Ejemplo - - captura de devolución de llamada var captureSuccess = function(mediaFiles) {var i, camino, len; - para (yo = 0, len = mediaFiles.length; i < len; += 1) {path = mediaFiles[i].fullPath; - hacer algo interesante con el archivo}}; - - capturar error callback var captureError = function(error) {navigator.notification.alert (' código de Error: ' + error.code, null, "Error de captura");}; - - iniciar navigator.device.capture.captureVideo de captura de vídeo (captureSuccess, captureError, {limit:2}); - - -### BlackBerry 10 rarezas - -* Cordova para BlackBerry 10 intentos iniciar la aplicación **Grabadora de Video** , proporcionada por RIM, para capturar las grabaciones de vídeo. La aplicación recibe una `CaptureError.CAPTURE_NOT_SUPPORTED` código de error si la aplicación no está instalada en el dispositivo. - -## CaptureVideoOptions - -> Encapsula las opciones de configuración de captura de vídeo. - -### Propiedades - -* **límite**: la cantidad máxima de usuario del dispositivo puede capturar en una operación sola captura clips de vídeo. El valor debe ser mayor o igual a 1 (por defecto 1). - -* **duración**: la duración máxima de un clip de vídeo, en segundos. - -### Ejemplo - - limitar la operación de captura para 3 opciones de vídeo clips var = { limit: 3 }; - - navigator.device.capture.captureVideo (captureSuccess, captureError, opciones); - - -### BlackBerry 10 rarezas - -* No se admite el parámetro de **duración** , así que la longitud de las grabaciones no puede limitarse mediante programación. - -### iOS rarezas - -* No se admite el parámetro **límite** . Sólo un vídeo se graba por invocación. - -## CaptureCB - -> Se invoca en una operación de captura exitosa de los medios de comunicación. - - la función { ... } captureSuccess (MediaFile [] mediaFiles); - - -### Descripción - -Esta función se ejecuta después de que finalice una operación de captura exitosa. En este punto que ha sido capturado un archivo multimedia y tampoco el usuario ha salido de la aplicación de captura de los medios de comunicación, o se ha alcanzado el límite de captura. - -Cada `MediaFile` objeto describe un archivo multimedia capturado. - -### Ejemplo - - captura de devolución de llamada función captureSuccess(mediaFiles) {var i, camino, len; - para (yo = 0, len = mediaFiles.length; i < len; += 1) {path = mediaFiles[i].fullPath; - hacer algo interesante con el archivo}}; - - -## CaptureError - -> Encapsula el código de error resultante de una operación de captura de medios fallidos. - -### Propiedades - -* **código**: uno de los códigos de error previamente definidos a continuación. - -### Constantes - -* `CaptureError.CAPTURE_INTERNAL_ERR`: La cámara o el micrófono no pudo capturar la imagen y el sonido. - -* `CaptureError.CAPTURE_APPLICATION_BUSY`: La aplicación de captura de audio o cámara está cumpliendo otro pedido de captura. - -* `CaptureError.CAPTURE_INVALID_ARGUMENT`: Uso no válido de la API (por ejemplo, el valor de `limit` es menor que uno). - -* `CaptureError.CAPTURE_NO_MEDIA_FILES`: El usuario sale de la aplicación de captura de audio o cámara antes de capturar cualquier cosa. - -* `CaptureError.CAPTURE_NOT_SUPPORTED`: La operación de captura solicitada no es compatible. - -## CaptureErrorCB - -> Se invoca si se produce un error durante una operación de captura de los medios de comunicación. - - función { ... } captureError (error CaptureError); - - -### Descripción - -Esta función se ejecuta si se produce un error al intentar lanzar un medio de captura de operación. Escenarios de fallas incluyen cuando la solicitud de captura está ocupada, una operación de captura ya está llevando a cabo o el usuario cancela la operación antes de que los archivos de los medios de comunicación son capturados. - -Esta función se ejecuta con un `CaptureError` objeto que contiene un error apropiado`code`. - -### Ejemplo - - capturar error callback var captureError = function(error) {navigator.notification.alert (' código de Error: ' + error.code, null, "Error de captura");}; - - -## ConfigurationData - -> Encapsula un conjunto de parámetros de captura de los medios de comunicación un dispositivo compatible. - -### Descripción - -Describe los modos de captura de los medios de comunicación soportados por el dispositivo. Los datos de configuración incluyen el tipo MIME y captura de dimensiones para captura de vídeo o imagen. - -Los tipos MIME deben adherirse a [RFC2046][1]. Ejemplos: - - [1]: http://www.ietf.org/rfc/rfc2046.txt - -* `video/3gpp` -* `video/quicktime` -* `image/jpeg` -* `audio/amr` -* `audio/wav` - -### Propiedades - -* **tipo**: cadena codificada en el ASCII en minúsculas que representa el tipo de medios de comunicación. (DOMString) - -* **altura**: la altura de la imagen o vídeo en píxeles. El valor es cero para clips de sonido. (Número) - -* **ancho**: el ancho de la imagen o vídeo en píxeles. El valor es cero para clips de sonido. (Número) - -### Ejemplo - - recuperar apoyada imagen modos var imageModes = navigator.device.capture.supportedImageModes; - - Seleccione el modo que tiene la más alta resolución horizontal var = 0; - var selectedmode; - para cada (modo var en imageModes) {si (mode.width > anchura) {ancho = mode.width; - selectedmode = modo; - } - } - - -No compatible con cualquier plataforma. Todas las matrices de datos configuración están vacías. - -## MediaFile.getFormatData - -> El formato recupera información sobre el archivo de captura de los medios de comunicación. - - mediaFile.getFormatData (MediaFileDataSuccessCB successCallback, [MediaFileDataErrorCB errorCallback]); - - -### Descripción - -Esta función asincrónica intentará recuperar la información de formato para el archivo de los medios de comunicación. Si exitoso, invoca la `MediaFileDataSuccessCB` devolución de llamada con un `MediaFileData` objeto. Si fracasa el intento, esta función invoca el `MediaFileDataErrorCB` "callback". - -### Plataformas soportadas - -* Amazon fire OS -* Android -* BlackBerry 10 -* iOS -* Windows Phone 7 y 8 -* Windows 8 - -### Amazon fuego OS rarezas - -La API de acceso a la prensa archivo formato información es limitada, así que no todos `MediaFileData` se admiten las propiedades. - -### BlackBerry 10 rarezas - -No proporciona una API para obtener información sobre los archivos de medios, para que todos `MediaFileData` devolver objetos con valores predeterminados. - -### Rarezas Android - -La API de acceso a la prensa archivo formato información es limitada, así que no todos `MediaFileData` se admiten las propiedades. - -### iOS rarezas - -La API de acceso a la prensa archivo formato información es limitada, así que no todos `MediaFileData` se admiten las propiedades. - -## MediaFile - -> Encapsula las propiedades de un archivo de captura de los medios de comunicación. - -### Propiedades - -* **nombre**: el nombre del archivo, sin información de la ruta. (DOMString) - -* **fullPath**: la ruta de acceso completa del archivo, incluyendo el nombre. (DOMString) - -* **tipo**: tipo mime del archivo (DOMString) - -* **lastModifiedDate**: la fecha y hora cuando el archivo se modificó por última vez. (Fecha) - -* **tamaño**: el tamaño del archivo, en bytes. (Número) - -### Métodos - -* **MediaFile.getFormatData**: recupera la información del formato del archivo de los medios de comunicación. - -## MediaFileData - -> Encapsula la información de formato de un archivo multimedia. - -### Propiedades - -* **codecs**: el actual formato de los contenidos de audio y video. (DOMString) - -* **bitrate**: el bitrate promedio del contenido. El valor es cero para las imágenes. (Número) - -* **altura**: la altura de la imagen o vídeo en píxeles. El valor es cero para los clips de audio. (Número) - -* **ancho**: el ancho de la imagen o vídeo en píxeles. El valor es cero para los clips de audio. (Número) - -* **duración**: la longitud del clip de vídeo o de sonido en segundos. El valor es cero para las imágenes. (Número) - -### BlackBerry 10 rarezas - -Ninguna API proporciona información de formato para archivos de medios, así que el `MediaFileData` objeto devuelto por `MediaFile.getFormatData` cuenta con los siguientes valores predeterminados: - -* **codecs**: no soportado y devuelve`null`. - -* **bitrate**: no soportado y devuelve el valor cero. - -* **altura**: no soportado y devuelve el valor cero. - -* **anchura**: no soportado y devuelve el valor cero. - -* **duración**: no soportado y devuelve el valor cero. - -### Amazon fuego OS rarezas - -Es compatible con los siguientes `MediaFileData` Propiedades: - -* **codecs**: no soportado y devuelve`null`. - -* **bitrate**: no soportado y devuelve el valor cero. - -* **altura**: apoyado: sólo los archivos de imagen y video. - -* **anchura**: admite: sólo los archivos de imagen y video. - -* **duración**: apoyado: archivos audio y video - -### Rarezas Android - -Es compatible con los siguientes `MediaFileData` Propiedades: - -* **codecs**: no soportado y devuelve`null`. - -* **bitrate**: no soportado y devuelve el valor cero. - -* **altura**: apoyado: sólo los archivos de imagen y video. - -* **anchura**: admite: sólo los archivos de imagen y video. - -* **duración**: apoyado: archivos audio y video. - -### iOS rarezas - -Es compatible con los siguientes `MediaFileData` Propiedades: - -* **codecs**: no soportado y devuelve`null`. - -* **bitrate**: compatible con iOS4 dispositivos de audio solamente. Devuelve cero para imágenes y vídeos. - -* **altura**: apoyado: sólo los archivos de imagen y video. - -* **anchura**: admite: sólo los archivos de imagen y video. - -* **duración**: apoyado: archivos audio y video. diff --git a/doc/fr/README.md b/doc/fr/README.md deleted file mode 100644 index 47afd671..00000000 --- a/doc/fr/README.md +++ /dev/null @@ -1,526 +0,0 @@ - - -# cordova-plugin-media-capture - -[![Build Status](https://travis-ci.org/apache/cordova-plugin-media-capture.svg)](https://travis-ci.org/apache/cordova-plugin-media-capture) - -Ce plugin permet d'accéder à de l'appareil audio, image et capacités de capture vidéo. - -**Avertissement**: collecte et utilisation des images, vidéo ou audio de la caméra ou un microphone de l'appareil soulève des questions importantes de la vie privée. La politique de confidentialité de votre application devrait traiter de la manière dont l'application utilise ces capteurs et du partage des données enregistrées avec d'autres parties ou non. En outre, si l'utilisation de l'application de la caméra ou un microphone n'est pas apparente dans l'interface utilisateur, vous devez fournir un avis juste-à-temps, avant que l'application accède à la caméra ou un microphone (si le système d'exploitation de périphérique n'est pas faire déjà). Cette notice devrait contenir les informations susmentionnées, ainsi que permettre de recueillir l'autorisation de l'utilisateur (par exemple, en offrant les possibilités **OK** et **Non merci**). Notez que certains magasins d'applications peuvent exiger la présence de ce genre de notice avant d'autoriser la distribution de votre application. Pour plus d'informations, veuillez vous référer à la section "Guide du respect de la vie privée". - -Ce plugin définit global `navigator.device.capture` objet. - -Bien que dans la portée globale, il n'est pas disponible jusqu'après la `deviceready` événement. - - document.addEventListener (« deviceready », onDeviceReady, false) ; - function onDeviceReady() {console.log(navigator.device.capture);} - - -## Installation - - cordova plugin add cordova-plugin-media-capture - - -## Plates-formes supportées - - * Amazon Fire OS - * Android - * BlackBerry 10 - * Navigateur - * iOS - * Windows Phone 7 et 8 - * Windows 8 - * Windows - -## Objets - - * Capture - * CaptureAudioOptions - * CaptureImageOptions - * CaptureVideoOptions - * CaptureCallback - * CaptureErrorCB - * ConfigurationData - * MediaFile - * MediaFileData - -## Méthodes - - * capture.captureAudio - * capture.captureImage - * capture.captureVideo - * MediaFile.getFormatData - -## Propriétés - - * **supportedAudioModes** : les formats d'enregistrement audio supportés par l'appareil. (ConfigurationData[]) - - * **supportedImageModes** : les formats et tailles de capture d'image supportés par l'appareil. (ConfigurationData[]) - - * **supportedVideoModes**: les formats et résolutions d'enregistrement vidéo supportés par l'appareil. (ConfigurationData[]) - -## capture.captureAudio - -> Ouvre l'application enregistreur audio et fournit des informations sur les fichiers audio capturés. - - navigator.device.capture.captureAudio (CaptureCB captureSuccess, CaptureErrorCB captureError, [CaptureAudioOptions options]) ; - - -### Description - -Commence une opération asynchrone pour capturer les enregistrements audio à l'aide d'application d'enregistrement audio de l'appareil par défaut. L'opération permet à l'utilisateur de l'appareil capturer des enregistrements multiples en une seule séance. - -L'opération de capture se termine lorsque l'utilisateur quitte l'enregistrement demande, ou le nombre maximal d'enregistrements spécifié par audio `CaptureAudioOptions.limit` est atteinte. Si aucun `limit` valeur du paramètre est spécifiée, par défaut à un (1), et l'opération de capture se termine après que l'utilisateur enregistre un clip audio unique. - -Fin de l'opération de capture, le `CaptureCallback` s'exécute avec un tableau de `MediaFile` objets décrivant chacune capturé fichiers clip audio. Si l'utilisateur annule l'opération avant un clip audio est capturé, le `CaptureErrorCallback` s'exécute avec un objet `CaptureError`, mettant en vedette le code d'erreur `CaptureError.CAPTURE_NO_MEDIA_FILES`. - -### Plates-formes supportées - - * Amazon Fire OS - * Android - * BlackBerry 10 - * iOS - * Windows Phone 7 et 8 - * Windows 8 - * Windows - -### Exemple - - // 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}); - - -### Notes au sujet d'iOS - - * iOS n'a pas une application d'enregistrement audio par défaut, donc une interface utilisateur simple est fournie. - -### Notes au sujet de Windows Phone 7 et 8 - - * Windows Phone 7 n'a pas une application d'enregistrement audio par défaut, donc une interface utilisateur simple est fournie. - -## CaptureAudioOptions - -> Encapsule les options de configuration de capture audio. - -### Propriétés - - * **limite**: le nombre maximal de clips audio, l'utilisateur de l'appareil permet d'enregistrer dans une opération de capture unique. La valeur doit être supérieure ou égale à 1 (1 par défaut). - - * **durée**: la durée maximale d'un clip sonore audio, en quelques secondes. - -### Exemple - - // limit capture operation to 3 media files, no longer than 10 seconds each - var options = { limit: 3, duration: 10 }; - - navigator.device.capture.captureAudio(captureSuccess, captureError, options); - - -### Amazon Fire OS Quirks - - * Le `duration` paramètre n'est pas pris en charge. Longueurs d'enregistrement ne peut être limitée par programme. - -### Quirks Android - - * Le `duration` paramètre n'est pas pris en charge. Longueurs d'enregistrement ne peut être limitée par programme. - -### BlackBerry 10 Quirks - - * Le `duration` paramètre n'est pas pris en charge. Longueurs d'enregistrement ne peut être limitée par programme. - * Le `limit` paramètre n'est pas pris en charge, ainsi qu'un enregistrement peut être créée pour chaque appel. - -### Notes au sujet d'iOS - - * Le `limit` paramètre n'est pas pris en charge, ainsi qu'un enregistrement peut être créée pour chaque appel. - -## capture.captureImage - -> Ouvre l'application appareil photo et fournit des informations sur les fichiers image capturés. - - navigator.device.capture.captureImage( - CaptureCB captureSuccess, CaptureErrorCB captureError, [CaptureImageOptions options] - ); - - -### Description - -Commence une opération asynchrone pour capturer des images à l'aide d'application caméra de l'appareil. L'opération permet aux utilisateurs de capturer plusieurs images en une seule séance. - -Les extrémités d'opération de capture lorsque l'utilisateur ferme l'application appareil photo, ou le nombre maximal d'enregistrements spécifié par `CaptureAudioOptions.limit` est atteint. Si aucune valeur `limit` n'est spécifiée, par défaut à un (1), et l'opération de capture s'arrête après l'utilisateur restitue une image unique. - -Lorsque l'opération de capture terminée, elle appelle le `CaptureCB` rappel avec un tableau de `MediaFile` objets décrivant chaque fichier de l'image capturée. Si l'utilisateur annule l'opération avant la capture d'une image, la `CaptureErrorCB` rappel s'exécute avec un `CaptureError` objet mettant en vedette un `CaptureError.CAPTURE_NO_MEDIA_FILES` code d'erreur. - -### Plates-formes supportées - - * Amazon Fire OS - * Android - * BlackBerry 10 - * Navigateur - * iOS - * Windows Phone 7 et 8 - * Windows 8 - * Windows - -### Windows Phone 7 Quirks - -Invoquant l'application native caméra alors que votre appareil est connecté via Zune ne fonctionne pas, et exécute le rappel de l'erreur. - -### Bizarreries navigateur - -Fonctionne en Chrome, Firefox et Opera seulement (puisque IE et Safari ne prend en charge les API navigator.getUserMedia) - -Affichage d'images à l'aide de capturé seulement URL du fichier disponible en Chrome/Opera. Firefox stocke les images capturées dans stockage IndexedDB (voir fichier plugin documentation), et à cause de cela, le seul moyen de montrer l'image capturée est à lire et voir l'à l'aide de ses DataURL. - -### Exemple - - capture de rappel var captureSuccess = function(mediaFiles) {var i, chemin, len ; - pour (i = 0, len = mediaFiles.length; i < len ; j'ai += 1) {chemin d'accès = mediaFiles[i].fullPath ; - faire quelque chose d'intéressant avec le fichier}} ; - - capturer l'erreur rappel var captureError = function(error) {navigator.notification.alert (' code d'erreur: ' + error.code, null, « Capture Error »);} ; - - démarrer l'image capture navigator.device.capture.captureImage (captureSuccess, captureError, {limit:2}) ; - - -## CaptureImageOptions - -> Encapsule les options de configuration de capture d'image. - -### Propriétés - - * **limite**: le nombre maximum d'images, l'utilisateur peut saisir dans une opération de capture unique. La valeur doit être supérieure ou égale à 1 (1 par défaut). - -### Exemple - - limiter l'opération de capture aux options de 3 images var = { limit: 3 } ; - - navigator.device.capture.captureImage (captureSuccess, captureError, options) ; - - -### Notes au sujet d'iOS - - * Le paramètre **limit** n'est pas pris en charge, et qu'une image est prise par l'invocation. - -## capture.captureVideo - -> Ouvre l'application enregistreur vidéo et fournit des informations sur les clips vidéo capturés. - - navigator.device.capture.captureVideo (CaptureCB captureSuccess, CaptureErrorCB captureError, [CaptureVideoOptions options]) ; - - -### Description - -Commence une opération asynchrone pour capturer des enregistrements vidéo à l'aide de la demande d'enregistrement vidéo de l'appareil. L'opération permet à l'utilisateur de capturer plusieurs enregistrements en une seule séance. - -L'opération de capture se termine lorsque l'utilisateur quitte l'application de l'enregistrement vidéo, ou le nombre maximal d'enregistrements spécifié par `CaptureVideoOptions.limit` est atteinte. Si aucun `limit` valeur du paramètre est spécifiée, par défaut à un (1), et l'opération de capture se termine après que l'utilisateur enregistre un clip vidéo unique. - -Fin de l'opération de capture, il le `CaptureCB` rappel s'exécute avec un tableau de `MediaFile` objets décrivant chacune capturé clip vidéo. Si l'utilisateur annule l'opération avant la capture d'un clip vidéo, le `CaptureErrorCB` rappel s'exécute avec un `CaptureError` objet mettant en vedette un `CaptureError.CAPTURE_NO_MEDIA_FILES` code d'erreur. - -### Plates-formes supportées - - * Amazon Fire OS - * Android - * BlackBerry 10 - * iOS - * Windows Phone 7 et 8 - * Windows 8 - * Windows - -### Exemple - - capture de rappel var captureSuccess = function(mediaFiles) {var i, chemin, len ; - pour (i = 0, len = mediaFiles.length; i < len ; j'ai += 1) {chemin d'accès = mediaFiles[i].fullPath ; - faire quelque chose d'intéressant avec le fichier}} ; - - capturer l'erreur rappel var captureError = function(error) {navigator.notification.alert (' code d'erreur: ' + error.code, null, « Capture Error »);} ; - - démarrer la capture vidéo navigator.device.capture.captureVideo (captureSuccess, captureError, {limit:2}) ; - - -### BlackBerry 10 Quirks - - * Cordova pour BlackBerry 10 essaie de lancer l'application **Enregistreur vidéo** , fournie par RIM, pour capturer les enregistrements vidéo. L'application reçoit un `CaptureError.CAPTURE_NOT_SUPPORTED` code d'erreur si l'application n'est pas installée sur l'appareil. - -## CaptureVideoOptions - -> Encapsule les options de configuration de capture vidéo. - -### Propriétés - - * **limite**: le nombre maximal de clips vidéo, utilisateur de l'appareil peut capturer dans une opération de capture unique. La valeur doit être supérieure ou égale à 1 (1 par défaut). - - * **durée**: la durée maximale d'un clip vidéo, en quelques secondes. - -### Exemple - - limiter l'opération de capture de 3 options de clips vidéo var = { limit: 3 } ; - - navigator.device.capture.captureVideo (captureSuccess, captureError, options) ; - - -### BlackBerry 10 Quirks - - * Le paramètre de **durée** n'est pas supporté, donc la longueur des enregistrements ne peut pas être limitée par programme. - -### Notes au sujet d'iOS - - * Le paramètre **limit** n'est pas pris en charge. Qu'une vidéo est enregistrée par l'invocation. - -## CaptureCB - -> Fonction appelée lors d'une opération de capture de médias réussie. - - fonction captureSuccess (MediaFile [] mediaFiles) { ... } ; - - -### Description - -Cette fonction s'exécute après qu'une opération de capture réussie est terminée. À ce point qu'un fichier multimédia a été capturé et soit l'utilisateur a quitté l'application capture de média, ou la limite de capture a été atteinte. - -Chaque `MediaFile` objet décrit un fichier multimédia capturés. - -### Exemple - - capturer callback function captureSuccess(mediaFiles) {var i, chemin, len ; - pour (i = 0, len = mediaFiles.length; i < len ; j'ai += 1) {chemin d'accès = mediaFiles[i].fullPath ; - faire quelque chose d'intéressant avec le fichier}} ; - - -## CaptureError - -> Encapsule le code d'erreur résultant d'une opération de capture de médias ayant échoué. - -### Propriétés - - * **code**: un des codes d'erreur prédéfinis énumérés ci-dessous. - -### Constantes - - * `CaptureError.CAPTURE_INTERNAL_ERR`: La caméra ou un microphone a échoué à capturer l'image ou le son. - - * `CaptureError.CAPTURE_APPLICATION_BUSY`: L'application de capture caméra / audio est actuellement une autre demande de capture. - - * `CaptureError.CAPTURE_INVALID_ARGUMENT`: Utilisation incorrecte de l'API (par exemple, la valeur de `limit` est inférieur à 1). - - * `CaptureError.CAPTURE_NO_MEDIA_FILES`: L'utilisateur quitte l'application capture audio ou de la caméra avant de capturer n'importe quoi. - - * `CaptureError.CAPTURE_NOT_SUPPORTED`: L'opération de capture demandée n'est pas pris en charge. - -## CaptureErrorCB - -> Fonction callback appelée si une erreur se produit pendant une opération de capture de médias. - - function captureError (erreur CaptureError) { ... } ; - - -### Description - -Cette fonction s'exécute si une erreur se produit lorsque vous essayez de lancer un média opération de capture. Scénarios de défaillance incluent lors de l'application capture est occupée, une opération de capture est déjà en cours, ou l'utilisateur annule l'opération avant que tous les fichiers multimédias sont capturés. - -Cette fonction s'exécute avec un `CaptureError` objet contenant une erreur appropriée`code`. - -### Exemple - - capturer l'erreur rappel var captureError = function(error) {navigator.notification.alert (' code d'erreur: ' + error.code, null, « Capture Error »);} ; - - -## ConfigurationData - -> Encapsule un ensemble de paramètres de capture de médias pris en charge par un appareil. - -### Description - -Décrit les modes de capture de média pris en charge par le périphérique. Les données de configuration incluent le type MIME et dimensions de capture pour la capture vidéo ou image. - -[RFC2046](http://www.ietf.org/rfc/rfc2046.txt)devraient respecter les types MIME. Exemples : - - * `video/3gpp` - * `video/quicktime` - * `image/jpeg` - * `audio/amr` - * `audio/wav` - -### Propriétés - - * **type**: The ASCII encodée en chaîne minuscule qui représente le type de média. (DOMString) - - * **hauteur**: la hauteur de l'image ou la vidéo en pixels. La valeur est zéro pour les extraits sonores. (Nombre) - - * **largeur**: la largeur de l'image ou la vidéo en pixels. La valeur est zéro pour les extraits sonores. (Nombre) - -### Exemple - - prise en charge de récupérer image modes var imageModes = navigator.device.capture.supportedImageModes ; - - Sélectionnez le mode qui a la plus haute résolution horizontale var largeur = 0 ; - var selectedmode ; - pour chaque (mode var imageModes) {si (mode.width > largeur) {largeur = mode.width ; - selectedmode = mode ; - } - } - - -Pas pris en charge par n'importe quelle plateforme. Tous les tableaux de données de configuration sont vides. - -## MediaFile.getFormatData - -> Récupère des informations sur le format du fichier média capturé. - - mediaFile.getFormatData( - MediaFileDataSuccessCB successCallback, - [MediaFileDataErrorCB errorCallback] - ); - - -### Description - -Cette fonction de façon asynchrone tente de récupérer les informations de format pour le fichier multimédia. S'il réussit, il appelle le rappel de `MediaFileDataSuccessCB` avec un objet `MediaFileData`. Si la tentative échoue, cette fonction appelle le rappel de `MediaFileDataErrorCB`. - -### Plates-formes supportées - - * Amazon Fire OS - * Android - * BlackBerry 10 - * iOS - * Windows Phone 7 et 8 - * Windows 8 - * Windows - -### Amazon Fire OS Quirks - -L'API pour accéder aux médias file format informations est limité, donc pas tous les `MediaFileData` propriétés sont prises en charge. - -### BlackBerry 10 Quirks - -Ne fournit pas une API pour plus d'informations sur les fichiers de médias, tous les objets de `MediaFileData` de retour avec les valeurs par défaut. - -### Quirks Android - -L'API pour accéder aux médias file format informations est limité, donc pas tous les `MediaFileData` propriétés sont prises en charge. - -### Notes au sujet d'iOS - -L'API pour accéder aux médias file format informations est limité, donc pas tous les `MediaFileData` propriétés sont prises en charge. - -## MediaFile - -> Encapsule les propriétés d'un fichier média capturé. - -### Propriétés - - * **nom**: le nom du fichier, sans le chemin d'accès. (DOMString) - - * **fullPath**: le chemin d'accès complet du fichier, y compris le nom. (DOMString) - - * **type**: type de mime du fichier (DOMString) - - * **lastModifiedDate**: la date et l'heure lorsque le fichier a été modifié. (Date) - - * **taille**: la taille du fichier, en octets. (Nombre) - -### Méthodes - - * **MediaFile.getFormatData**: récupère les informations sur le format du fichier multimédia. - -## MediaFileData - -> Encapsule des informations de format d'un fichier média. - -### Propriétés - - * **codecs**: le format réel du contenu audio et vidéo. (DOMString) - - * **débit**: le débit moyen du contenu. La valeur est égale à zéro pour les images. (Nombre) - - * **hauteur**: la hauteur de l'image ou la vidéo en pixels. La valeur est égale à zéro pour des clips audio. (Nombre) - - * **largeur**: la largeur de l'image ou la vidéo en pixels. La valeur est égale à zéro pour des clips audio. (Nombre) - - * **durée**: la durée du clip vidéo ou audio en quelques secondes. La valeur est égale à zéro pour les images. (Nombre) - -### BlackBerry 10 Quirks - -Aucune API ne fournit des informations sur le format des fichiers multimédias, donc l'objet de `MediaFileData` retourné par `MediaFile.getFormatData` caractéristiques les valeurs par défaut suivantes : - - * **codecs** : propriété non prise en charge, sa valeur est `null`. - - * **bitrate** : propriété non prise en charge, sa valeur est zéro. - - * **hauteur**: pas pris en charge et retourne la valeur zéro. - - * **largeur**: non pris en charge et retourne la valeur zéro. - - * **durée**: non pris en charge et retourne la valeur zéro. - -### Amazon Fire OS Quirks - -Prend en charge ce qui suit `MediaFileData` Propriétés : - - * **codecs** : propriété non prise en charge, sa valeur est `null`. - - * **bitrate** : propriété non prise en charge, sa valeur est zéro. - - * **height** : propriété prise en charge seulement pour les fichiers image et vidéo. - - * **width** : propriété prise en charge seulement pour les fichiers image et vidéo. - - * **durée**: prise en charge : seuls les fichiers audio et vidéo - -### Quirks Android - -Prend en charge ce qui suit `MediaFileData` Propriétés : - - * **codecs** : propriété non prise en charge, sa valeur est `null`. - - * **bitrate** : propriété non prise en charge, sa valeur est zéro. - - * **height** : propriété prise en charge seulement pour les fichiers image et vidéo. - - * **width** : propriété prise en charge seulement pour les fichiers image et vidéo. - - * **duration** : propriété prise en charge seulement pour les fichiers audio et vidéo. - -### Notes au sujet d'iOS - -Prend en charge ce qui suit `MediaFileData` Propriétés : - - * **codecs** : propriété non prise en charge, sa valeur est `null`. - - * **Bitrate**: pris en charge sur les périphériques d'iOS4 pour l'audio uniquement. Renvoie zéro pour les images et vidéos. - - * **height** : propriété prise en charge seulement pour les fichiers image et vidéo. - - * **width** : propriété prise en charge seulement pour les fichiers image et vidéo. - - * **duration** : propriété prise en charge seulement pour les fichiers audio et vidéo. \ No newline at end of file diff --git a/doc/fr/index.md b/doc/fr/index.md deleted file mode 100644 index 8378047c..00000000 --- a/doc/fr/index.md +++ /dev/null @@ -1,513 +0,0 @@ - - -# cordova-plugin-media-capture - -Ce plugin permet d'accéder à de l'appareil audio, image et capacités de capture vidéo. - -**Avertissement**: collecte et utilisation des images, vidéo ou audio de la caméra ou un microphone de l'appareil soulève des questions importantes de la vie privée. La politique de confidentialité de votre application devrait traiter de la manière dont l'application utilise ces capteurs et du partage des données enregistrées avec d'autres parties ou non. En outre, si l'utilisation de l'application de la caméra ou un microphone n'est pas apparente dans l'interface utilisateur, vous devez fournir un avis juste-à-temps, avant que l'application accède à la caméra ou un microphone (si le système d'exploitation de périphérique n'est pas faire déjà). Cette notice devrait contenir les informations susmentionnées, ainsi que permettre de recueillir l'autorisation de l'utilisateur (par exemple, en offrant les possibilités **OK** et **Non merci**). Notez que certains magasins d'applications peuvent exiger la présence de ce genre de notice avant d'autoriser la distribution de votre application. Pour plus d'informations, consultez le Guide de la vie privée. - -Ce plugin définit global `navigator.device.capture` objet. - -Bien que dans la portée globale, il n'est pas disponible jusqu'après la `deviceready` événement. - - document.addEventListener (« deviceready », onDeviceReady, false) ; - function onDeviceReady() {console.log(navigator.device.capture);} - - -## Installation - - Cordova plugin ajouter capture d'cordova-plugin-media - - -## Plates-formes prises en charge - -* Amazon Fire OS -* Android -* BlackBerry 10 -* iOS -* Windows Phone 7 et 8 -* Windows 8 - -## Objets - -* Capture -* CaptureAudioOptions -* CaptureImageOptions -* CaptureVideoOptions -* CaptureCallback -* CaptureErrorCB -* ConfigurationData -* MediaFile -* MediaFileData - -## Méthodes - -* capture.captureAudio -* capture.captureImage -* capture.captureVideo -* MediaFile.getFormatData - -## Propriétés - -* **supportedAudioModes** : les formats d'enregistrement audio supportés par l'appareil. (ConfigurationData[]) - -* **supportedImageModes** : les formats et tailles de capture d'image supportés par l'appareil. (ConfigurationData[]) - -* **supportedVideoModes**: les formats et résolutions d'enregistrement vidéo supportés par l'appareil. (ConfigurationData[]) - -## capture.captureAudio - -> Ouvre l'application enregistreur audio et fournit des informations sur les fichiers audio capturés. - - navigator.device.capture.captureAudio (CaptureCB captureSuccess, CaptureErrorCB captureError, [CaptureAudioOptions options]) ; - - -### Description - -Commence une opération asynchrone pour capturer les enregistrements audio à l'aide d'application d'enregistrement audio de l'appareil par défaut. L'opération permet à l'utilisateur de l'appareil capturer des enregistrements multiples en une seule séance. - -L'opération de capture se termine lorsque l'utilisateur quitte l'enregistrement demande, ou le nombre maximal d'enregistrements spécifié par audio `CaptureAudioOptions.limit` est atteinte. Si aucun `limit` valeur du paramètre est spécifiée, par défaut à un (1), et l'opération de capture se termine après que l'utilisateur enregistre un clip audio unique. - -Fin de l'opération de capture, le `CaptureCallback` s'exécute avec un tableau de `MediaFile` objets décrivant chacune capturé fichiers clip audio. Si l'utilisateur annule l'opération avant un clip audio est capturé, le `CaptureErrorCallback` s'exécute avec un objet `CaptureError`, mettant en vedette le code d'erreur `CaptureError.CAPTURE_NO_MEDIA_FILES`. - -### Plates-formes prises en charge - -* Amazon Fire OS -* Android -* BlackBerry 10 -* iOS -* Windows Phone 7 et 8 -* Windows 8 - -### Exemple - - // 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}); - - -### iOS Quirks - -* iOS n'a pas une application d'enregistrement audio par défaut, donc une interface utilisateur simple est fournie. - -### Windows Phone 7 et 8 Quirks - -* Windows Phone 7 n'a pas une application d'enregistrement audio par défaut, donc une interface utilisateur simple est fournie. - -## CaptureAudioOptions - -> Encapsule les options de configuration de capture audio. - -### Propriétés - -* **limite**: le nombre maximal de clips audio, l'utilisateur de l'appareil permet d'enregistrer dans une opération de capture unique. La valeur doit être supérieure ou égale à 1 (1 par défaut). - -* **durée**: la durée maximale d'un clip sonore audio, en quelques secondes. - -### Exemple - - // limit capture operation to 3 media files, no longer than 10 seconds each - var options = { limit: 3, duration: 10 }; - - navigator.device.capture.captureAudio(captureSuccess, captureError, options); - - -### Amazon Fire OS Quirks - -* Le `duration` paramètre n'est pas pris en charge. Longueurs d'enregistrement ne peut être limitée par programme. - -### Quirks Android - -* Le `duration` paramètre n'est pas pris en charge. Longueurs d'enregistrement ne peut être limitée par programme. - -### BlackBerry 10 Quirks - -* Le `duration` paramètre n'est pas pris en charge. Longueurs d'enregistrement ne peut être limitée par programme. -* Le `limit` paramètre n'est pas pris en charge, ainsi qu'un enregistrement peut être créée pour chaque appel. - -### iOS Quirks - -* Le `limit` paramètre n'est pas pris en charge, ainsi qu'un enregistrement peut être créée pour chaque appel. - -## capture.captureImage - -> Ouvre l'application appareil photo et fournit des informations sur les fichiers image capturés. - - navigator.device.capture.captureImage( - CaptureCB captureSuccess, CaptureErrorCB captureError, [CaptureImageOptions options] - ); - - -### Description - -Commence une opération asynchrone pour capturer des images à l'aide d'application caméra de l'appareil. L'opération permet aux utilisateurs de capturer plusieurs images en une seule séance. - -Les extrémités d'opération de capture lorsque l'utilisateur ferme l'application appareil photo, ou le nombre maximal d'enregistrements spécifié par `CaptureAudioOptions.limit` est atteint. Si aucune valeur `limit` n'est spécifiée, par défaut à un (1), et l'opération de capture s'arrête après l'utilisateur restitue une image unique. - -Lorsque l'opération de capture terminée, elle appelle le `CaptureCB` rappel avec un tableau de `MediaFile` objets décrivant chaque fichier de l'image capturée. Si l'utilisateur annule l'opération avant la capture d'une image, la `CaptureErrorCB` rappel s'exécute avec un `CaptureError` objet mettant en vedette un `CaptureError.CAPTURE_NO_MEDIA_FILES` code d'erreur. - -### Plates-formes prises en charge - -* Amazon Fire OS -* Android -* BlackBerry 10 -* iOS -* Windows Phone 7 et 8 -* Windows 8 - -### Windows Phone 7 Quirks - -Invoquant l'application native caméra alors que votre appareil est connecté via Zune ne fonctionne pas, et exécute le rappel de l'erreur. - -### Exemple - - capture de rappel var captureSuccess = function(mediaFiles) {var i, chemin, len ; - pour (i = 0, len = mediaFiles.length; i < len ; j'ai += 1) {chemin d'accès = mediaFiles[i].fullPath ; - faire quelque chose d'intéressant avec le fichier}} ; - - capturer l'erreur rappel var captureError = function(error) {navigator.notification.alert (' code d'erreur: ' + error.code, null, « Capture Error »);} ; - - démarrer l'image capture navigator.device.capture.captureImage (captureSuccess, captureError, {limit:2}) ; - - -## CaptureImageOptions - -> Encapsule les options de configuration de capture d'image. - -### Propriétés - -* **limite**: le nombre maximum d'images, l'utilisateur peut saisir dans une opération de capture unique. La valeur doit être supérieure ou égale à 1 (1 par défaut). - -### Exemple - - limiter l'opération de capture aux options de 3 images var = { limit: 3 } ; - - navigator.device.capture.captureImage (captureSuccess, captureError, options) ; - - -### iOS Quirks - -* Le paramètre **limit** n'est pas pris en charge, et qu'une image est prise par l'invocation. - -## capture.captureVideo - -> Ouvre l'application enregistreur vidéo et fournit des informations sur les clips vidéo capturés. - - navigator.device.capture.captureVideo (CaptureCB captureSuccess, CaptureErrorCB captureError, [CaptureVideoOptions options]) ; - - -### Description - -Commence une opération asynchrone pour capturer des enregistrements vidéo à l'aide de la demande d'enregistrement vidéo de l'appareil. L'opération permet à l'utilisateur de capturer plusieurs enregistrements en une seule séance. - -L'opération de capture se termine lorsque l'utilisateur quitte l'application de l'enregistrement vidéo, ou le nombre maximal d'enregistrements spécifié par `CaptureVideoOptions.limit` est atteinte. Si aucun `limit` valeur du paramètre est spécifiée, par défaut à un (1), et l'opération de capture se termine après que l'utilisateur enregistre un clip vidéo unique. - -Fin de l'opération de capture, il le `CaptureCB` rappel s'exécute avec un tableau de `MediaFile` objets décrivant chacune capturé clip vidéo. Si l'utilisateur annule l'opération avant la capture d'un clip vidéo, le `CaptureErrorCB` rappel s'exécute avec un `CaptureError` objet mettant en vedette un `CaptureError.CAPTURE_NO_MEDIA_FILES` code d'erreur. - -### Plates-formes prises en charge - -* Amazon Fire OS -* Android -* BlackBerry 10 -* iOS -* Windows Phone 7 et 8 -* Windows 8 - -### Exemple - - capture de rappel var captureSuccess = function(mediaFiles) {var i, chemin, len ; - pour (i = 0, len = mediaFiles.length; i < len ; j'ai += 1) {chemin d'accès = mediaFiles[i].fullPath ; - faire quelque chose d'intéressant avec le fichier}} ; - - capturer l'erreur rappel var captureError = function(error) {navigator.notification.alert (' code d'erreur: ' + error.code, null, « Capture Error »);} ; - - démarrer la capture vidéo navigator.device.capture.captureVideo (captureSuccess, captureError, {limit:2}) ; - - -### BlackBerry 10 Quirks - -* Cordova pour BlackBerry 10 essaie de lancer l'application **Enregistreur vidéo** , fournie par RIM, pour capturer les enregistrements vidéo. L'application reçoit un `CaptureError.CAPTURE_NOT_SUPPORTED` code d'erreur si l'application n'est pas installée sur l'appareil. - -## CaptureVideoOptions - -> Encapsule les options de configuration de capture vidéo. - -### Propriétés - -* **limite**: le nombre maximal de clips vidéo, utilisateur de l'appareil peut capturer dans une opération de capture unique. La valeur doit être supérieure ou égale à 1 (1 par défaut). - -* **durée**: la durée maximale d'un clip vidéo, en quelques secondes. - -### Exemple - - limiter l'opération de capture de 3 options de clips vidéo var = { limit: 3 } ; - - navigator.device.capture.captureVideo (captureSuccess, captureError, options) ; - - -### BlackBerry 10 Quirks - -* Le paramètre de **durée** n'est pas supporté, donc la longueur des enregistrements ne peut pas être limitée par programme. - -### iOS Quirks - -* Le paramètre **limit** n'est pas pris en charge. Qu'une vidéo est enregistrée par l'invocation. - -## CaptureCB - -> Fonction appelée lors d'une opération de capture de médias réussie. - - fonction captureSuccess (MediaFile [] mediaFiles) { ... } ; - - -### Description - -Cette fonction s'exécute après qu'une opération de capture réussie est terminée. À ce point qu'un fichier multimédia a été capturé et soit l'utilisateur a quitté l'application capture de média, ou la limite de capture a été atteinte. - -Chaque `MediaFile` objet décrit un fichier multimédia capturés. - -### Exemple - - capturer callback function captureSuccess(mediaFiles) {var i, chemin, len ; - pour (i = 0, len = mediaFiles.length; i < len ; j'ai += 1) {chemin d'accès = mediaFiles[i].fullPath ; - faire quelque chose d'intéressant avec le fichier}} ; - - -## CaptureError - -> Encapsule le code d'erreur résultant d'une opération de capture de médias ayant échoué. - -### Propriétés - -* **code**: un des codes d'erreur prédéfinis énumérés ci-dessous. - -### Constantes - -* `CaptureError.CAPTURE_INTERNAL_ERR`: La caméra ou un microphone a échoué à capturer l'image ou le son. - -* `CaptureError.CAPTURE_APPLICATION_BUSY`: L'application de capture caméra / audio est actuellement une autre demande de capture. - -* `CaptureError.CAPTURE_INVALID_ARGUMENT`: Utilisation incorrecte de l'API (par exemple, la valeur de `limit` est inférieur à 1). - -* `CaptureError.CAPTURE_NO_MEDIA_FILES`: L'utilisateur quitte l'application capture audio ou de la caméra avant de capturer n'importe quoi. - -* `CaptureError.CAPTURE_NOT_SUPPORTED`: L'opération de capture demandée n'est pas pris en charge. - -## CaptureErrorCB - -> Fonction callback appelée si une erreur se produit pendant une opération de capture de médias. - - function captureError (erreur CaptureError) { ... } ; - - -### Description - -Cette fonction s'exécute si une erreur se produit lorsque vous essayez de lancer un média opération de capture. Scénarios de défaillance incluent lors de l'application capture est occupée, une opération de capture est déjà en cours, ou l'utilisateur annule l'opération avant que tous les fichiers multimédias sont capturés. - -Cette fonction s'exécute avec un `CaptureError` objet contenant une erreur appropriée`code`. - -### Exemple - - capturer l'erreur rappel var captureError = function(error) {navigator.notification.alert (' code d'erreur: ' + error.code, null, « Capture Error »);} ; - - -## ConfigurationData - -> Encapsule un ensemble de paramètres de capture de médias pris en charge par un appareil. - -### Description - -Décrit les modes de capture de média pris en charge par le périphérique. Les données de configuration incluent le type MIME et dimensions de capture pour la capture vidéo ou image. - -[RFC2046][1]devraient respecter les types MIME. Exemples : - - [1]: http://www.ietf.org/rfc/rfc2046.txt - -* `video/3gpp` -* `video/quicktime` -* `image/jpeg` -* `audio/amr` -* `audio/wav` - -### Propriétés - -* **type**: The ASCII encodée en chaîne minuscule qui représente le type de média. (DOMString) - -* **hauteur**: la hauteur de l'image ou la vidéo en pixels. La valeur est zéro pour les extraits sonores. (Nombre) - -* **largeur**: la largeur de l'image ou la vidéo en pixels. La valeur est zéro pour les extraits sonores. (Nombre) - -### Exemple - - prise en charge de récupérer image modes var imageModes = navigator.device.capture.supportedImageModes ; - - Sélectionnez le mode qui a la plus haute résolution horizontale var largeur = 0 ; - var selectedmode ; - pour chaque (mode var imageModes) {si (mode.width > largeur) {largeur = mode.width ; - selectedmode = mode ; - } - } - - -Pas pris en charge par n'importe quelle plateforme. Tous les tableaux de données de configuration sont vides. - -## MediaFile.getFormatData - -> Récupère des informations sur le format du fichier média capturé. - - mediaFile.getFormatData( - MediaFileDataSuccessCB successCallback, - [MediaFileDataErrorCB errorCallback] - ); - - -### Description - -Cette fonction de façon asynchrone tente de récupérer les informations de format pour le fichier multimédia. S'il réussit, il appelle le rappel de `MediaFileDataSuccessCB` avec un objet `MediaFileData`. Si la tentative échoue, cette fonction appelle le rappel de `MediaFileDataErrorCB`. - -### Plates-formes prises en charge - -* Amazon Fire OS -* Android -* BlackBerry 10 -* iOS -* Windows Phone 7 et 8 -* Windows 8 - -### Amazon Fire OS Quirks - -L'API pour accéder aux médias file format informations est limité, donc pas tous les `MediaFileData` propriétés sont prises en charge. - -### BlackBerry 10 Quirks - -Ne fournit pas une API pour plus d'informations sur les fichiers de médias, tous les objets de `MediaFileData` de retour avec les valeurs par défaut. - -### Quirks Android - -L'API pour accéder aux médias file format informations est limité, donc pas tous les `MediaFileData` propriétés sont prises en charge. - -### iOS Quirks - -L'API pour accéder aux médias file format informations est limité, donc pas tous les `MediaFileData` propriétés sont prises en charge. - -## MediaFile - -> Encapsule les propriétés d'un fichier média capturé. - -### Propriétés - -* **nom**: le nom du fichier, sans le chemin d'accès. (DOMString) - -* **fullPath**: le chemin d'accès complet du fichier, y compris le nom. (DOMString) - -* **type**: type de mime du fichier (DOMString) - -* **lastModifiedDate**: la date et l'heure lorsque le fichier a été modifié. (Date) - -* **taille**: la taille du fichier, en octets. (Nombre) - -### Méthodes - -* **MediaFile.getFormatData**: récupère les informations sur le format du fichier multimédia. - -## MediaFileData - -> Encapsule des informations de format d'un fichier média. - -### Propriétés - -* **codecs**: le format réel du contenu audio et vidéo. (DOMString) - -* **débit**: le débit moyen du contenu. La valeur est égale à zéro pour les images. (Nombre) - -* **hauteur**: la hauteur de l'image ou la vidéo en pixels. La valeur est égale à zéro pour des clips audio. (Nombre) - -* **largeur**: la largeur de l'image ou la vidéo en pixels. La valeur est égale à zéro pour des clips audio. (Nombre) - -* **durée**: la durée du clip vidéo ou audio en quelques secondes. La valeur est égale à zéro pour les images. (Nombre) - -### BlackBerry 10 Quirks - -Aucune API ne fournit des informations sur le format des fichiers multimédias, donc l'objet de `MediaFileData` retourné par `MediaFile.getFormatData` caractéristiques les valeurs par défaut suivantes : - -* **codecs**: pas pris en charge et retourne`null`. - -* **Bitrate**: pas pris en charge et retourne la valeur zéro. - -* **hauteur**: pas pris en charge et retourne la valeur zéro. - -* **largeur**: non pris en charge et retourne la valeur zéro. - -* **durée**: non pris en charge et retourne la valeur zéro. - -### Amazon Fire OS Quirks - -Prend en charge ce qui suit `MediaFileData` Propriétés : - -* **codecs** : propriété non prise en charge, sa valeur est `null`. - -* **bitrate** : propriété non prise en charge, sa valeur est zéro. - -* **hauteur**: prise en charge : seuls les fichiers image et vidéo. - -* **largeur**: prise en charge : seuls les fichiers image et vidéo. - -* **durée**: prise en charge : seuls les fichiers audio et vidéo - -### Quirks Android - -Prend en charge ce qui suit `MediaFileData` Propriétés : - -* **codecs**: pas pris en charge et retourne`null`. - -* **Bitrate**: pas pris en charge et retourne la valeur zéro. - -* **height** : propriété prise en charge seulement pour les fichiers image et vidéo. - -* **width** : propriété prise en charge seulement pour les fichiers image et vidéo. - -* **durée**: prise en charge : seuls les fichiers audio et vidéo. - -### iOS Quirks - -Prend en charge ce qui suit `MediaFileData` Propriétés : - -* **codecs**: pas pris en charge et retourne`null`. - -* **Bitrate**: pris en charge sur les périphériques d'iOS4 pour l'audio uniquement. Renvoie zéro pour les images et vidéos. - -* **hauteur**: prise en charge : seuls les fichiers image et vidéo. - -* **largeur**: prise en charge : seuls les fichiers image et vidéo. - -* **duration** : propriété prise en charge seulement pour les fichiers audio et vidéo. diff --git a/doc/it/README.md b/doc/it/README.md deleted file mode 100644 index 15e20e8c..00000000 --- a/doc/it/README.md +++ /dev/null @@ -1,564 +0,0 @@ - - -# cordova-plugin-media-capture - -[![Build Status](https://travis-ci.org/apache/cordova-plugin-media-capture.svg)](https://travis-ci.org/apache/cordova-plugin-media-capture) - -Questo plugin fornisce l'accesso per il dispositivo audio, immagine e funzionalità di cattura video. - -**Avviso**: raccolta e utilizzo delle immagini, video o audio da videocamera o un microfono del dispositivo solleva questioni di privacy importante. Politica sulla privacy dell'app dovrebbe discutere come app utilizza tali sensori e se i dati registrati sono condivisa con altre parti. Inoltre, se uso dell'app della fotocamera o microfono non è evidente nell'interfaccia utente, è necessario fornire un preavviso di just-in-time prima app accede la videocamera o il microfono (se il sistema operativo del dispositivo non farlo già). Tale comunicazione deve fornire le informazioni stesse notate sopra, oltre ad ottenere l'autorizzazione (ad esempio, presentando scelte per **OK** e **No grazie**). Si noti che alcuni mercati app possono richiedere l'app può fornire preavviso just-in-time e ottenere l'autorizzazione dell'utente prima di accedere la videocamera o il microfono. Per ulteriori informazioni, vedere la guida sulla Privacy. - -Questo plugin definisce oggetto global `navigator.device.capture`. - -Anche se in ambito globale, non è disponibile fino a dopo l'evento `deviceready`. - - document.addEventListener("deviceready", onDeviceReady, false); - function onDeviceReady() { - console.log(navigator.device.capture); - } - - -## Installazione - - cordova plugin add cordova-plugin-media-capture - - -## Piattaforme supportate - - * Amazon fuoco OS - * Android - * BlackBerry 10 - * Browser - * iOS - * Windows Phone 7 e 8 - * Windows 8 - * Windows - -## Oggetti - - * Cattura - * CaptureAudioOptions - * CaptureImageOptions - * CaptureVideoOptions - * CaptureCallback - * CaptureErrorCB - * ConfigurationData - * MediaFile - * MediaFileData - -## Metodi - - * capture.captureAudio - * capture.captureImage - * capture.captureVideo - * MediaFile.getFormatData - -## Proprietà - - * **supportedAudioModes**: la registrazione di formati supportati dal dispositivo audio. (ConfigurationData[]) - - * **supportedImageModes**: la registrazione formati immagine e i formati supportati dal dispositivo. (ConfigurationData[]) - - * **supportedVideoModes**: I formati supportati dal dispositivo e risoluzioni video registrazione. (ConfigurationData[]) - -## capture.captureAudio - -> Avviare l'applicazione registratore audio e restituire informazioni sui file di clip audio catturato. - - navigator.device.capture.captureAudio( - CaptureCB captureSuccess, CaptureErrorCB captureError, [CaptureAudioOptions options] - ); - - -### Descrizione - -Avvia un'operazione asincrona per acquisire registrazioni audio utilizzando l'applicazione di registrazione audio predefinita del dispositivo. L'operazione consente all'utente di dispositivo acquisire registrazioni multiple in una singola sessione. - -L'operazione di acquisizione termina quando l'utente esce la domanda di registrazione audio, o viene raggiunto il numero massimo di registrazioni specificato da `CaptureAudioOptions.limit`. Se nessun valore `limit` del parametro è specificato, il valore predefinito è uno (1), e l'operazione di acquisizione termina dopo l'utente registra una singola clip audio. - -Quando termina l'operazione di acquisizione, l' `CaptureCallback` si esegue con una matrice di oggetti `MediaFile` descrive ogni file catturato clip audio. Se l'utente termina l'operazione prima di un clip audio viene catturato, il `CaptureErrorCallback` viene eseguito con un oggetto di `CaptureError`, con il codice di errore `CaptureError.CAPTURE_NO_MEDIA_FILES`. - -### Piattaforme supportate - - * Amazon fuoco OS - * Android - * BlackBerry 10 - * iOS - * Windows Phone 7 e 8 - * Windows 8 - * Windows - -### Esempio - - // 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}); - - -### iOS stranezze - - * iOS non ha un'applicazione di registrazione audio predefinita, quindi viene fornita un'interfaccia utente semplice. - -### Windows Phone 7 e 8 stranezze - - * Windows Phone 7 non ha un'applicazione di registrazione audio predefinita, quindi viene fornita un'interfaccia utente semplice. - -## CaptureAudioOptions - -> Incapsula le opzioni di configurazione di acquisizione audio. - -### Proprietà - - * **limite**: il numero massimo di clip audio in grado di registrare l'utente del dispositivo in un'operazione di acquisizione di singolo. Il valore deve essere maggiore o uguale a 1 (default 1). - - * **durata**: la durata massima di un clip audio audio, in pochi secondi. - -### Esempio - - // limit capture operation to 3 media files, no longer than 10 seconds each - var options = { limit: 3, duration: 10 }; - - navigator.device.capture.captureAudio(captureSuccess, captureError, options); - - -### Amazon fuoco OS stranezze - - * Il `duration` parametro non è supportato. Lunghezze di registrazione non può essere limitato a livello di codice. - -### Stranezze Android - - * Il `duration` parametro non è supportato. Lunghezze di registrazione non può essere limitato a livello di codice. - -### BlackBerry 10 capricci - - * Il `duration` parametro non è supportato. Lunghezze di registrazione non può essere limitato a livello di codice. - * Il `limit` parametro non è supportato, quindi solo una registrazione può essere creata per ogni chiamata. - -### iOS stranezze - - * Il `limit` parametro non è supportato, quindi solo una registrazione può essere creata per ogni chiamata. - -## capture.captureImage - -> Avviare l'applicazione fotocamera e restituire informazioni sui file di immagine catturata. - - navigator.device.capture.captureImage( - CaptureCB captureSuccess, CaptureErrorCB captureError, [CaptureImageOptions options] - ); - - -### Descrizione - -Avvia un'operazione asincrona per catturare immagini utilizzando l'applicazione della fotocamera del dispositivo. L'operazione consente agli utenti di catturare più immagini in una sola seduta. - -Le estremità operazione cattura quando l'utente chiude l'applicazione fotocamera, oppure quando viene raggiunto il numero massimo di registrazioni specificato da `CaptureAudioOptions.limit`. Se viene specificato alcun valore `limit`, il valore predefinito è uno (1) e l'operazione di acquisizione termina dopo l'utente acquisisce una singola immagine. - -Quando termina l'operazione di acquisizione, richiama il callback di `CaptureCB` con una matrice di oggetti `MediaFile` descrive ogni file immagine catturata. Se l'utente termina l'operazione prima di catturare un'immagine, `CaptureErrorCB` callback viene eseguito con un oggetto `CaptureError` con un codice di errore `CaptureError.CAPTURE_NO_MEDIA_FILES`. - -### Piattaforme supportate - - * Amazon fuoco OS - * Android - * BlackBerry 10 - * Browser - * iOS - * Windows Phone 7 e 8 - * Windows 8 - * Windows - -### Windows Phone 7 capricci - -Invocando l'applicazione nativa fotocamera mentre il dispositivo è collegato tramite Zune non funziona, ed esegue il callback di errore. - -### Stranezze browser - -Funziona in Chrome, Firefox e Opera solo (dato che IE e Safari non supporta API navigator.getUserMedia) - -Visualizzazione di immagini utilizzando catturato solo URL del file disponibile in Chrome/Opera. Firefox memorizza le immagini catturate nel deposito di IndexedDB (Vedi documentazione plugin File), e a causa di questo l'unico modo per mostrare l'immagine catturata è di leggerlo e show usando suo DataURL. - -### Esempio - - // 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}); - - -## CaptureImageOptions - -> Incapsula le opzioni di configurazione cattura immagine. - -### Proprietà - - * **limite**: il numero massimo di immagini che l'utente può catturare in un'operazione di cattura singola. Il valore deve essere maggiore o uguale a 1 (default 1). - -### Esempio - - // limit capture operation to 3 images - var options = { limit: 3 }; - - navigator.device.capture.captureImage(captureSuccess, captureError, options); - - -### iOS stranezze - - * Il parametro **limite** non è supportato ed è presa solo una immagine per ogni invocazione. - -## capture.captureVideo - -> Avviare l'applicazione registratore video e restituire informazioni sui file di clip video catturati. - - navigator.device.capture.captureVideo( - CaptureCB captureSuccess, CaptureErrorCB captureError, [CaptureVideoOptions options] - ); - - -### Descrizione - -Avvia un'operazione asincrona per acquisire registrazioni video usando registrazione video applicazione del dispositivo. L'operazione consente all'utente di catturare più registrazioni in una sola seduta. - -L'operazione di acquisizione termina quando l'utente chiude l'applicazione di registrazione video, o viene raggiunto il numero massimo di registrazioni specificato da `CaptureVideoOptions.limit`. Se nessun valore `limit` del parametro è specificato, il valore predefinito è uno (1) e l'operazione di acquisizione termina dopo l'utente registra un unico video clip. - -Quando termina l'operazione di acquisizione, il callback `CaptureCB` esegue con una matrice di oggetti `MediaFile` descrive ogni file videoclip catturati. Se l'utente termina l'operazione prima di catturare un video clip, `CaptureErrorCB` callback viene eseguito con un oggetto `CaptureError` con un codice di errore `CaptureError.CAPTURE_NO_MEDIA_FILES`. - -### Piattaforme supportate - - * Amazon fuoco OS - * Android - * BlackBerry 10 - * iOS - * Windows Phone 7 e 8 - * Windows 8 - * Windows - -### Esempio - - // 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}); - - -### BlackBerry 10 capricci - - * Cordova per BlackBerry 10 tenta di lanciare l'applicazione **Registratore Video** , fornito da RIM, per catturare le registrazioni video. L'applicazione riceve un `CaptureError.CAPTURE_NOT_SUPPORTED` codice di errore se l'applicazione non è installata sul dispositivo. - -## CaptureVideoOptions - -> Incapsula le opzioni di configurazione di cattura video. - -### Proprietà - - * **limite**: il numero massimo di video clip utente del dispositivo in grado di catturare in un'operazione di cattura singola. Il valore deve essere maggiore o uguale a 1 (default 1). - - * **durata**: la durata massima di un clip video, in pochi secondi. - -### Esempio - - // limit capture operation to 3 video clips - var options = { limit: 3 }; - - navigator.device.capture.captureVideo(captureSuccess, captureError, options); - - -### BlackBerry 10 capricci - - * Il parametro di **durata** non è supportato, quindi la lunghezza delle registrazioni non può essere limitata a livello di codice. - -### iOS stranezze - - * Il parametro **limite** non è supportato. Solo un video viene registrato per ogni invocazione. - -## CaptureCB - -> Richiamato su di un'operazione di acquisizione di mezzi di successo. - - function captureSuccess( MediaFile[] mediaFiles ) { ... }; - - -### Descrizione - -Questa funzione viene eseguita al termine di un'operazione di acquisizione di successo. A questo punto che è stato catturato un file multimediale e neanche l'utente è stato terminato l'applicazione di cattura di media, o è stato raggiunto il limite di cattura. - -Ogni oggetto `MediaFile` descrive un file multimediali catturati. - -### Esempio - - // capture callback - 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 - } - }; - - -## CaptureError - -> Incapsula il codice di errore derivanti da un'operazione di acquisizione di mezzi falliti. - -### Proprietà - - * **codice**: uno dei codici di errore predefiniti elencati di seguito. - -### Costanti - - * `CaptureError.CAPTURE_INTERNAL_ERR`: La videocamera o il microfono non è riuscito a catturare l'immagine o il suono. - - * `CaptureError.CAPTURE_APPLICATION_BUSY`: L'applicazione di cattura audio o fotocamera sta attualmente scontando un'altra richiesta di cattura. - - * `CaptureError.CAPTURE_INVALID_ARGUMENT`: Utilizzo non valido dell'API (per esempio, il valore di `limit` è minore di uno). - - * `CaptureError.CAPTURE_NO_MEDIA_FILES`: L'utente chiude l'applicazione di cattura audio o fotocamera prima di catturare qualcosa. - - * `CaptureError.CAPTURE_NOT_SUPPORTED`: L'operazione di acquisizione richiesto non è supportato. - -## CaptureErrorCB - -> Richiamato se si verifica un errore durante un'operazione di acquisizione di mezzi di comunicazione. - - function captureError( CaptureError error ) { ... }; - - -### Descrizione - -Questa funzione viene eseguita se si verifica un errore quando si tenta di lanciare un media catturare operazione. Fallimento scenari includono quando l'applicazione di cattura è occupato, un'operazione di acquisizione è già in atto, o l'utente annulla l'operazione prima che tutti i file multimediali vengono catturati. - -Questa funzione viene eseguita con un oggetto `CaptureError` che contiene un `codice` di errore appropriato. - -### Esempio - - // capture error callback - var captureError = function(error) { - navigator.notification.alert('Error code: ' + error.code, null, 'Capture Error'); - }; - - -## ConfigurationData - -> Incapsula un insieme di parametri di acquisizione multimediale che supporta un dispositivo. - -### Descrizione - -Descrive le modalità di cattura media supportato dal dispositivo. I dati di configurazione includono il tipo MIME e quote di cattura per l'acquisizione video o immagine. - -I tipi MIME devono rispettare [RFC2046](http://www.ietf.org/rfc/rfc2046.txt). Esempi: - - * `video/3gpp` - * `video/quicktime` - * `image/jpeg` - * `audio/amr` - * `audio/wav` - -### Proprietà - - * **tipo**: stringa di caratteri minuscoli con codifica ASCII il che rappresenta il tipo di supporto. (DOMString) - - * **altezza**: l'altezza dell'immagine o del video in pixel. Il valore è zero per clip audio. (Numero) - - * **larghezza**: la larghezza dell'immagine o del video in pixel. Il valore è zero per clip audio. (Numero) - -### Esempio - - // retrieve supported image modes - var imageModes = navigator.device.capture.supportedImageModes; - - // Select mode that has the highest horizontal resolution - var width = 0; - var selectedmode; - for each (var mode in imageModes) { - if (mode.width > width) { - width = mode.width; - selectedmode = mode; - } - } - - -Non supportato da qualsiasi piattaforma. Tutte le matrici di dati di configurazione sono vuote. - -## MediaFile.getFormatData - -> Recupera il formato informazioni su cattura file multimediale. - - mediaFile.getFormatData( - MediaFileDataSuccessCB successCallback, - [MediaFileDataErrorCB errorCallback] - ); - - -### Descrizione - -Questa funzione in modo asincrono tenta di recuperare le informazioni sul formato del file multimediale. Se riuscito, richiama il callback di `MediaFileDataSuccessCB` con un oggetto `MediaFileData`. Se il tentativo fallisce, questa funzione richiama il callback di `MediaFileDataErrorCB`. - -### Piattaforme supportate - - * Amazon fuoco OS - * Android - * BlackBerry 10 - * iOS - * Windows Phone 7 e 8 - * Windows 8 - * Windows - -### Amazon fuoco OS stranezze - -L'API per informazioni sul formato dei file multimediali accesso è limitato, quindi non tutti `MediaFileData` proprietà supportate. - -### BlackBerry 10 capricci - -Non fornisce un'API per informazioni sui file multimediali, quindi tutti gli oggetti di `MediaFileData` restituiscono con valori predefiniti. - -### Stranezze Android - -L'API per informazioni sul formato dei file multimediali accesso è limitato, quindi non tutti `MediaFileData` proprietà supportate. - -### iOS stranezze - -L'API per informazioni sul formato dei file multimediali accesso è limitato, quindi non tutti `MediaFileData` proprietà supportate. - -## MediaFile - -> Incapsula le proprietà di un file di acquisizione di mezzi di comunicazione. - -### Proprietà - - * **nome**: il nome del file, senza informazioni sul percorso. (DOMString) - - * **fullPath**: il percorso completo del file, tra cui il nome. (DOMString) - - * **tipo**: tipo mime del file (DOMString) - - * **lastModifiedDate**: la data e l'ora quando il file è stato modificato. (Data) - - * **dimensioni**: le dimensioni del file in byte. (Numero) - -### Metodi - - * **MediaFile.getFormatData**: recupera le informazioni sul formato del file multimediale. - -## MediaFileData - -> Incapsula le informazioni sul formato di un file multimediale. - -### Proprietà - - * **codec**: il formato reale del contenuto audio e video. (DOMString) - - * **bitrate**: il bitrate medio del contenuto. Il valore è zero per le immagini. (Numero) - - * **altezza**: l'altezza dell'immagine o del video in pixel. Il valore è zero per clip audio. (Numero) - - * **larghezza**: la larghezza dell'immagine o del video in pixel. Il valore è zero per clip audio. (Numero) - - * **durata**: la lunghezza del clip video o audio in secondi. Il valore è zero per le immagini. (Numero) - -### BlackBerry 10 capricci - -Nessuna API fornisce informazioni sul formato dei file multimediali, quindi l'oggetto `MediaFileData` restituito da `MediaFile.getFormatData` caratteristiche i seguenti valori predefiniti: - - * **codec**: non supportato e restituisce`null`. - - * **bitrate**: non supportato e restituisce zero. - - * **altezza**: non supportato e restituisce zero. - - * **larghezza**: non supportato e restituisce zero. - - * **durata**: non supportato e restituisce zero. - -### Amazon fuoco OS stranezze - -Supporta i seguenti `MediaFileData` proprietà: - - * **codec**: non supportato e restituisce`null`. - - * **bitrate**: non supportato e restituisce zero. - - * **altezza**: supportati: solo i file immagine e video. - - * **larghezza**: supportati: solo i file immagine e video. - - * **durata**: supportati: audio e video file solo - -### Stranezze Android - -Supporta i seguenti `MediaFileData` proprietà: - - * **codec**: non supportato e restituisce`null`. - - * **bitrate**: non supportato e restituisce zero. - - * **altezza**: supportati: solo i file immagine e video. - - * **larghezza**: supportati: solo i file immagine e video. - - * **durata**: supportati: audio e video file solo. - -### iOS stranezze - -Supporta i seguenti `MediaFileData` proprietà: - - * **codec**: non supportato e restituisce`null`. - - * **bitrate**: supportato sui dispositivi iOS4 per solo audio. Restituisce zero per immagini e video. - - * **altezza**: supportati: solo i file immagine e video. - - * **larghezza**: supportati: solo i file immagine e video. - - * **durata**: supportati: audio e video file solo. \ No newline at end of file diff --git a/doc/it/index.md b/doc/it/index.md deleted file mode 100644 index ed9d1f7e..00000000 --- a/doc/it/index.md +++ /dev/null @@ -1,551 +0,0 @@ - - -# cordova-plugin-media-capture - -Questo plugin fornisce l'accesso per il dispositivo audio, immagine e funzionalità di cattura video. - -**Avviso**: raccolta e utilizzo delle immagini, video o audio da videocamera o un microfono del dispositivo solleva questioni di privacy importante. Politica sulla privacy dell'app dovrebbe discutere come app utilizza tali sensori e se i dati registrati sono condivisa con altre parti. Inoltre, se uso dell'app della fotocamera o microfono non è evidente nell'interfaccia utente, è necessario fornire un preavviso di just-in-time prima app accede la videocamera o il microfono (se il sistema operativo del dispositivo non farlo già). Tale comunicazione deve fornire le informazioni stesse notate sopra, oltre ad ottenere l'autorizzazione (ad esempio, presentando scelte per **OK** e **No grazie**). Si noti che alcuni mercati app possono richiedere l'app può fornire preavviso just-in-time e ottenere l'autorizzazione dell'utente prima di accedere la videocamera o il microfono. Per ulteriori informazioni, vedere la guida sulla Privacy. - -Questo plugin definisce oggetto global `navigator.device.capture`. - -Anche se in ambito globale, non è disponibile fino a dopo l'evento `deviceready`. - - document.addEventListener("deviceready", onDeviceReady, false); - function onDeviceReady() { - console.log(navigator.device.capture); - } - - -## Installazione - - cordova plugin add cordova-plugin-media-capture - - -## Piattaforme supportate - -* Amazon fuoco OS -* Android -* BlackBerry 10 -* iOS -* Windows Phone 7 e 8 -* Windows 8 - -## Oggetti - -* Cattura -* CaptureAudioOptions -* CaptureImageOptions -* CaptureVideoOptions -* CaptureCallback -* CaptureErrorCB -* ConfigurationData -* MediaFile -* MediaFileData - -## Metodi - -* capture.captureAudio -* capture.captureImage -* capture.captureVideo -* MediaFile.getFormatData - -## Proprietà - -* **supportedAudioModes**: la registrazione di formati supportati dal dispositivo audio. (ConfigurationData[]) - -* **supportedImageModes**: la registrazione formati immagine e i formati supportati dal dispositivo. (ConfigurationData[]) - -* **supportedVideoModes**: I formati supportati dal dispositivo e risoluzioni video registrazione. (ConfigurationData[]) - -## capture.captureAudio - -> Avviare l'applicazione registratore audio e restituire informazioni sui file di clip audio catturato. - - navigator.device.capture.captureAudio( - CaptureCB captureSuccess, CaptureErrorCB captureError, [CaptureAudioOptions options] - ); - - -### Descrizione - -Avvia un'operazione asincrona per acquisire registrazioni audio utilizzando l'applicazione di registrazione audio predefinita del dispositivo. L'operazione consente all'utente di dispositivo acquisire registrazioni multiple in una singola sessione. - -L'operazione di acquisizione termina quando l'utente esce la domanda di registrazione audio, o viene raggiunto il numero massimo di registrazioni specificato da `CaptureAudioOptions.limit`. Se nessun valore `limit` del parametro è specificato, il valore predefinito è uno (1), e l'operazione di acquisizione termina dopo l'utente registra una singola clip audio. - -Quando termina l'operazione di acquisizione, l' `CaptureCallback` si esegue con una matrice di oggetti `MediaFile` descrive ogni file catturato clip audio. Se l'utente termina l'operazione prima di un clip audio viene catturato, il `CaptureErrorCallback` viene eseguito con un oggetto di `CaptureError`, con il codice di errore `CaptureError.CAPTURE_NO_MEDIA_FILES`. - -### Piattaforme supportate - -* Amazon fuoco OS -* Android -* BlackBerry 10 -* iOS -* Windows Phone 7 e 8 -* Windows 8 - -### Esempio - - // 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}); - - -### iOS stranezze - -* iOS non ha un'applicazione di registrazione audio predefinita, quindi viene fornita un'interfaccia utente semplice. - -### Windows Phone 7 e 8 stranezze - -* Windows Phone 7 non ha un'applicazione di registrazione audio predefinita, quindi viene fornita un'interfaccia utente semplice. - -## CaptureAudioOptions - -> Incapsula le opzioni di configurazione di acquisizione audio. - -### Proprietà - -* **limite**: il numero massimo di clip audio in grado di registrare l'utente del dispositivo in un'operazione di acquisizione di singolo. Il valore deve essere maggiore o uguale a 1 (default 1). - -* **durata**: la durata massima di un clip audio audio, in pochi secondi. - -### Esempio - - // limit capture operation to 3 media files, no longer than 10 seconds each - var options = { limit: 3, duration: 10 }; - - navigator.device.capture.captureAudio(captureSuccess, captureError, options); - - -### Amazon fuoco OS stranezze - -* Il `duration` parametro non è supportato. Lunghezze di registrazione non può essere limitato a livello di codice. - -### Stranezze Android - -* Il `duration` parametro non è supportato. Lunghezze di registrazione non può essere limitato a livello di codice. - -### BlackBerry 10 capricci - -* Il `duration` parametro non è supportato. Lunghezze di registrazione non può essere limitato a livello di codice. -* Il `limit` parametro non è supportato, quindi solo una registrazione può essere creata per ogni chiamata. - -### iOS stranezze - -* Il `limit` parametro non è supportato, quindi solo una registrazione può essere creata per ogni chiamata. - -## capture.captureImage - -> Avviare l'applicazione fotocamera e restituire informazioni sui file di immagine catturata. - - navigator.device.capture.captureImage( - CaptureCB captureSuccess, CaptureErrorCB captureError, [CaptureImageOptions options] - ); - - -### Descrizione - -Avvia un'operazione asincrona per catturare immagini utilizzando l'applicazione della fotocamera del dispositivo. L'operazione consente agli utenti di catturare più immagini in una sola seduta. - -Le estremità operazione cattura quando l'utente chiude l'applicazione fotocamera, oppure quando viene raggiunto il numero massimo di registrazioni specificato da `CaptureAudioOptions.limit`. Se viene specificato alcun valore `limit`, il valore predefinito è uno (1) e l'operazione di acquisizione termina dopo l'utente acquisisce una singola immagine. - -Quando termina l'operazione di acquisizione, richiama il callback di `CaptureCB` con una matrice di oggetti `MediaFile` descrive ogni file immagine catturata. Se l'utente termina l'operazione prima di catturare un'immagine, `CaptureErrorCB` callback viene eseguito con un oggetto `CaptureError` con un codice di errore `CaptureError.CAPTURE_NO_MEDIA_FILES`. - -### Piattaforme supportate - -* Amazon fuoco OS -* Android -* BlackBerry 10 -* iOS -* Windows Phone 7 e 8 -* Windows 8 - -### Windows Phone 7 capricci - -Invocando l'applicazione nativa fotocamera mentre il dispositivo è collegato tramite Zune non funziona, ed esegue il callback di errore. - -### Esempio - - // 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}); - - -## CaptureImageOptions - -> Incapsula le opzioni di configurazione cattura immagine. - -### Proprietà - -* **limite**: il numero massimo di immagini che l'utente può catturare in un'operazione di cattura singola. Il valore deve essere maggiore o uguale a 1 (default 1). - -### Esempio - - // limit capture operation to 3 images - var options = { limit: 3 }; - - navigator.device.capture.captureImage(captureSuccess, captureError, options); - - -### iOS stranezze - -* Il parametro **limite** non è supportato ed è presa solo una immagine per ogni invocazione. - -## capture.captureVideo - -> Avviare l'applicazione registratore video e restituire informazioni sui file di clip video catturati. - - navigator.device.capture.captureVideo( - CaptureCB captureSuccess, CaptureErrorCB captureError, [CaptureVideoOptions options] - ); - - -### Descrizione - -Avvia un'operazione asincrona per acquisire registrazioni video usando registrazione video applicazione del dispositivo. L'operazione consente all'utente di catturare più registrazioni in una sola seduta. - -L'operazione di acquisizione termina quando l'utente chiude l'applicazione di registrazione video, o viene raggiunto il numero massimo di registrazioni specificato da `CaptureVideoOptions.limit`. Se nessun valore `limit` del parametro è specificato, il valore predefinito è uno (1) e l'operazione di acquisizione termina dopo l'utente registra un unico video clip. - -Quando termina l'operazione di acquisizione, il callback `CaptureCB` esegue con una matrice di oggetti `MediaFile` descrive ogni file videoclip catturati. Se l'utente termina l'operazione prima di catturare un video clip, `CaptureErrorCB` callback viene eseguito con un oggetto `CaptureError` con un codice di errore `CaptureError.CAPTURE_NO_MEDIA_FILES`. - -### Piattaforme supportate - -* Amazon fuoco OS -* Android -* BlackBerry 10 -* iOS -* Windows Phone 7 e 8 -* Windows 8 - -### Esempio - - // 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}); - - -### BlackBerry 10 capricci - -* Cordova per BlackBerry 10 tenta di lanciare l'applicazione **Registratore Video** , fornito da RIM, per catturare le registrazioni video. L'applicazione riceve un `CaptureError.CAPTURE_NOT_SUPPORTED` codice di errore se l'applicazione non è installata sul dispositivo. - -## CaptureVideoOptions - -> Incapsula le opzioni di configurazione di cattura video. - -### Proprietà - -* **limite**: il numero massimo di video clip utente del dispositivo in grado di catturare in un'operazione di cattura singola. Il valore deve essere maggiore o uguale a 1 (default 1). - -* **durata**: la durata massima di un clip video, in pochi secondi. - -### Esempio - - // limit capture operation to 3 video clips - var options = { limit: 3 }; - - navigator.device.capture.captureVideo(captureSuccess, captureError, options); - - -### BlackBerry 10 capricci - -* Il parametro di **durata** non è supportato, quindi la lunghezza delle registrazioni non può essere limitata a livello di codice. - -### iOS stranezze - -* Il parametro **limite** non è supportato. Solo un video viene registrato per ogni invocazione. - -## CaptureCB - -> Richiamato su di un'operazione di acquisizione di mezzi di successo. - - function captureSuccess( MediaFile[] mediaFiles ) { ... }; - - -### Descrizione - -Questa funzione viene eseguita al termine di un'operazione di acquisizione di successo. A questo punto che è stato catturato un file multimediale e neanche l'utente è stato terminato l'applicazione di cattura di media, o è stato raggiunto il limite di cattura. - -Ogni oggetto `MediaFile` descrive un file multimediali catturati. - -### Esempio - - // capture callback - 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 - } - }; - - -## CaptureError - -> Incapsula il codice di errore derivanti da un'operazione di acquisizione di mezzi falliti. - -### Proprietà - -* **codice**: uno dei codici di errore predefiniti elencati di seguito. - -### Costanti - -* `CaptureError.CAPTURE_INTERNAL_ERR`: La videocamera o il microfono non è riuscito a catturare l'immagine o il suono. - -* `CaptureError.CAPTURE_APPLICATION_BUSY`: L'applicazione di cattura audio o fotocamera sta attualmente scontando un'altra richiesta di cattura. - -* `CaptureError.CAPTURE_INVALID_ARGUMENT`: Utilizzo non valido dell'API (per esempio, il valore di `limit` è minore di uno). - -* `CaptureError.CAPTURE_NO_MEDIA_FILES`: L'utente chiude l'applicazione di cattura audio o fotocamera prima di catturare qualcosa. - -* `CaptureError.CAPTURE_NOT_SUPPORTED`: L'operazione di acquisizione richiesto non è supportato. - -## CaptureErrorCB - -> Richiamato se si verifica un errore durante un'operazione di acquisizione di mezzi di comunicazione. - - function captureError( CaptureError error ) { ... }; - - -### Descrizione - -Questa funzione viene eseguita se si verifica un errore quando si tenta di lanciare un media catturare operazione. Fallimento scenari includono quando l'applicazione di cattura è occupato, un'operazione di acquisizione è già in atto, o l'utente annulla l'operazione prima che tutti i file multimediali vengono catturati. - -Questa funzione viene eseguita con un oggetto `CaptureError` che contiene un `codice` di errore appropriato. - -### Esempio - - // capture error callback - var captureError = function(error) { - navigator.notification.alert('Error code: ' + error.code, null, 'Capture Error'); - }; - - -## ConfigurationData - -> Incapsula un insieme di parametri di acquisizione multimediale che supporta un dispositivo. - -### Descrizione - -Descrive le modalità di cattura media supportato dal dispositivo. I dati di configurazione includono il tipo MIME e quote di cattura per l'acquisizione video o immagine. - -I tipi MIME devono rispettare [RFC2046][1]. Esempi: - - [1]: http://www.ietf.org/rfc/rfc2046.txt - -* `video/3gpp` -* `video/quicktime` -* `image/jpeg` -* `audio/amr` -* `audio/wav` - -### Proprietà - -* **tipo**: stringa di caratteri minuscoli con codifica ASCII il che rappresenta il tipo di supporto. (DOMString) - -* **altezza**: l'altezza dell'immagine o del video in pixel. Il valore è zero per clip audio. (Numero) - -* **larghezza**: la larghezza dell'immagine o del video in pixel. Il valore è zero per clip audio. (Numero) - -### Esempio - - // retrieve supported image modes - var imageModes = navigator.device.capture.supportedImageModes; - - // Select mode that has the highest horizontal resolution - var width = 0; - var selectedmode; - for each (var mode in imageModes) { - if (mode.width > width) { - width = mode.width; - selectedmode = mode; - } - } - - -Non supportato da qualsiasi piattaforma. Tutte le matrici di dati di configurazione sono vuote. - -## MediaFile.getFormatData - -> Recupera il formato informazioni su cattura file multimediale. - - mediaFile.getFormatData( - MediaFileDataSuccessCB successCallback, - [MediaFileDataErrorCB errorCallback] - ); - - -### Descrizione - -Questa funzione in modo asincrono tenta di recuperare le informazioni sul formato del file multimediale. Se riuscito, richiama il callback di `MediaFileDataSuccessCB` con un oggetto `MediaFileData`. Se il tentativo fallisce, questa funzione richiama il callback di `MediaFileDataErrorCB`. - -### Piattaforme supportate - -* Amazon fuoco OS -* Android -* BlackBerry 10 -* iOS -* Windows Phone 7 e 8 -* Windows 8 - -### Amazon fuoco OS stranezze - -L'API per informazioni sul formato dei file multimediali accesso è limitato, quindi non tutti `MediaFileData` proprietà supportate. - -### BlackBerry 10 capricci - -Non fornisce un'API per informazioni sui file multimediali, quindi tutti gli oggetti di `MediaFileData` restituiscono con valori predefiniti. - -### Stranezze Android - -L'API per informazioni sul formato dei file multimediali accesso è limitato, quindi non tutti `MediaFileData` proprietà supportate. - -### iOS stranezze - -L'API per informazioni sul formato dei file multimediali accesso è limitato, quindi non tutti `MediaFileData` proprietà supportate. - -## MediaFile - -> Incapsula le proprietà di un file di acquisizione di mezzi di comunicazione. - -### Proprietà - -* **nome**: il nome del file, senza informazioni sul percorso. (DOMString) - -* **fullPath**: il percorso completo del file, tra cui il nome. (DOMString) - -* **tipo**: tipo mime del file (DOMString) - -* **lastModifiedDate**: la data e l'ora quando il file è stato modificato. (Data) - -* **dimensioni**: le dimensioni del file in byte. (Numero) - -### Metodi - -* **MediaFile.getFormatData**: recupera le informazioni sul formato del file multimediale. - -## MediaFileData - -> Incapsula le informazioni sul formato di un file multimediale. - -### Proprietà - -* **codec**: il formato reale del contenuto audio e video. (DOMString) - -* **bitrate**: il bitrate medio del contenuto. Il valore è zero per le immagini. (Numero) - -* **altezza**: l'altezza dell'immagine o del video in pixel. Il valore è zero per clip audio. (Numero) - -* **larghezza**: la larghezza dell'immagine o del video in pixel. Il valore è zero per clip audio. (Numero) - -* **durata**: la lunghezza del clip video o audio in secondi. Il valore è zero per le immagini. (Numero) - -### BlackBerry 10 capricci - -Nessuna API fornisce informazioni sul formato dei file multimediali, quindi l'oggetto `MediaFileData` restituito da `MediaFile.getFormatData` caratteristiche i seguenti valori predefiniti: - -* **codec**: non supportato e restituisce`null`. - -* **bitrate**: non supportato e restituisce zero. - -* **altezza**: non supportato e restituisce zero. - -* **larghezza**: non supportato e restituisce zero. - -* **durata**: non supportato e restituisce zero. - -### Amazon fuoco OS stranezze - -Supporta i seguenti `MediaFileData` proprietà: - -* **codec**: non supportato e restituisce`null`. - -* **bitrate**: non supportato e restituisce zero. - -* **altezza**: supportati: solo i file immagine e video. - -* **larghezza**: supportati: solo i file immagine e video. - -* **durata**: supportati: audio e video file solo - -### Stranezze Android - -Supporta i seguenti `MediaFileData` proprietà: - -* **codec**: non supportato e restituisce`null`. - -* **bitrate**: non supportato e restituisce zero. - -* **altezza**: supportati: solo i file immagine e video. - -* **larghezza**: supportati: solo i file immagine e video. - -* **durata**: supportati: audio e video file solo. - -### iOS stranezze - -Supporta i seguenti `MediaFileData` proprietà: - -* **codec**: non supportato e restituisce`null`. - -* **bitrate**: supportato sui dispositivi iOS4 per solo audio. Restituisce zero per immagini e video. - -* **altezza**: supportati: solo i file immagine e video. - -* **larghezza**: supportati: solo i file immagine e video. - -* **durata**: supportati: audio e video file solo. diff --git a/doc/ja/README.md b/doc/ja/README.md deleted file mode 100644 index a13c5894..00000000 --- a/doc/ja/README.md +++ /dev/null @@ -1,564 +0,0 @@ - - -# cordova-plugin-media-capture - -[![Build Status](https://travis-ci.org/apache/cordova-plugin-media-capture.svg)](https://travis-ci.org/apache/cordova-plugin-media-capture) - -このプラグインは、デバイスのオーディオ、イメージ、およびビデオ キャプチャ機能へのアクセスを提供します。 - -**警告**: イメージ、ビデオ、またはデバイスのカメラやマイクからの音声の収集と利用を重要なプライバシーの問題を発生させます。 アプリのプライバシー ポリシーは、アプリがそのようなセンサーを使用する方法と、記録されたデータは他の当事者と共有かどうかを議論すべきです。 さらに、カメラまたはマイクのアプリの使用がない場合明らかに、ユーザー インターフェイスで、前に、アプリケーションにアクセスするカメラまたはマイクを (デバイスのオペレーティング システムしない場合そう既に) - 時間のお知らせを提供する必要があります。 その通知は、上記の (例えば、 **[ok]**を**おかげで**選択肢を提示する) によってユーザーのアクセス許可を取得するだけでなく、同じ情報を提供する必要があります。 いくつかのアプリのマーケットプ レース - 時間の通知を提供して、カメラまたはマイクにアクセスする前にユーザーからアクセス許可を取得するアプリをする必要がありますに注意してください。 詳細については、プライバシーに関するガイドを参照してください。 - -このプラグインでは、グローバル `navigator.device.capture` オブジェクトを定義します。 - -グローバル スコープではあるがそれがないまで `deviceready` イベントの後です。 - - document.addEventListener("deviceready", onDeviceReady, false); - function onDeviceReady() { - console.log(navigator.device.capture); - } - - -## インストール - - cordova plugin add cordova-plugin-media-capture - - -## サポートされているプラットフォーム - - * アマゾン火 OS - * アンドロイド - * ブラックベリー 10 - * ブラウザー - * iOS - * Windows Phone 7 と 8 - * Windows 8 - * Windows - -## オブジェクト - - * キャプチャ - * CaptureAudioOptions - * CaptureImageOptions - * CaptureVideoOptions - * CaptureCallback - * CaptureErrorCB - * ConfigurationData - * MediaFile - * MediaFileData - -## メソッド - - * capture.captureAudio - * capture.captureImage - * capture.captureVideo - * MediaFile.getFormatData - -## プロパティ - - * **supportedAudioModes**: デバイスでサポートされている形式の録音。(ConfigurationData[]) - - * **supportedImageModes**: 記録画像サイズとデバイスでサポートされている形式です。(ConfigurationData[]) - - * **supportedVideoModes**: 記録のビデオ解像度とデバイスでサポートされている形式です。(ConfigurationData[]) - -## capture.captureAudio - -> オーディオ レコーダー アプリケーションを起動し、キャプチャしたオーディオ クリップ ファイルに関する情報を返します。 - - navigator.device.capture.captureAudio( - CaptureCB captureSuccess, CaptureErrorCB captureError, [CaptureAudioOptions options] - ); - - -### 解説 - -オーディオ録音デバイスの既定のオーディオ録音アプリケーションを使用してキャプチャする非同期操作を開始します。 操作を単一のセッションで複数の録音をキャプチャするデバイスのユーザーことができます。 - -キャプチャ操作は、アプリケーションでは、録音を終了するか、または録音 `CaptureAudioOptions.limit` で指定された最大数に達したときに終了します。 `limit` パラメーター値が指定されていない場合既定の 1 つ (1) とキャプチャ操作をユーザーが 1 つのオーディオ クリップを録音した後終了します。 - -キャプチャ操作が完了したら、キャプチャしたオーディオ クリップの各ファイルを記述する `MediaFile` オブジェクトの配列を `CaptureCallback` を実行します。 場合は、ユーザー操作を終了します、オーディオ クリップをキャプチャする前に、`CaptureErrorCallback` を実行します `CaptureError` オブジェクトと `CaptureError.CAPTURE_NO_MEDIA_FILES` エラーコードをフィーチャーします。 - -### サポートされているプラットフォーム - - * アマゾン火 OS - * アンドロイド - * ブラックベリー 10 - * iOS - * Windows Phone 7 と 8 - * Windows 8 - * Windows - -### 例 - - // 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}); - - -### iOS の癖 - - * iOS に既定のオーディオ録音アプリケーションがない単純なユーザー インターフェイスが提供されます。 - -### Windows Phone 7 と 8 癖 - - * Windows Phone 7 シンプルなユーザー インターフェイスが提供されるので、既定のオーディオ録音アプリケーションはありません。 - -## CaptureAudioOptions - -> オーディオ キャプチャの構成オプションをカプセル化します。 - -### プロパティ - - * **制限**: デバイス ユーザーは、単一のキャプチャ操作で記録することができますオーディオ クリップの最大数。値 1 (デフォルトは 1) 以上にする必要があります。 - - * **期間**: オーディオのサウンド クリップの最大継続時間を秒単位で。 - -### 例 - - // limit capture operation to 3 media files, no longer than 10 seconds each - var options = { limit: 3, duration: 10 }; - - navigator.device.capture.captureAudio(captureSuccess, captureError, options); - - -### アマゾン火 OS 癖 - - * `duration`パラメーターはサポートされていません。長さの記録プログラムで限定することはできません。 - -### Android の癖 - - * `duration`パラメーターはサポートされていません。長さの記録プログラムで限定することはできません。 - -### ブラックベリー 10 癖 - - * `duration`パラメーターはサポートされていません。長さの記録プログラムで限定することはできません。 - * `limit`パラメーターはサポートされていません、各呼び出しに対して、1 つだけ記録を作成できます。 - -### iOS の癖 - - * `limit`パラメーターはサポートされていません、各呼び出しに対して、1 つだけ記録を作成できます。 - -## capture.captureImage - -> カメラ アプリケーションを起動し、キャプチャしたイメージ ファイルに関する情報を返します。 - - navigator.device.capture.captureImage( - CaptureCB captureSuccess, CaptureErrorCB captureError, [CaptureImageOptions options] - ); - - -### 解説 - -デバイスのカメラ アプリケーションを使用して画像をキャプチャする非同期操作を開始します。操作では、単一のセッションで 1 つ以上のイメージをキャプチャすることができます。 - -キャプチャ終了操作時ユーザー カメラ アプリケーションを閉じるまたはのいずれかの `CaptureAudioOptions.limit` によって指定された録音の最大数に達した。 `limit` 値が指定されていない場合、デフォルトは 1 つ (1) キャプチャ操作が終了した後、ユーザーは単一のイメージをキャプチャします。 - -キャプチャ操作が完了したら、キャプチャしたイメージの各ファイルを記述する `MediaFile` オブジェクトの配列を `CaptureCB` コールバックを呼び出します。 ユーザーがイメージをキャプチャする前に操作を終了する場合 `CaptureError.CAPTURE_NO_MEDIA_FILES` のエラー コードを備え `CaptureError` オブジェクトと `CaptureErrorCB` コールバックを実行します。 - -### サポートされているプラットフォーム - - * アマゾン火 OS - * アンドロイド - * ブラックベリー 10 - * ブラウザー - * iOS - * Windows Phone 7 と 8 - * Windows 8 - * Windows - -### Windows Phone 7 の癖 - -Zune を介してお使いのデバイスが接続されているネイティブ カメラ アプリケーションを呼び出すと、動作しませんし、エラー コールバックを実行します。 - -### ブラウザーの癖 - -クロムは、FirefoxとOperaのみ( IEとSafariがないためではないのサポートで動作します navigator.getUserMedia API ) - -のみクローム/オペラで使用可能なファイルの URL をキャプチャを使用して画像を表示します。 Firefox は、IndexedDB ストレージにキャプチャした画像を保存 (ファイルのプラグインのマニュアルを参照)、このために、キャプチャしたイメージを表示する唯一の方法、それとその DataURL を使用してショーを読みます。 - -### 例 - - // 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}); - - -## CaptureImageOptions - -> イメージ キャプチャの構成オプションをカプセル化します。 - -### プロパティ - - * **制限**: ユーザーは、単一のキャプチャ操作でキャプチャすることができますイメージの最大数。値 1 (デフォルトは 1) 以上にする必要があります。 - -### 例 - - // limit capture operation to 3 images - var options = { limit: 3 }; - - navigator.device.capture.captureImage(captureSuccess, captureError, options); - - -### iOS の癖 - - * **Limit**パラメーターはサポートされていませんとだけ 1 枚の画像の呼び出しごと。 - -## capture.captureVideo - -> ビデオ レコーダー アプリケーションを起動し、キャプチャしたビデオ クリップ ファイルに関する情報を返します。 - - navigator.device.capture.captureVideo( - CaptureCB captureSuccess, CaptureErrorCB captureError, [CaptureVideoOptions options] - ); - - -### 解説 - -デバイスのビデオ録画アプリケーションを使用してビデオ記録をキャプチャする非同期操作を開始します。操作は、単一のセッションで 1 つ以上の録音をキャプチャすることができます。 - -キャプチャ操作はユーザーがビデオ録画アプリケーションを終了または `CaptureVideoOptions.limit` で指定された録音の最大数に達したときに終了します。 `limit` パラメーター値が指定されていない場合それデフォルト値は 1 (1) と、ユーザーは 1 つのビデオ クリップを記録した後にキャプチャ操作が終了しました。 - -キャプチャ操作が完了したら、`CaptureCB` コールバック実行に使用する各ビデオ クリップのキャプチャ ファイルを記述する `MediaFile` オブジェクトの配列。 ユーザーがビデオ クリップをキャプチャする前に操作を終了する場合 `CaptureError.CAPTURE_NO_MEDIA_FILES` のエラー コードを備え `CaptureError` オブジェクトと `CaptureErrorCB` コールバックを実行します。 - -### サポートされているプラットフォーム - - * アマゾン火 OS - * アンドロイド - * ブラックベリー 10 - * iOS - * Windows Phone 7 と 8 - * Windows 8 - * Windows - -### 例 - - // 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}); - - -### ブラックベリー 10 癖 - - * ブラックベリー 10 コルドバ**ビデオ レコーダー**アプリケーションを起動し、リム、によって提供されるビデオ録画をキャプチャしようとします。 アプリは受け取ります、 `CaptureError.CAPTURE_NOT_SUPPORTED` 、アプリケーションがデバイスにインストールされていない場合はエラー コード。 - -## CaptureVideoOptions - -> ビデオ キャプチャの構成オプションをカプセル化します。 - -### プロパティ - - * **制限**: デバイスのユーザーを単一のキャプチャ操作でキャプチャすることができますビデオ クリップの最大数。値 1 (デフォルトは 1) 以上にする必要があります。 - - * **期間**: ビデオ クリップの最大継続時間を秒単位で。 - -### 例 - - // limit capture operation to 3 video clips - var options = { limit: 3 }; - - navigator.device.capture.captureVideo(captureSuccess, captureError, options); - - -### ブラックベリー 10 癖 - - * **期間**パラメーターはサポートされていませんので、録音の長さは限られたプログラムを使用することはできません。 - -### iOS の癖 - - * **Limit**パラメーターはサポートされていません。のみ 1 つのビデオは、呼び出しごとに記録されます。 - -## CaptureCB - -> 成功したメディア キャプチャ操作時に呼び出されます。 - - function captureSuccess( MediaFile[] mediaFiles ) { ... }; - - -### 解説 - -この関数は成功したキャプチャ操作の完了後に実行します。 いずれかのメディア ファイルをキャプチャすると、この時点で、ユーザーが終了しているメディア ・ キャプチャ ・ アプリケーションまたはキャプチャ制限に達しています。 - -`MediaFile` の各オブジェクトにはキャプチャしたメディア ファイルについて説明します。 - -### 例 - - // capture callback - 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 - } - }; - - -## CaptureError - -> 失敗したメディア キャプチャ操作からの結果のエラー コードをカプセル化します。 - -### プロパティ - - * **コード**: 事前定義されたエラー コードのいずれか次のとおりです。 - -### 定数 - - * `CaptureError.CAPTURE_INTERNAL_ERR`: カメラまたはマイクの画像やサウンドをキャプチャに失敗しました。 - - * `CaptureError.CAPTURE_APPLICATION_BUSY`: 現在カメラやオーディオのキャプチャのアプリケーション別のキャプチャ要求を提供します。 - - * `CaptureError.CAPTURE_INVALID_ARGUMENT`: 無効な API の使用 (例えば、の値 `limit` が 1 未満です)。 - - * `CaptureError.CAPTURE_NO_MEDIA_FILES`: ユーザーが何かをキャプチャする前にカメラやオーディオのキャプチャ アプリケーションを終了します。 - - * `CaptureError.CAPTURE_NOT_SUPPORTED`: 要求されたキャプチャ操作はサポートされていません。 - -## CaptureErrorCB - -> メディア キャプチャ操作中にエラーが発生した場合に呼び出されます。 - - function captureError( CaptureError error ) { ... }; - - -### 解説 - -この関数は、エラーが発生した場合を起動しようとすると、メディア操作のキャプチャを実行します。 障害シナリオを含めますキャプチャ アプリケーションがビジー状態、キャプチャ操作は既に起こって、または、操作をキャンセルする前にメディア ファイルが自動的にキャプチャされます。 - -この関数は適切なエラー `code` を含む `CaptureError` オブジェクトで実行します。. - -### 例 - - // capture error callback - var captureError = function(error) { - navigator.notification.alert('Error code: ' + error.code, null, 'Capture Error'); - }; - - -## ConfigurationData - -> デバイスがサポートするメディア キャプチャ パラメーターのセットをカプセル化します。 - -### 解説 - -デバイスでサポートされているメディアのキャプチャのモードについて説明します。構成データには、MIME の種類、およびビデオやイメージ キャプチャのキャプチャ寸法が含まれます。 - -MIME の種類は [RFC2046](http://www.ietf.org/rfc/rfc2046.txt) に従う必要があります。例: - - * `video/3gpp` - * `video/quicktime` - * `image/jpeg` - * `audio/amr` - * `audio/wav` - -### プロパティ - - * **タイプ**: 小文字の文字列を ASCII でエンコードされたメディアの種類を表します。(,) - - * **高さ**: イメージまたはビデオのピクセルでの高さ。値は、サウンド クリップの場合は 0 です。(数) - - * **幅**: イメージまたはピクセルのビデオの幅。値は、サウンド クリップの場合は 0 です。(数) - -### 例 - - // retrieve supported image modes - var imageModes = navigator.device.capture.supportedImageModes; - - // Select mode that has the highest horizontal resolution - var width = 0; - var selectedmode; - for each (var mode in imageModes) { - if (mode.width > width) { - width = mode.width; - selectedmode = mode; - } - } - - -任意のプラットフォームでサポートされていません。すべての構成データの配列は空です。 - -## MediaFile.getFormatData - -> 取得についての書式情報メディア キャプチャ ファイル。 - - mediaFile.getFormatData( - MediaFileDataSuccessCB successCallback, - [MediaFileDataErrorCB errorCallback] - ); - - -### 解説 - -この関数は、非同期的にメディア ファイルの形式情報を取得しようとします。 成功した場合、`MediaFileData` オブジェクトと `MediaFileDataSuccessCB` コールバックを呼び出します。 失敗した場合、この関数は `MediaFileDataErrorCB` コールバックを呼び出します。 - -### サポートされているプラットフォーム - - * アマゾン火 OS - * アンドロイド - * ブラックベリー 10 - * iOS - * Windows Phone 7 と 8 - * Windows 8 - * Windows - -### アマゾン火 OS 癖 - -API 情報にアクセスするメディア ファイル形式は限られて、それで、必ずしもすべて `MediaFileData` プロパティがサポートされます。 - -### ブラックベリー 10 癖 - -既定値を持つすべての `MediaFileData` オブジェクトを返すので、メディア ファイルについて API を提供しません。 - -### Android の癖 - -API 情報にアクセスするメディア ファイル形式は限られて、それで、必ずしもすべて `MediaFileData` プロパティがサポートされます。 - -### iOS の癖 - -API 情報にアクセスするメディア ファイル形式は限られて、それで、必ずしもすべて `MediaFileData` プロパティがサポートされます。 - -## MediaFile - -> メディア キャプチャ ファイルのプロパティをカプセル化します。 - -### プロパティ - - * **名前**: パス情報なしのファイルの名前。(,) - - * **fullPath**: 名を含むファイルの完全パス。(,) - - * **タイプ**: ファイルの mime の種類 (,) - - * **ファイルサイズ**: 日付と時刻、ファイルが最後に変更されました。(日) - - * **サイズ**: バイトで、ファイルのサイズ。(数) - -### メソッド - - * **MediaFile.getFormatData**: メディア ファイルの形式情報を取得します。 - -## MediaFileData - -> メディア ファイルの形式情報をカプセル化します。 - -### プロパティ - - * **コーデック**: オーディオおよびビデオ コンテンツの実際のフォーマット。(,) - - * **ビットレート**: コンテンツの平均ビットレート。値が画像の場合は 0 です。(数) - - * **高さ**: イメージまたはビデオのピクセルでの高さ。値は、オーディオ クリップの場合は 0 です。(数) - - * **幅**: イメージまたはピクセルのビデオの幅。値は、オーディオ クリップの場合は 0 です。(数) - - * **期間**: 秒のビデオまたはサウンドのクリップの長さ。値が画像の場合は 0 です。(数) - -### ブラックベリー 10 癖 - -API には、メディア ファイルの形式情報提供しません `MediaFile.getFormatData` 機能によって返される `MediaFileData` オブジェクト次の既定値。 - - * **コーデック**: いないサポートしを返します`null`. - - * **ビットレート**: いないサポートし、ゼロを返します。 - - * **高さ**: ないサポートされており、ゼロを返します。 - - * **幅**: ないサポートされており、ゼロを返します。 - - * **期間**: ないサポートされており、ゼロを返します。 - -### アマゾン火 OS 癖 - -以下がサポート `MediaFileData` プロパティ。 - - * **コーデック**: いないサポートしを返します`null`. - - * **ビットレート**: いないサポートし、ゼロを返します。 - - * **高さ**: サポート: イメージ ファイルやビデオ ファイルのみです。 - - * **幅**: サポート: イメージ ファイルやビデオ ファイルのみです。 - - * **期間**: サポート: オーディオおよびビデオ ファイルのみ - -### Android の癖 - -以下がサポート `MediaFileData` プロパティ。 - - * **コーデック**: いないサポートしを返します`null`. - - * **ビットレート**: いないサポートし、ゼロを返します。 - - * **高さ**: サポート: イメージ ファイルやビデオ ファイルのみです。 - - * **幅**: サポート: イメージ ファイルやビデオ ファイルのみです。 - - * **期間**: サポート: オーディオおよびビデオ ファイルのみです。 - -### iOS の癖 - -以下がサポート `MediaFileData` プロパティ。 - - * **コーデック**: いないサポートしを返します`null`. - - * **ビットレート**: iOS4 オーディオのみのデバイスでサポートされています。画像や動画はゼロを返します。 - - * **高さ**: サポート: イメージ ファイルやビデオ ファイルのみです。 - - * **幅**: サポート: イメージ ファイルやビデオ ファイルのみです。 - - * **期間**: サポート: オーディオおよびビデオ ファイルのみです。 \ No newline at end of file diff --git a/doc/ja/index.md b/doc/ja/index.md deleted file mode 100644 index cd363d56..00000000 --- a/doc/ja/index.md +++ /dev/null @@ -1,551 +0,0 @@ - - -# cordova-plugin-media-capture - -このプラグインは、デバイスのオーディオ、イメージ、およびビデオ キャプチャ機能へのアクセスを提供します。 - -**警告**: イメージ、ビデオ、またはデバイスのカメラやマイクからの音声の収集と利用を重要なプライバシーの問題を発生させます。 アプリのプライバシー ポリシーは、アプリがそのようなセンサーを使用する方法と、記録されたデータは他の当事者と共有かどうかを議論すべきです。 さらに、カメラまたはマイクのアプリの使用がない場合明らかに、ユーザー インターフェイスで、前に、アプリケーションにアクセスするカメラまたはマイクを (デバイスのオペレーティング システムしない場合そう既に) - 時間のお知らせを提供する必要があります。 その通知は、上記の (例えば、 **[ok]**を**おかげで**選択肢を提示する) によってユーザーのアクセス許可を取得するだけでなく、同じ情報を提供する必要があります。 いくつかのアプリのマーケットプ レース - 時間の通知を提供して、カメラまたはマイクにアクセスする前にユーザーからアクセス許可を取得するアプリをする必要がありますに注意してください。 詳細については、プライバシーに関するガイドを参照してください。 - -このプラグインでは、グローバル `navigator.device.capture` オブジェクトを定義します。 - -グローバル スコープではあるがそれがないまで `deviceready` イベントの後です。 - - document.addEventListener("deviceready", onDeviceReady, false); - function onDeviceReady() { - console.log(navigator.device.capture); - } - - -## インストール - - cordova plugin add cordova-plugin-media-capture - - -## サポートされているプラットフォーム - -* アマゾン火 OS -* アンドロイド -* ブラックベリー 10 -* iOS -* Windows Phone 7 と 8 -* Windows 8 - -## オブジェクト - -* キャプチャ -* CaptureAudioOptions -* CaptureImageOptions -* CaptureVideoOptions -* CaptureCallback -* CaptureErrorCB -* ConfigurationData -* MediaFile -* MediaFileData - -## メソッド - -* capture.captureAudio -* capture.captureImage -* capture.captureVideo -* MediaFile.getFormatData - -## プロパティ - -* **supportedAudioModes**: デバイスでサポートされている形式の録音。(ConfigurationData[]) - -* **supportedImageModes**: 記録画像サイズとデバイスでサポートされている形式です。(ConfigurationData[]) - -* **supportedVideoModes**: 記録のビデオ解像度とデバイスでサポートされている形式です。(ConfigurationData[]) - -## capture.captureAudio - -> オーディオ レコーダー アプリケーションを起動し、キャプチャしたオーディオ クリップ ファイルに関する情報を返します。 - - navigator.device.capture.captureAudio( - CaptureCB captureSuccess, CaptureErrorCB captureError, [CaptureAudioOptions options] - ); - - -### 説明 - -オーディオ録音デバイスの既定のオーディオ録音アプリケーションを使用してキャプチャする非同期操作を開始します。 操作を単一のセッションで複数の録音をキャプチャするデバイスのユーザーことができます。 - -キャプチャ操作は、アプリケーションでは、録音を終了するか、または録音 `CaptureAudioOptions.limit` で指定された最大数に達したときに終了します。 `limit` パラメーター値が指定されていない場合既定の 1 つ (1) とキャプチャ操作をユーザーが 1 つのオーディオ クリップを録音した後終了します。 - -キャプチャ操作が完了したら、キャプチャしたオーディオ クリップの各ファイルを記述する `MediaFile` オブジェクトの配列を `CaptureCallback` を実行します。 場合は、ユーザー操作を終了します、オーディオ クリップをキャプチャする前に、`CaptureErrorCallback` を実行します `CaptureError` オブジェクトと `CaptureError.CAPTURE_NO_MEDIA_FILES` エラーコードをフィーチャーします。 - -### サポートされているプラットフォーム - -* アマゾン火 OS -* アンドロイド -* ブラックベリー 10 -* iOS -* Windows Phone 7 と 8 -* Windows 8 - -### 例 - - // 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}); - - -### iOS の癖 - -* iOS に既定のオーディオ録音アプリケーションがない単純なユーザー インターフェイスが提供されます。 - -### Windows Phone 7 と 8 癖 - -* Windows Phone 7 シンプルなユーザー インターフェイスが提供されるので、既定のオーディオ録音アプリケーションはありません。 - -## CaptureAudioOptions - -> オーディオ キャプチャの構成オプションをカプセル化します。 - -### プロパティ - -* **制限**: デバイス ユーザーは、単一のキャプチャ操作で記録することができますオーディオ クリップの最大数。値 1 (デフォルトは 1) 以上にする必要があります。 - -* **期間**: オーディオのサウンド クリップの最大継続時間を秒単位で。 - -### 例 - - // limit capture operation to 3 media files, no longer than 10 seconds each - var options = { limit: 3, duration: 10 }; - - navigator.device.capture.captureAudio(captureSuccess, captureError, options); - - -### アマゾン火 OS 癖 - -* `duration`パラメーターはサポートされていません。長さの記録プログラムで限定することはできません。 - -### Android の癖 - -* `duration`パラメーターはサポートされていません。長さの記録プログラムで限定することはできません。 - -### ブラックベリー 10 癖 - -* `duration`パラメーターはサポートされていません。長さの記録プログラムで限定することはできません。 -* `limit`パラメーターはサポートされていません、各呼び出しに対して、1 つだけ記録を作成できます。 - -### iOS の癖 - -* `limit`パラメーターはサポートされていません、各呼び出しに対して、1 つだけ記録を作成できます。 - -## capture.captureImage - -> カメラ アプリケーションを起動し、キャプチャしたイメージ ファイルに関する情報を返します。 - - navigator.device.capture.captureImage( - CaptureCB captureSuccess, CaptureErrorCB captureError, [CaptureImageOptions options] - ); - - -### 説明 - -デバイスのカメラ アプリケーションを使用して画像をキャプチャする非同期操作を開始します。操作では、単一のセッションで 1 つ以上のイメージをキャプチャすることができます。 - -キャプチャ終了操作時ユーザー カメラ アプリケーションを閉じるまたはのいずれかの `CaptureAudioOptions.limit` によって指定された録音の最大数に達した。 `limit` 値が指定されていない場合、デフォルトは 1 つ (1) キャプチャ操作が終了した後、ユーザーは単一のイメージをキャプチャします。 - -キャプチャ操作が完了したら、キャプチャしたイメージの各ファイルを記述する `MediaFile` オブジェクトの配列を `CaptureCB` コールバックを呼び出します。 ユーザーがイメージをキャプチャする前に操作を終了する場合 `CaptureError.CAPTURE_NO_MEDIA_FILES` のエラー コードを備え `CaptureError` オブジェクトと `CaptureErrorCB` コールバックを実行します。 - -### サポートされているプラットフォーム - -* アマゾン火 OS -* アンドロイド -* ブラックベリー 10 -* iOS -* Windows Phone 7 と 8 -* Windows 8 - -### Windows Phone 7 の癖 - -Zune を介してお使いのデバイスが接続されているネイティブ カメラ アプリケーションを呼び出すと、動作しませんし、エラー コールバックを実行します。 - -### 例 - - // 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}); - - -## CaptureImageOptions - -> イメージ キャプチャの構成オプションをカプセル化します。 - -### プロパティ - -* **制限**: ユーザーは、単一のキャプチャ操作でキャプチャすることができますイメージの最大数。値 1 (デフォルトは 1) 以上にする必要があります。 - -### 例 - - // limit capture operation to 3 images - var options = { limit: 3 }; - - navigator.device.capture.captureImage(captureSuccess, captureError, options); - - -### iOS の癖 - -* **Limit**パラメーターはサポートされていませんとだけ 1 枚の画像の呼び出しごと。 - -## capture.captureVideo - -> ビデオ レコーダー アプリケーションを起動し、キャプチャしたビデオ クリップ ファイルに関する情報を返します。 - - navigator.device.capture.captureVideo( - CaptureCB captureSuccess, CaptureErrorCB captureError, [CaptureVideoOptions options] - ); - - -### 説明 - -デバイスのビデオ録画アプリケーションを使用してビデオ記録をキャプチャする非同期操作を開始します。操作は、単一のセッションで 1 つ以上の録音をキャプチャすることができます。 - -キャプチャ操作はユーザーがビデオ録画アプリケーションを終了または `CaptureVideoOptions.limit` で指定された録音の最大数に達したときに終了します。 `limit` パラメーター値が指定されていない場合それデフォルト値は 1 (1) と、ユーザーは 1 つのビデオ クリップを記録した後にキャプチャ操作が終了しました。 - -キャプチャ操作が完了したら、`CaptureCB` コールバック実行に使用する各ビデオ クリップのキャプチャ ファイルを記述する `MediaFile` オブジェクトの配列。 ユーザーがビデオ クリップをキャプチャする前に操作を終了する場合 `CaptureError.CAPTURE_NO_MEDIA_FILES` のエラー コードを備え `CaptureError` オブジェクトと `CaptureErrorCB` コールバックを実行します。 - -### サポートされているプラットフォーム - -* アマゾン火 OS -* アンドロイド -* ブラックベリー 10 -* iOS -* Windows Phone 7 と 8 -* Windows 8 - -### 例 - - // 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}); - - -### ブラックベリー 10 癖 - -* ブラックベリー 10 コルドバ**ビデオ レコーダー**アプリケーションを起動し、リム、によって提供されるビデオ録画をキャプチャしようとします。 アプリは受け取ります、 `CaptureError.CAPTURE_NOT_SUPPORTED` 、アプリケーションがデバイスにインストールされていない場合はエラー コード。 - -## CaptureVideoOptions - -> ビデオ キャプチャの構成オプションをカプセル化します。 - -### プロパティ - -* **制限**: デバイスのユーザーを単一のキャプチャ操作でキャプチャすることができますビデオ クリップの最大数。値 1 (デフォルトは 1) 以上にする必要があります。 - -* **期間**: ビデオ クリップの最大継続時間を秒単位で。 - -### 例 - - // limit capture operation to 3 video clips - var options = { limit: 3 }; - - navigator.device.capture.captureVideo(captureSuccess, captureError, options); - - -### ブラックベリー 10 癖 - -* **期間**パラメーターはサポートされていませんので、録音の長さは限られたプログラムを使用することはできません。 - -### iOS の癖 - -* **Limit**パラメーターはサポートされていません。のみ 1 つのビデオは、呼び出しごとに記録されます。 - -## CaptureCB - -> 成功したメディア キャプチャ操作時に呼び出されます。 - - function captureSuccess( MediaFile[] mediaFiles ) { ... }; - - -### 説明 - -この関数は成功したキャプチャ操作の完了後に実行します。 いずれかのメディア ファイルをキャプチャすると、この時点で、ユーザーが終了しているメディア ・ キャプチャ ・ アプリケーションまたはキャプチャ制限に達しています。 - -`MediaFile` の各オブジェクトにはキャプチャしたメディア ファイルについて説明します。 - -### 例 - - // capture callback - 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 - } - }; - - -## CaptureError - -> 失敗したメディア キャプチャ操作からの結果のエラー コードをカプセル化します。 - -### プロパティ - -* **コード**: 事前定義されたエラー コードのいずれか次のとおりです。 - -### 定数 - -* `CaptureError.CAPTURE_INTERNAL_ERR`: カメラまたはマイクの画像やサウンドをキャプチャに失敗しました。 - -* `CaptureError.CAPTURE_APPLICATION_BUSY`: 現在カメラやオーディオのキャプチャのアプリケーション別のキャプチャ要求を提供します。 - -* `CaptureError.CAPTURE_INVALID_ARGUMENT`: 無効な API の使用 (例えば、の値 `limit` が 1 未満です)。 - -* `CaptureError.CAPTURE_NO_MEDIA_FILES`: ユーザーが何かをキャプチャする前にカメラやオーディオのキャプチャ アプリケーションを終了します。 - -* `CaptureError.CAPTURE_NOT_SUPPORTED`: 要求されたキャプチャ操作はサポートされていません。 - -## CaptureErrorCB - -> メディア キャプチャ操作中にエラーが発生した場合に呼び出されます。 - - function captureError( CaptureError error ) { ... }; - - -### 説明 - -この関数は、エラーが発生した場合を起動しようとすると、メディア操作のキャプチャを実行します。 障害シナリオを含めますキャプチャ アプリケーションがビジー状態、キャプチャ操作は既に起こって、または、操作をキャンセルする前にメディア ファイルが自動的にキャプチャされます。 - -この関数は適切なエラー `code` を含む `CaptureError` オブジェクトで実行します。. - -### 例 - - // capture error callback - var captureError = function(error) { - navigator.notification.alert('Error code: ' + error.code, null, 'Capture Error'); - }; - - -## ConfigurationData - -> デバイスがサポートするメディア キャプチャ パラメーターのセットをカプセル化します。 - -### 説明 - -デバイスでサポートされているメディアのキャプチャのモードについて説明します。構成データには、MIME の種類、およびビデオやイメージ キャプチャのキャプチャ寸法が含まれます。 - -MIME の種類は [RFC2046][1] に従う必要があります。例: - - [1]: http://www.ietf.org/rfc/rfc2046.txt - -* `video/3gpp` -* `video/quicktime` -* `image/jpeg` -* `audio/amr` -* `audio/wav` - -### プロパティ - -* **タイプ**: 小文字の文字列を ASCII でエンコードされたメディアの種類を表します。(,) - -* **高さ**: イメージまたはビデオのピクセルでの高さ。値は、サウンド クリップの場合は 0 です。(数) - -* **幅**: イメージまたはピクセルのビデオの幅。値は、サウンド クリップの場合は 0 です。(数) - -### 例 - - // retrieve supported image modes - var imageModes = navigator.device.capture.supportedImageModes; - - // Select mode that has the highest horizontal resolution - var width = 0; - var selectedmode; - for each (var mode in imageModes) { - if (mode.width > width) { - width = mode.width; - selectedmode = mode; - } - } - - -任意のプラットフォームでサポートされていません。すべての構成データの配列は空です。 - -## MediaFile.getFormatData - -> 取得についての書式情報メディア キャプチャ ファイル。 - - mediaFile.getFormatData( - MediaFileDataSuccessCB successCallback, - [MediaFileDataErrorCB errorCallback] - ); - - -### 説明 - -この関数は、非同期的にメディア ファイルの形式情報を取得しようとします。 成功した場合、`MediaFileData` オブジェクトと `MediaFileDataSuccessCB` コールバックを呼び出します。 失敗した場合、この関数は `MediaFileDataErrorCB` コールバックを呼び出します。 - -### サポートされているプラットフォーム - -* アマゾン火 OS -* アンドロイド -* ブラックベリー 10 -* iOS -* Windows Phone 7 と 8 -* Windows 8 - -### アマゾン火 OS 癖 - -API 情報にアクセスするメディア ファイル形式は限られて、それで、必ずしもすべて `MediaFileData` プロパティがサポートされます。 - -### ブラックベリー 10 癖 - -既定値を持つすべての `MediaFileData` オブジェクトを返すので、メディア ファイルについて API を提供しません。 - -### Android の癖 - -API 情報にアクセスするメディア ファイル形式は限られて、それで、必ずしもすべて `MediaFileData` プロパティがサポートされます。 - -### iOS の癖 - -API 情報にアクセスするメディア ファイル形式は限られて、それで、必ずしもすべて `MediaFileData` プロパティがサポートされます。 - -## MediaFile - -> メディア キャプチャ ファイルのプロパティをカプセル化します。 - -### プロパティ - -* **名前**: パス情報なしのファイルの名前。(,) - -* **fullPath**: 名を含むファイルの完全パス。(,) - -* **タイプ**: ファイルの mime の種類 (,) - -* **ファイルサイズ**: 日付と時刻、ファイルが最後に変更されました。(日) - -* **サイズ**: バイトで、ファイルのサイズ。(数) - -### メソッド - -* **MediaFile.getFormatData**: メディア ファイルの形式情報を取得します。 - -## MediaFileData - -> メディア ファイルの形式情報をカプセル化します。 - -### プロパティ - -* **コーデック**: オーディオおよびビデオ コンテンツの実際のフォーマット。(,) - -* **ビットレート**: コンテンツの平均ビットレート。値が画像の場合は 0 です。(数) - -* **高さ**: イメージまたはビデオのピクセルでの高さ。値は、オーディオ クリップの場合は 0 です。(数) - -* **幅**: イメージまたはピクセルのビデオの幅。値は、オーディオ クリップの場合は 0 です。(数) - -* **期間**: 秒のビデオまたはサウンドのクリップの長さ。値が画像の場合は 0 です。(数) - -### ブラックベリー 10 癖 - -API には、メディア ファイルの形式情報提供しません `MediaFile.getFormatData` 機能によって返される `MediaFileData` オブジェクト次の既定値。 - -* **コーデック**: ないサポートされておりを返します`null`. - -* **ビットレート**: ないサポートされており、ゼロを返します。 - -* **高さ**: ないサポートされており、ゼロを返します。 - -* **幅**: ないサポートされており、ゼロを返します。 - -* **期間**: ないサポートされており、ゼロを返します。 - -### アマゾン火 OS 癖 - -以下がサポート `MediaFileData` プロパティ。 - -* **コーデック**: いないサポートしを返します`null`. - -* **ビットレート**: いないサポートし、ゼロを返します。 - -* **高さ**: サポート: イメージ ファイルやビデオ ファイルのみです。 - -* **幅**: サポート: イメージ ファイルやビデオ ファイルのみです。 - -* **期間**: サポート: オーディオおよびビデオ ファイルのみ - -### Android の癖 - -以下がサポート `MediaFileData` プロパティ。 - -* **コーデック**: ないサポートされておりを返します`null`. - -* **ビットレート**: ないサポートされており、ゼロを返します。 - -* **高さ**: サポート: イメージ ファイルやビデオ ファイルのみです。 - -* **幅**: サポート: イメージ ファイルやビデオ ファイルのみです。 - -* **期間**: サポート: オーディオおよびビデオ ファイルのみです。 - -### iOS の癖 - -以下がサポート `MediaFileData` プロパティ。 - -* **コーデック**: ないサポートされておりを返します`null`. - -* **ビットレート**: iOS4 オーディオのみのデバイスでサポートされています。画像や動画はゼロを返します。 - -* **高さ**: サポート: イメージ ファイルやビデオ ファイルのみです。 - -* **幅**: サポート: イメージ ファイルやビデオ ファイルのみです。 - -* **期間**: サポート: オーディオおよびビデオ ファイルのみです。 diff --git a/doc/ko/README.md b/doc/ko/README.md deleted file mode 100644 index 160ef046..00000000 --- a/doc/ko/README.md +++ /dev/null @@ -1,564 +0,0 @@ - - -# cordova-plugin-media-capture - -[![Build Status](https://travis-ci.org/apache/cordova-plugin-media-capture.svg)](https://travis-ci.org/apache/cordova-plugin-media-capture) - -이 플러그인 디바이스의 오디오, 이미지 및 비디오 캡처 기능에 대 한 액세스를 제공합니다. - -**경고**: 수집 및 이미지, 비디오 또는 오디오 장치의 카메라 또는 마이크를 사용 하 여 중요 한 개인 정보 보호 문제를 제기 하고있다. 응용 프로그램의 개인 정보 보호 정책 응용 프로그램 같은 센서를 사용 하는 방법 및 다른 당사자와 함께 기록 된 데이터는 공유 하는 여부를 토론 해야 한다. 또한, 애플 리 케이 션의 카메라 또는 마이크를 사용 하지 않으면 명백한 사용자 인터페이스에서, 제공 해야 그냥--시간 통지 (해당 되는 경우 장치 운영 체제 이렇게 이미 하지 않는) 응용 프로그램 카메라 또는 마이크에 액세스 하기 전에. 그 통지는 (예를 들어, **확인** 및 **아니오**선택 제시) 하 여 사용자의 허가 취득 뿐만 아니라, 위에서 언급 된 동일한 정보를 제공 해야 합니다. Note 일부 애플 리 케이 션 장 터 저스트-인-타임 공지 및 카메라 또는 마이크에 액세스 하기 전에 사용자에 게 허가를 귀하의 응용 프로그램에 필요할 수 있습니다. 자세한 내용은 개인 정보 보호 가이드를 참조 하십시오. - -이 플러그인 글로벌 `navigator.device.capture` 개체를 정의합니다. - -전역 범위에 있지만 그것은 불가능까지 `deviceready` 이벤트 후. - - document.addEventListener("deviceready", onDeviceReady, false); - function onDeviceReady() { - console.log(navigator.device.capture); - } - - -## 설치 - - cordova plugin add cordova-plugin-media-capture - - -## 지원 되는 플랫폼 - - * 아마존 화재 운영 체제 - * 안 드 로이드 - * 블랙베리 10 - * 브라우저 - * iOS - * Windows Phone 7과 8 - * 윈도우 8 - * 윈도우 - -## 개체 - - * Capture - * CaptureAudioOptions - * CaptureImageOptions - * CaptureVideoOptions - * CaptureCallback - * CaptureErrorCB - * ConfigurationData - * MediaFile - * MediaFileData - -## 메서드 - - * capture.captureAudio - * capture.captureImage - * capture.captureVideo - * MediaFile.getFormatData - -## 속성 - - * **supportedAudioModes**: 오디오 녹음 장치에 의해 지원 되는 형식. (ConfigurationData[]) - - * **supportedImageModes**: 기록 이미지 크기 및 장치에서 지원 되는 형식. (ConfigurationData[]) - - * **supportedVideoModes**: 녹음 비디오 해상도 및 장치에 의해 지원 되는 형식. (ConfigurationData[]) - -## capture.captureAudio - -> 오디오 레코더 응용 프로그램을 시작 하 고 캡처한 오디오 클립 파일에 대 한 정보를 반환 합니다. - - navigator.device.capture.captureAudio( - CaptureCB captureSuccess, CaptureErrorCB captureError, [CaptureAudioOptions options] - ); - - -### 설명 - -소자의 기본 오디오 녹음 응용 프로그램을 사용 하 여 오디오 녹음을 캡처하는 비동기 작업을 시작 합니다. 작업 장치 사용자를 단일 세션에서 여러 녹화를 캡처할 수 있습니다. - -캡처 작업 사용자가 오디오 녹음 응용 프로그램을 종료 하거나 녹음 `CaptureAudioOptions.limit`에 의해 지정 된 최대 수에 도달 하면 끝납니다. `limit` 매개 변수 값을 지정 하지, 하나 (1), 기본 및 캡처 작업이 종료 되 면 사용자는 하나의 오디오 클립을 기록 하는 후. - -캡처 작업이 완료 되 면 각 캡처된 오디오 클립 파일 설명 `MediaFile` 개체의 배열과 함께 `CaptureCallback`를 실행 합니다. 사용자 전에 오디오 클립을 캡처 작업이 종료 되 면, `CaptureErrorCallback` `CaptureError.CAPTURE_NO_MEDIA_FILES` 오류 코드를 갖춘 `CaptureError` 개체를 실행 합니다. - -### 지원 되는 플랫폼 - - * 아마존 화재 운영 체제 - * 안 드 로이드 - * 블랙베리 10 - * iOS - * Windows Phone 7과 8 - * 윈도우 8 - * 윈도우 - -### 예를 들어 - - // 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}); - - -### iOS 단점 - - * iOS 없으므로 기본 오디오 녹음 응용 프로그램을 간단한 사용자 인터페이스를 제공 합니다. - -### Windows Phone 7, 8 특수 - - * Windows Phone 7 없으므로 기본 오디오 녹음 응용 프로그램을 간단한 사용자 인터페이스를 제공 합니다. - -## CaptureAudioOptions - -> 오디오 캡처 구성 옵션을 캡슐화합니다. - -### 속성 - - * **제한**: 최대 오디오 클립 장치 사용자는 단일 캡처 작업에 기록할 수 있습니다. 값 1 (기본값: 1) 보다 크거나 같아야 합니다. - - * **기간**: 오디오 사운드 클립의 최대 기간 초. - -### 예를 들어 - - // limit capture operation to 3 media files, no longer than 10 seconds each - var options = { limit: 3, duration: 10 }; - - navigator.device.capture.captureAudio(captureSuccess, captureError, options); - - -### 아마존 화재 OS 단점 - - * `duration`매개 변수는 지원 되지 않습니다. 녹음 길이 프로그래밍 방식으로 제한 될 수 없습니다. - -### 안 드 로이드 단점 - - * `duration`매개 변수는 지원 되지 않습니다. 녹음 길이 프로그래밍 방식으로 제한 될 수 없습니다. - -### 블랙베리 10 단점 - - * `duration`매개 변수는 지원 되지 않습니다. 녹음 길이 프로그래밍 방식으로 제한 될 수 없습니다. - * `limit`매개 변수는 지원 되지 않습니다, 그래서 하나의 기록 각 호출에 대해 만들 수 있습니다. - -### iOS 단점 - - * `limit`매개 변수는 지원 되지 않습니다, 그래서 하나의 기록 각 호출에 대해 만들 수 있습니다. - -## capture.captureImage - -> 카메라 응용 프로그램을 시작 하 고 캡처된 이미지 파일에 대 한 정보를 반환 합니다. - - navigator.device.capture.captureImage( - CaptureCB captureSuccess, CaptureErrorCB captureError, [CaptureImageOptions options] - ); - - -### 설명 - -디바이스의 카메라 응용 프로그램을 사용 하 여 이미지를 캡처하는 비동기 작업을 시작 합니다. 작업이 단일 세션에서 하나 이상의 이미지를 캡처할 수 있습니다. - -캡처 작업 종료 때 카메라 응용 프로그램을 닫으면 또는 `CaptureAudioOptions.limit`에 지정 된 녹음의 최대 수에 도달 합니다. `limit` 값을 지정 하지 경우에, 하나 (1) 기본적으로 캡처 작업 종료 후 사용자 단일 이미지를 캡처합니다. - -캡처 작업이 완료 되 면 각 캡처된 이미지 파일 설명 `MediaFile` 개체의 배열과 함께 `CaptureCB` 콜백을 호출 합니다. 사용자 이미지를 캡처하기 전에 작업이 종료 되 면 `CaptureErrorCB` 콜백 `CaptureError.CAPTURE_NO_MEDIA_FILES` 오류 코드를 특징으로 하는 `CaptureError` 개체를 실행 합니다. - -### 지원 되는 플랫폼 - - * 아마존 화재 운영 체제 - * 안 드 로이드 - * 블랙베리 10 - * 브라우저 - * iOS - * Windows Phone 7과 8 - * 윈도우 8 - * 윈도우 - -### Windows Phone 7 단점 - -당신의 장치 Zune 통해 연결 하는 동안 네이티브 카메라 응용 프로그램을 호출 하면 작동 하지 않는다, 및 오류 콜백 실행. - -### 브라우저 만지면 - -크롬, 파이어 폭스와 오페라에서 작동 하는 단지 (이후 IE와 사파리 navigator.getUserMedia API를 지원 하지 않습니다) - -사용 하 여 이미지를 표시 크롬/오페라에서 사용할 수 있는 파일의 URL만 캡처됩니다. 파이어 폭스 IndexedDB 저장 캡처된 이미지 저장 (파일 플러그인 설명서 참조),이 때문에 캡처한 이미지를 표시 하는 유일한 방법은 쇼는 DataURL를 사용 하 여 그것을 읽을 것입니다. - -### 예를 들어 - - // 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}); - - -## CaptureImageOptions - -> 이미지 캡처 구성 옵션을 캡슐화합니다. - -### 속성 - - * **제한**: 사용자는 단일 캡처 작업에서 캡처할 수 있는 이미지의 최대 수. 값 1 (기본값: 1) 보다 크거나 같아야 합니다. - -### 예를 들어 - - // limit capture operation to 3 images - var options = { limit: 3 }; - - navigator.device.capture.captureImage(captureSuccess, captureError, options); - - -### iOS 단점 - - * **제한** 매개 변수는 지원 되지 않습니다, 그리고 하나의 이미지 호출 당 촬영. - -## capture.captureVideo - -> 비디오 레코더 응용 프로그램을 시작 하 고 캡처한 비디오 클립 파일에 대 한 정보를 반환 합니다. - - navigator.device.capture.captureVideo( - CaptureCB captureSuccess, CaptureErrorCB captureError, [CaptureVideoOptions options] - ); - - -### 설명 - -비디오 녹화 장치의 비디오 레코딩 응용 프로그램을 사용 하 여 캡처하는 비동기 작업을 시작 합니다. 작업을 사용 하면 단일 세션에서 하나 이상의 녹음을 캡처할 수 있습니다. - -캡처 작업 사용자가 비디오 레코딩 응용 프로그램 종료 또는 `CaptureVideoOptions.limit`에 지정 된 녹음의 최대 수에 도달 하면 끝납니다. `limit` 매개 변수 값을 지정 하지, 하나 (1), 기본 및 캡처 작업이 종료 되 면 사용자는 하나의 비디오 클립을 기록 하는 후. - -캡처 작업이 완료 되 면 `CaptureCB` 콜백 실행 각 캡처된 비디오 클립 파일을 설명 하는 `MediaFile` 개체의 배열을 사용 합니다. 사용자는 비디오 클립을 캡처하기 전에 작업이 종료 되 면 `CaptureErrorCB` 콜백 `CaptureError.CAPTURE_NO_MEDIA_FILES` 오류 코드를 특징으로 하는 `CaptureError` 개체를 실행 합니다. - -### 지원 되는 플랫폼 - - * 아마존 화재 운영 체제 - * 안 드 로이드 - * 블랙베리 10 - * iOS - * Windows Phone 7과 8 - * 윈도우 8 - * 윈도우 - -### 예를 들어 - - // 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}); - - -### 블랙베리 10 단점 - - * 블랙베리 10 코르도바는 **비디오 레코더** 응용 프로그램을 실행, RIM, 제공한 비디오 녹화를 잡으려고 시도 합니다. 응용 프로그램 수신는 `CaptureError.CAPTURE_NOT_SUPPORTED` 오류 코드 응용 프로그램을 장치에 설치 되어 있지 않으면. - -## CaptureVideoOptions - -> 비디오 캡처 구성 옵션을 캡슐화합니다. - -### 속성 - - * **제한**: 디바이스의 사용자는 단일 캡처 작업에서 캡처할 수 있는 비디오 클립의 최대 수. 값 1 (기본값: 1) 보다 크거나 같아야 합니다. - - * **기간**: 비디오 클립의 최대 기간 초. - -### 예를 들어 - - // limit capture operation to 3 video clips - var options = { limit: 3 }; - - navigator.device.capture.captureVideo(captureSuccess, captureError, options); - - -### 블랙베리 10 단점 - - * **기간** 매개 변수가 지원 되지 않으므로 녹음 길이 프로그래밍 방식으로 제한 될 수 없습니다. - -### iOS 단점 - - * **제한** 매개 변수는 지원 되지 않습니다. 비디오 호출 당 기록 됩니다. - -## CaptureCB - -> 성공적인 미디어 캡처 작업에 따라 호출 됩니다. - - function captureSuccess( MediaFile[] mediaFiles ) { ... }; - - -### 설명 - -이 함수는 성공적인 캡처 작업이 완료 된 후 실행 합니다. 미디어 파일을 캡처한이 포인트와 중에 사용자가 미디어 캡처 응용 프로그램 종료 또는 캡처 한계에 도달 했습니다. - -각 `MediaFile` 개체 캡처한 미디어 파일을 설명합니다. - -### 예를 들어 - - // capture callback - 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 - } - }; - - -## CaptureError - -> 실패 한 미디어 캡처 작업에서 발생 하는 오류 코드를 캡슐화 합니다. - -### 속성 - - * **코드**: 미리 정의 된 오류 코드 중 하나가 아래에 나열 된. - -### 상수 - - * `CaptureError.CAPTURE_INTERNAL_ERR`: 카메라 또는 마이크 캡처 이미지 또는 소리 하지 못했습니다. - - * `CaptureError.CAPTURE_APPLICATION_BUSY`: 카메라 또는 오디오 캡처 응용 프로그램은 현재 또 다른 캡처 요청을 제공 하고있다. - - * `CaptureError.CAPTURE_INVALID_ARGUMENT`: API 잘못 된 사용 (예를 들어, 값 `limit` 보다 작은 하나입니다). - - * `CaptureError.CAPTURE_NO_MEDIA_FILES`: 사용자는 아무것도 캡처하기 전에 카메라 또는 오디오 캡처 응용 프로그램을 종료 합니다. - - * `CaptureError.CAPTURE_NOT_SUPPORTED`: 요청 된 캡처 작업이 지원 되지 않습니다. - -## CaptureErrorCB - -> 미디어 캡처 작업 중에 오류가 발생 하면 호출 됩니다. - - function captureError( CaptureError error ) { ... }; - - -### 설명 - -이 함수는 오류가 발생 하면 실행 하려고 할 때 미디어 캡처 작업을 실행 합니다. 실패 시나리오 등 캡처 응용 프로그램이, 캡처 작업은 이미 일어나 고, 또는 어떤 미디어 파일 캡처 전에 사용자가 작업을 취소 합니다. - -이 함수를 실행 하는 적절 한 오류 `code`를 포함 하는 `CaptureError` 개체와 함께. - -### 예를 들어 - - // capture error callback - var captureError = function(error) { - navigator.notification.alert('Error code: ' + error.code, null, 'Capture Error'); - }; - - -## ConfigurationData - -> 장치가 지 원하는 미디어 캡처 매개 변수 집합을 캡슐화 합니다. - -### 설명 - -장치에서 지 원하는 미디어 캡처 모드를 설명 합니다. 구성 데이터는 MIME 유형 및 비디오 또는 이미지 캡처 캡처 크기 포함 됩니다. - -MIME 형식 [RFC2046](http://www.ietf.org/rfc/rfc2046.txt)을 준수 해야 합니다. 예: - - * `video/3gpp` - * `video/quicktime` - * `image/jpeg` - * `audio/amr` - * `audio/wav` - -### 속성 - - * **유형**: 미디어 형식을 나타내는 ASCII로 인코딩 소문자 문자열. (DOMString) - - * **높이**: 이미지 또는 비디오 픽셀에서의 높이 있습니다. 사운드 클립에 대 한 0입니다. (수) - - * **폭**: 이미지 또는 비디오 픽셀에서의 너비. 사운드 클립에 대 한 0입니다. (수) - -### 예를 들어 - - // retrieve supported image modes - var imageModes = navigator.device.capture.supportedImageModes; - - // Select mode that has the highest horizontal resolution - var width = 0; - var selectedmode; - for each (var mode in imageModes) { - if (mode.width > width) { - width = mode.width; - selectedmode = mode; - } - } - - -모든 플랫폼에서 지원 되지 않습니다. 모든 구성 데이터 배열이 비어 있습니다. - -## MediaFile.getFormatData - -> 검색은 미디어 캡처 파일에 대 한 정보를 서식을 지정 합니다. - - mediaFile.getFormatData( - MediaFileDataSuccessCB successCallback, - [MediaFileDataErrorCB errorCallback] - ); - - -### 설명 - -이 함수는 비동기적으로 미디어 파일에 대 한 형식 정보를 검색 하려고 합니다. 성공 하면 `MediaFileData` 개체와 `MediaFileDataSuccessCB` 콜백을 호출 합니다. 시도가 실패 하는 경우이 함수는 `MediaFileDataErrorCB` 콜백을 호출 합니다. - -### 지원 되는 플랫폼 - - * 아마존 화재 운영 체제 - * 안 드 로이드 - * 블랙베리 10 - * iOS - * Windows Phone 7과 8 - * 윈도우 8 - * 윈도우 - -### 아마존 화재 OS 단점 - -미디어 파일 형식 정보에 액세스할 수 API는 제한, 그래서 모든 `MediaFileData` 속성이 지원 됩니다. - -### 블랙베리 10 단점 - -그래서 모든 `MediaFileData` 개체 기본값으로 반환 미디어 파일에 대 한 정보에 대 한 API를 제공 하지 않습니다. - -### 안 드 로이드 단점 - -미디어 파일 형식 정보에 액세스할 수 API는 제한, 그래서 모든 `MediaFileData` 속성이 지원 됩니다. - -### iOS 단점 - -미디어 파일 형식 정보에 액세스할 수 API는 제한, 그래서 모든 `MediaFileData` 속성이 지원 됩니다. - -## MediaFile - -> 미디어 캡처 파일의 속성을 캡슐화합니다. - -### 속성 - - * **이름**: 경로 정보 없이 파일 이름. (DOMString) - - * **fullPath**: 이름을 포함 한 파일의 전체 경로. (DOMString) - - * **유형**: 파일의 mime 형식 (DOMString) - - * **lastModifiedDate**: 날짜 및 시간 파일을 마지막으로 수정한. (날짜) - - * **크기**: 바이트에서 파일의 크기. (수) - -### 메서드 - - * **MediaFile.getFormatData**: 미디어 파일의 형식 정보를 검색 합니다. - -## MediaFileData - -> 미디어 파일에 대 한 형식 정보를 캡슐화합니다. - -### 속성 - - * **코덱**: 실제 형식의 오디오 및 비디오 콘텐츠. (DOMString) - - * **비트 레이트**: 콘텐츠의 평균 비트 전송률. 값은 이미지에 대 한 0. (수) - - * **높이**: 이미지 또는 비디오 픽셀에서의 높이 있습니다. 오디오 클립에 대 한 0입니다. (수) - - * **폭**: 이미지 또는 비디오 픽셀에서의 너비. 오디오 클립에 대 한 0입니다. (수) - - * **기간**: 초에 비디오 또는 사운드 클립의 길이. 값은 이미지에 대 한 0. (수) - -### 블랙베리 10 단점 - -`MediaFileData` 개체 `MediaFile.getFormatData` 기능에 의해 다음 기본 값을 반환 없음 API 미디어 파일에 대 한 형식 정보를 제공 합니다. - - * **코덱**: 안 지원, 및 반환`null`. - - * **비트 레이트**: 안 지원, 및 0을 반환 합니다. - - * **높이**: 안 지원, 및 0을 반환 합니다. - - * **폭**: 안 지원, 및 0을 반환 합니다. - - * **기간**: 안 지원, 및 0을 반환 합니다. - -### 아마존 화재 OS 단점 - -지원 되는 `MediaFileData` 속성: - - * **코덱**: 안 지원, 및 반환`null`. - - * **비트 레이트**: 안 지원, 및 0을 반환 합니다. - - * **높이**: 지원: 이미지 및 비디오 파일에만. - - * **폭**: 지원: 이미지 및 비디오 파일에만. - - * **기간**: 지원: 오디오 및 비디오 파일을 - -### 안 드 로이드 단점 - -지원 되는 `MediaFileData` 속성: - - * **코덱**: 안 지원, 및 반환`null`. - - * **비트 레이트**: 안 지원, 및 0을 반환 합니다. - - * **높이**: 지원: 이미지 및 비디오 파일에만. - - * **폭**: 지원: 이미지 및 비디오 파일에만. - - * **기간**: 지원: 오디오 및 비디오 파일을. - -### iOS 단점 - -지원 되는 `MediaFileData` 속성: - - * **코덱**: 안 지원, 및 반환`null`. - - * **비트 레이트**: iOS4 장치 오디오 전용에 대 한 지원. 이미지 및 비디오에 대 한 반환 0입니다. - - * **높이**: 지원: 이미지 및 비디오 파일에만. - - * **폭**: 지원: 이미지 및 비디오 파일에만. - - * **기간**: 지원: 오디오 및 비디오 파일을. \ No newline at end of file diff --git a/doc/ko/index.md b/doc/ko/index.md deleted file mode 100644 index e3b39c1f..00000000 --- a/doc/ko/index.md +++ /dev/null @@ -1,551 +0,0 @@ - - -# cordova-plugin-media-capture - -이 플러그인 디바이스의 오디오, 이미지 및 비디오 캡처 기능에 대 한 액세스를 제공합니다. - -**경고**: 수집 및 이미지, 비디오 또는 오디오 장치의 카메라 또는 마이크를 사용 하 여 중요 한 개인 정보 보호 문제를 제기 하고있다. 응용 프로그램의 개인 정보 보호 정책 응용 프로그램 같은 센서를 사용 하는 방법 및 다른 당사자와 함께 기록 된 데이터는 공유 하는 여부를 토론 해야 한다. 또한, 애플 리 케이 션의 카메라 또는 마이크를 사용 하지 않으면 명백한 사용자 인터페이스에서, 제공 해야 그냥--시간 통지 (해당 되는 경우 장치 운영 체제 이렇게 이미 하지 않는) 응용 프로그램 카메라 또는 마이크에 액세스 하기 전에. 그 통지는 (예를 들어, **확인** 및 **아니오**선택 제시) 하 여 사용자의 허가 취득 뿐만 아니라, 위에서 언급 된 동일한 정보를 제공 해야 합니다. Note 일부 애플 리 케이 션 장 터 저스트-인-타임 공지 및 카메라 또는 마이크에 액세스 하기 전에 사용자에 게 허가를 귀하의 응용 프로그램에 필요할 수 있습니다. 자세한 내용은 개인 정보 보호 가이드를 참조 하십시오. - -이 플러그인 글로벌 `navigator.device.capture` 개체를 정의합니다. - -전역 범위에 있지만 그것은 불가능까지 `deviceready` 이벤트 후. - - document.addEventListener("deviceready", onDeviceReady, false); - function onDeviceReady() { - console.log(navigator.device.capture); - } - - -## 설치 - - cordova plugin add cordova-plugin-media-capture - - -## 지원 되는 플랫폼 - -* 아마존 화재 운영 체제 -* 안 드 로이드 -* 블랙베리 10 -* iOS -* Windows Phone 7과 8 -* 윈도우 8 - -## 개체 - -* 캡처 -* CaptureAudioOptions -* CaptureImageOptions -* CaptureVideoOptions -* CaptureCallback -* CaptureErrorCB -* ConfigurationData -* MediaFile -* MediaFileData - -## 메서드 - -* capture.captureAudio -* capture.captureImage -* capture.captureVideo -* MediaFile.getFormatData - -## 속성 - -* **supportedAudioModes**: 오디오 녹음 장치에 의해 지원 되는 형식. (ConfigurationData[]) - -* **supportedImageModes**: 기록 이미지 크기 및 장치에서 지원 되는 형식. (ConfigurationData[]) - -* **supportedVideoModes**: 녹음 비디오 해상도 및 장치에 의해 지원 되는 형식. (ConfigurationData[]) - -## capture.captureAudio - -> 오디오 레코더 응용 프로그램을 시작 하 고 캡처한 오디오 클립 파일에 대 한 정보를 반환 합니다. - - navigator.device.capture.captureAudio( - CaptureCB captureSuccess, CaptureErrorCB captureError, [CaptureAudioOptions options] - ); - - -### 설명 - -소자의 기본 오디오 녹음 응용 프로그램을 사용 하 여 오디오 녹음을 캡처하는 비동기 작업을 시작 합니다. 작업 장치 사용자를 단일 세션에서 여러 녹화를 캡처할 수 있습니다. - -캡처 작업 사용자가 오디오 녹음 응용 프로그램을 종료 하거나 녹음 `CaptureAudioOptions.limit`에 의해 지정 된 최대 수에 도달 하면 끝납니다. `limit` 매개 변수 값을 지정 하지, 하나 (1), 기본 및 캡처 작업이 종료 되 면 사용자는 하나의 오디오 클립을 기록 하는 후. - -캡처 작업이 완료 되 면 각 캡처된 오디오 클립 파일 설명 `MediaFile` 개체의 배열과 함께 `CaptureCallback`를 실행 합니다. 사용자 전에 오디오 클립을 캡처 작업이 종료 되 면, `CaptureErrorCallback` `CaptureError.CAPTURE_NO_MEDIA_FILES` 오류 코드를 갖춘 `CaptureError` 개체를 실행 합니다. - -### 지원 되는 플랫폼 - -* 아마존 화재 운영 체제 -* 안 드 로이드 -* 블랙베리 10 -* iOS -* Windows Phone 7과 8 -* 윈도우 8 - -### 예를 들어 - - // 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}); - - -### iOS 단점 - -* iOS 없으므로 기본 오디오 녹음 응용 프로그램을 간단한 사용자 인터페이스를 제공 합니다. - -### Windows Phone 7, 8 특수 - -* Windows Phone 7 없으므로 기본 오디오 녹음 응용 프로그램을 간단한 사용자 인터페이스를 제공 합니다. - -## CaptureAudioOptions - -> 오디오 캡처 구성 옵션을 캡슐화합니다. - -### 속성 - -* **제한**: 최대 오디오 클립 장치 사용자는 단일 캡처 작업에 기록할 수 있습니다. 값 1 (기본값: 1) 보다 크거나 같아야 합니다. - -* **기간**: 오디오 사운드 클립의 최대 기간 초. - -### 예를 들어 - - // limit capture operation to 3 media files, no longer than 10 seconds each - var options = { limit: 3, duration: 10 }; - - navigator.device.capture.captureAudio(captureSuccess, captureError, options); - - -### 아마존 화재 OS 단점 - -* `duration`매개 변수는 지원 되지 않습니다. 녹음 길이 프로그래밍 방식으로 제한 될 수 없습니다. - -### 안 드 로이드 단점 - -* `duration`매개 변수는 지원 되지 않습니다. 녹음 길이 프로그래밍 방식으로 제한 될 수 없습니다. - -### 블랙베리 10 단점 - -* `duration`매개 변수는 지원 되지 않습니다. 녹음 길이 프로그래밍 방식으로 제한 될 수 없습니다. -* `limit`매개 변수는 지원 되지 않습니다, 그래서 하나의 기록 각 호출에 대해 만들 수 있습니다. - -### iOS 단점 - -* `limit`매개 변수는 지원 되지 않습니다, 그래서 하나의 기록 각 호출에 대해 만들 수 있습니다. - -## capture.captureImage - -> 카메라 응용 프로그램을 시작 하 고 캡처된 이미지 파일에 대 한 정보를 반환 합니다. - - navigator.device.capture.captureImage( - CaptureCB captureSuccess, CaptureErrorCB captureError, [CaptureImageOptions options] - ); - - -### 설명 - -디바이스의 카메라 응용 프로그램을 사용 하 여 이미지를 캡처하는 비동기 작업을 시작 합니다. 작업이 단일 세션에서 하나 이상의 이미지를 캡처할 수 있습니다. - -캡처 작업 종료 때 카메라 응용 프로그램을 닫으면 또는 `CaptureAudioOptions.limit`에 지정 된 녹음의 최대 수에 도달 합니다. `limit` 값을 지정 하지 경우에, 하나 (1) 기본적으로 캡처 작업 종료 후 사용자 단일 이미지를 캡처합니다. - -캡처 작업이 완료 되 면 각 캡처된 이미지 파일 설명 `MediaFile` 개체의 배열과 함께 `CaptureCB` 콜백을 호출 합니다. 사용자 이미지를 캡처하기 전에 작업이 종료 되 면 `CaptureErrorCB` 콜백 `CaptureError.CAPTURE_NO_MEDIA_FILES` 오류 코드를 특징으로 하는 `CaptureError` 개체를 실행 합니다. - -### 지원 되는 플랫폼 - -* 아마존 화재 운영 체제 -* 안 드 로이드 -* 블랙베리 10 -* iOS -* Windows Phone 7과 8 -* 윈도우 8 - -### Windows Phone 7 단점 - -당신의 장치 Zune 통해 연결 하는 동안 네이티브 카메라 응용 프로그램을 호출 하면 작동 하지 않는다, 및 오류 콜백 실행. - -### 예를 들어 - - // 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}); - - -## CaptureImageOptions - -> 이미지 캡처 구성 옵션을 캡슐화합니다. - -### 속성 - -* **제한**: 사용자는 단일 캡처 작업에서 캡처할 수 있는 이미지의 최대 수. 값 1 (기본값: 1) 보다 크거나 같아야 합니다. - -### 예를 들어 - - // limit capture operation to 3 images - var options = { limit: 3 }; - - navigator.device.capture.captureImage(captureSuccess, captureError, options); - - -### iOS 단점 - -* **제한** 매개 변수는 지원 되지 않습니다, 그리고 하나의 이미지 호출 당 촬영. - -## capture.captureVideo - -> 비디오 레코더 응용 프로그램을 시작 하 고 캡처한 비디오 클립 파일에 대 한 정보를 반환 합니다. - - navigator.device.capture.captureVideo( - CaptureCB captureSuccess, CaptureErrorCB captureError, [CaptureVideoOptions options] - ); - - -### 설명 - -비디오 녹화 장치의 비디오 레코딩 응용 프로그램을 사용 하 여 캡처하는 비동기 작업을 시작 합니다. 작업을 사용 하면 단일 세션에서 하나 이상의 녹음을 캡처할 수 있습니다. - -캡처 작업 사용자가 비디오 레코딩 응용 프로그램 종료 또는 `CaptureVideoOptions.limit`에 지정 된 녹음의 최대 수에 도달 하면 끝납니다. `limit` 매개 변수 값을 지정 하지, 하나 (1), 기본 및 캡처 작업이 종료 되 면 사용자는 하나의 비디오 클립을 기록 하는 후. - -캡처 작업이 완료 되 면 `CaptureCB` 콜백 실행 각 캡처된 비디오 클립 파일을 설명 하는 `MediaFile` 개체의 배열을 사용 합니다. 사용자는 비디오 클립을 캡처하기 전에 작업이 종료 되 면 `CaptureErrorCB` 콜백 `CaptureError.CAPTURE_NO_MEDIA_FILES` 오류 코드를 특징으로 하는 `CaptureError` 개체를 실행 합니다. - -### 지원 되는 플랫폼 - -* 아마존 화재 운영 체제 -* 안 드 로이드 -* 블랙베리 10 -* iOS -* Windows Phone 7과 8 -* 윈도우 8 - -### 예를 들어 - - // 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}); - - -### 블랙베리 10 단점 - -* 블랙베리 10 코르도바는 **비디오 레코더** 응용 프로그램을 실행, RIM, 제공한 비디오 녹화를 잡으려고 시도 합니다. 응용 프로그램 수신는 `CaptureError.CAPTURE_NOT_SUPPORTED` 오류 코드 응용 프로그램을 장치에 설치 되어 있지 않으면. - -## CaptureVideoOptions - -> 비디오 캡처 구성 옵션을 캡슐화합니다. - -### 속성 - -* **제한**: 디바이스의 사용자는 단일 캡처 작업에서 캡처할 수 있는 비디오 클립의 최대 수. 값 1 (기본값: 1) 보다 크거나 같아야 합니다. - -* **기간**: 비디오 클립의 최대 기간 초. - -### 예를 들어 - - // limit capture operation to 3 video clips - var options = { limit: 3 }; - - navigator.device.capture.captureVideo(captureSuccess, captureError, options); - - -### 블랙베리 10 단점 - -* **기간** 매개 변수가 지원 되지 않으므로 녹음 길이 프로그래밍 방식으로 제한 될 수 없습니다. - -### iOS 단점 - -* **제한** 매개 변수는 지원 되지 않습니다. 비디오 호출 당 기록 됩니다. - -## CaptureCB - -> 성공적인 미디어 캡처 작업에 따라 호출 됩니다. - - function captureSuccess( MediaFile[] mediaFiles ) { ... }; - - -### 설명 - -이 함수는 성공적인 캡처 작업이 완료 된 후 실행 합니다. 미디어 파일을 캡처한이 포인트와 중에 사용자가 미디어 캡처 응용 프로그램 종료 또는 캡처 한계에 도달 했습니다. - -각 `MediaFile` 개체 캡처한 미디어 파일을 설명합니다. - -### 예를 들어 - - // capture callback - 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 - } - }; - - -## CaptureError - -> 실패 한 미디어 캡처 작업에서 발생 하는 오류 코드를 캡슐화 합니다. - -### 속성 - -* **코드**: 미리 정의 된 오류 코드 중 하나가 아래에 나열 된. - -### 상수 - -* `CaptureError.CAPTURE_INTERNAL_ERR`: 카메라 또는 마이크 캡처 이미지 또는 소리 하지 못했습니다. - -* `CaptureError.CAPTURE_APPLICATION_BUSY`: 카메라 또는 오디오 캡처 응용 프로그램은 현재 또 다른 캡처 요청을 제공 하고있다. - -* `CaptureError.CAPTURE_INVALID_ARGUMENT`: API 잘못 된 사용 (예를 들어, 값 `limit` 보다 작은 하나입니다). - -* `CaptureError.CAPTURE_NO_MEDIA_FILES`: 사용자는 아무것도 캡처하기 전에 카메라 또는 오디오 캡처 응용 프로그램을 종료 합니다. - -* `CaptureError.CAPTURE_NOT_SUPPORTED`: 요청 된 캡처 작업이 지원 되지 않습니다. - -## CaptureErrorCB - -> 미디어 캡처 작업 중에 오류가 발생 하면 호출 됩니다. - - function captureError( CaptureError error ) { ... }; - - -### 설명 - -이 함수는 오류가 발생 하면 실행 하려고 할 때 미디어 캡처 작업을 실행 합니다. 실패 시나리오 등 캡처 응용 프로그램이, 캡처 작업은 이미 일어나 고, 또는 어떤 미디어 파일 캡처 전에 사용자가 작업을 취소 합니다. - -이 함수를 실행 하는 적절 한 오류 `code`를 포함 하는 `CaptureError` 개체와 함께. - -### 예를 들어 - - // capture error callback - var captureError = function(error) { - navigator.notification.alert('Error code: ' + error.code, null, 'Capture Error'); - }; - - -## ConfigurationData - -> 장치가 지 원하는 미디어 캡처 매개 변수 집합을 캡슐화 합니다. - -### 설명 - -장치에서 지 원하는 미디어 캡처 모드를 설명 합니다. 구성 데이터는 MIME 유형 및 비디오 또는 이미지 캡처 캡처 크기 포함 됩니다. - -MIME 형식 [RFC2046][1]을 준수 해야 합니다. 예: - - [1]: http://www.ietf.org/rfc/rfc2046.txt - -* `video/3gpp` -* `video/quicktime` -* `image/jpeg` -* `audio/amr` -* `audio/wav` - -### 속성 - -* **유형**: 미디어 형식을 나타내는 ASCII로 인코딩 소문자 문자열. (DOMString) - -* **높이**: 이미지 또는 비디오 픽셀에서의 높이 있습니다. 사운드 클립에 대 한 0입니다. (수) - -* **폭**: 이미지 또는 비디오 픽셀에서의 너비. 사운드 클립에 대 한 0입니다. (수) - -### 예를 들어 - - // retrieve supported image modes - var imageModes = navigator.device.capture.supportedImageModes; - - // Select mode that has the highest horizontal resolution - var width = 0; - var selectedmode; - for each (var mode in imageModes) { - if (mode.width > width) { - width = mode.width; - selectedmode = mode; - } - } - - -모든 플랫폼에서 지원 되지 않습니다. 모든 구성 데이터 배열이 비어 있습니다. - -## MediaFile.getFormatData - -> 검색은 미디어 캡처 파일에 대 한 정보를 서식을 지정 합니다. - - mediaFile.getFormatData( - MediaFileDataSuccessCB successCallback, - [MediaFileDataErrorCB errorCallback] - ); - - -### 설명 - -이 함수는 비동기적으로 미디어 파일에 대 한 형식 정보를 검색 하려고 합니다. 성공 하면 `MediaFileData` 개체와 `MediaFileDataSuccessCB` 콜백을 호출 합니다. 시도가 실패 하는 경우이 함수는 `MediaFileDataErrorCB` 콜백을 호출 합니다. - -### 지원 되는 플랫폼 - -* 아마존 화재 운영 체제 -* 안 드 로이드 -* 블랙베리 10 -* iOS -* Windows Phone 7과 8 -* 윈도우 8 - -### 아마존 화재 OS 단점 - -미디어 파일 형식 정보에 액세스할 수 API는 제한, 그래서 모든 `MediaFileData` 속성이 지원 됩니다. - -### 블랙베리 10 단점 - -그래서 모든 `MediaFileData` 개체 기본값으로 반환 미디어 파일에 대 한 정보에 대 한 API를 제공 하지 않습니다. - -### 안 드 로이드 단점 - -미디어 파일 형식 정보에 액세스할 수 API는 제한, 그래서 모든 `MediaFileData` 속성이 지원 됩니다. - -### iOS 단점 - -미디어 파일 형식 정보에 액세스할 수 API는 제한, 그래서 모든 `MediaFileData` 속성이 지원 됩니다. - -## MediaFile - -> 미디어 캡처 파일의 속성을 캡슐화합니다. - -### 속성 - -* **이름**: 경로 정보 없이 파일 이름. (DOMString) - -* **fullPath**: 이름을 포함 한 파일의 전체 경로. (DOMString) - -* **유형**: 파일의 mime 형식 (DOMString) - -* **lastModifiedDate**: 날짜 및 시간 파일을 마지막으로 수정한. (날짜) - -* **크기**: 바이트에서 파일의 크기. (수) - -### 메서드 - -* **MediaFile.getFormatData**: 미디어 파일의 형식 정보를 검색 합니다. - -## MediaFileData - -> 미디어 파일에 대 한 형식 정보를 캡슐화합니다. - -### 속성 - -* **코덱**: 실제 형식의 오디오 및 비디오 콘텐츠. (DOMString) - -* **비트 레이트**: 콘텐츠의 평균 비트 전송률. 값은 이미지에 대 한 0. (수) - -* **높이**: 이미지 또는 비디오 픽셀에서의 높이 있습니다. 오디오 클립에 대 한 0입니다. (수) - -* **폭**: 이미지 또는 비디오 픽셀에서의 너비. 오디오 클립에 대 한 0입니다. (수) - -* **기간**: 초에 비디오 또는 사운드 클립의 길이. 값은 이미지에 대 한 0. (수) - -### 블랙베리 10 단점 - -`MediaFileData` 개체 `MediaFile.getFormatData` 기능에 의해 다음 기본 값을 반환 없음 API 미디어 파일에 대 한 형식 정보를 제공 합니다. - -* **코덱**: 안 지원, 및 반환`null`. - -* **비트 레이트**: 안 지원, 및 0을 반환 합니다. - -* **높이**: 안 지원, 및 0을 반환 합니다. - -* **폭**: 안 지원, 및 0을 반환 합니다. - -* **기간**: 안 지원, 및 0을 반환 합니다. - -### 아마존 화재 OS 단점 - -지원 되는 `MediaFileData` 속성: - -* **코덱**: 안 지원, 및 반환`null`. - -* **비트 레이트**: 안 지원, 및 0을 반환 합니다. - -* **높이**: 지원: 이미지 및 비디오 파일에만. - -* **폭**: 지원: 이미지 및 비디오 파일에만. - -* **기간**: 지원: 오디오 및 비디오 파일을 - -### 안 드 로이드 단점 - -지원 되는 `MediaFileData` 속성: - -* **코덱**: 안 지원, 및 반환`null`. - -* **비트 레이트**: 안 지원, 및 0을 반환 합니다. - -* **높이**: 지원: 이미지 및 비디오 파일에만. - -* **폭**: 지원: 이미지 및 비디오 파일에만. - -* **기간**: 지원: 오디오 및 비디오 파일을. - -### iOS 단점 - -지원 되는 `MediaFileData` 속성: - -* **코덱**: 안 지원, 및 반환`null`. - -* **비트 레이트**: iOS4 장치 오디오 전용에 대 한 지원. 이미지 및 비디오에 대 한 반환 0입니다. - -* **높이**: 지원: 이미지 및 비디오 파일에만. - -* **폭**: 지원: 이미지 및 비디오 파일에만. - -* **기간**: 지원: 오디오 및 비디오 파일을. diff --git a/doc/pl/README.md b/doc/pl/README.md deleted file mode 100644 index 2f805db5..00000000 --- a/doc/pl/README.md +++ /dev/null @@ -1,564 +0,0 @@ - - -# cordova-plugin-media-capture - -[![Build Status](https://travis-ci.org/apache/cordova-plugin-media-capture.svg)](https://travis-ci.org/apache/cordova-plugin-media-capture) - -Ten plugin umożliwia dostęp do urządzenia dźwięku, obrazu i możliwości przechwytywania wideo. - -**Ostrzeżenie**: zbierania i wykorzystywania zdjęć, wideo lub audio z urządzenia kamery lub mikrofonu podnosi kwestie prywatności ważne. Polityka prywatności danej aplikacji należy Dyskutować, jak aplikacja używa takich czujników i czy dane zapisane jest współużytkowany z innymi stronami. Ponadto jeśli aplikacji wykorzystanie kamery lub mikrofonu nie jest widoczne w interfejsie użytkownika, powinny zapewnić just-in czas wypowiedzenia przed aplikacji dostęp do kamery lub mikrofonu (jeśli urządzenie system operacyjny nie robi już). Że ogłoszenie powinno zawierać te same informacje, o których wspomniano powyżej, jak również uzyskanie uprawnienia użytkownika (np. poprzez przedstawianie wyborów **OK** i **Nie dzięki**). Należy pamiętać, że niektóre platformy aplikacji może wymagać aplikacji powiadomienia just-in-time oraz uzyskania zgody użytkownika przed dostęp do kamery lub mikrofonu. Aby uzyskać więcej informacji zobacz przewodnik prywatności. - -Ten plugin określa globalne `navigator.device.capture` obiektu. - -Chociaż w globalnym zasięgu, to nie dostępne dopiero po `deviceready` imprezie. - - document.addEventListener("deviceready", onDeviceReady, false); - function onDeviceReady() { - console.log(navigator.device.capture); - } - - -## Instalacja - - cordova plugin add cordova-plugin-media-capture - - -## Obsługiwane platformy - - * Amazon Fire OS - * Android - * BlackBerry 10 - * Przeglądarka - * iOS - * Windows Phone 7 i 8 - * Windows 8 - * Windows - -## Obiekty - - * Capture - * CaptureAudioOptions - * CaptureImageOptions - * CaptureVideoOptions - * CaptureCallback - * CaptureErrorCB - * ConfigurationData - * MediaFile - * MediaFileData - -## Metody - - * capture.captureAudio - * capture.captureImage - * capture.captureVideo - * MediaFile.getFormatData - -## Właściwości - - * **supportedAudioModes**: nagranie formatów obsługiwanych przez urządzenie. (ConfigurationData[]) - - * **supportedImageModes**: nagrywanie obrazu rozmiarów i formatów obsługiwanych przez urządzenie. (ConfigurationData[]) - - * **supportedVideoModes**: rozdzielczości nagrywania i formatów obsługiwanych przez urządzenie. (ConfigurationData[]) - -## capture.captureAudio - -> Uruchom aplikację rejestrator audio i zwraca informacje o przechwyconych klip audio pliki. - - navigator.device.capture.captureAudio( - CaptureCB captureSuccess, CaptureErrorCB captureError, [CaptureAudioOptions options] - ); - - -### Opis - -Rozpoczyna operację asynchroniczną do przechwytywania audio nagrania za pomocą urządzenia domyślnej aplikacji do nagrywania dźwięku. Operacja pozwala uchwycić wiele nagrań w jednej sesji użytkownika urządzenia. - -Operacji przechwytywania kończy się, gdy użytkownik zamyka nagranie aplikacji, lub zostanie osiągnięta Maksymalna liczba nagrań, określony przez `CaptureAudioOptions.limit`. Jeśli wartość parametru nie `spółka z ograniczoną odpowiedzialnością` jest określony, domyślnie do jednego (1), i operacji przechwytywania kończy po użytkownik rejestruje pojedynczy klip audio. - -Po zakończeniu operacji przechwytywania, `CaptureCallback` wykonuje się z tablicą obiektów `MediaFile` opisu każdego pliku przechwyconych klip audio. Jeśli użytkownik kończy działanie przed klipu audio jest zrobione, `CaptureErrorCallback` wykonuje z obiektem `CaptureError`, z kodem błędu `CaptureError.CAPTURE_NO_MEDIA_FILES`. - -### Obsługiwane platformy - - * Amazon Fire OS - * Android - * BlackBerry 10 - * iOS - * Windows Phone 7 i 8 - * Windows 8 - * Windows - -### Przykład - - // 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}); - - -### Dziwactwa iOS - - * iOS nie ma domyślnej aplikacji do nagrywania dźwięku, więc podano pewien prosty użytkownik złącze standardowe. - -### Windows Phone 7 i 8 dziwactwa - - * Windows Phone 7 nie ma domyślnej aplikacji do nagrywania dźwięku, więc pewien prosty użytkownik złącze standardowe jest dostarczone. - -## CaptureAudioOptions - -> Zawiera opcje konfiguracji przechwytywania dźwięku. - -### Właściwości - - * **Limit**: Maksymalna liczba klipów audio nagrywać w operacji przechwytywania pojedynczego użytkownika urządzenia. Wartość musi być większa lub równa 1 (domyślnie 1). - - * **czas trwania**: maksymalny czas trwania klipu audio dźwięku, w kilka sekund. - -### Przykład - - // limit capture operation to 3 media files, no longer than 10 seconds each - var options = { limit: 3, duration: 10 }; - - navigator.device.capture.captureAudio(captureSuccess, captureError, options); - - -### Amazon ogień OS dziwactwa - - * `duration`Parametr nie jest obsługiwana. Zapis długości nie może być ograniczony programowo. - -### Dziwactwa Androida - - * `duration`Parametr nie jest obsługiwana. Zapis długości nie może być ograniczony programowo. - -### Jeżyna 10 dziwactwa - - * `duration`Parametr nie jest obsługiwana. Zapis długości nie może być ograniczony programowo. - * `limit`Parametr nie jest obsługiwana, więc tylko jednego nagrania mogą być tworzone dla każdego wywołania. - -### Dziwactwa iOS - - * `limit`Parametr nie jest obsługiwana, więc tylko jednego nagrania mogą być tworzone dla każdego wywołania. - -## capture.captureImage - -> Uruchom aplikację aparatu i zwraca informacje o przechwyconych obrazów. - - navigator.device.capture.captureImage( - CaptureCB captureSuccess, CaptureErrorCB captureError, [CaptureImageOptions options] - ); - - -### Opis - -Rozpoczyna operację asynchroniczną do przechwytywania obrazów przy użyciu urządzenia aparatu. Operacja pozwala użytkownik wobec zawładnięcie więcej niż jeden obraz w jednej sesji. - -Kończy operację przechwytywania, albo kiedy użytkownik zamyka aplikację aparatu, lub zostanie osiągnięta Maksymalna liczba nagrań, określony przez `CaptureAudioOptions.limit`. Jeśli nie `limit` wartość jest określona, domyślnie jest to jeden (1), i operacji przechwytywania kończy się po użytkownika przechwytuje jeden obraz. - -Po zakończeniu operacji przechwytywania, wywołuje `CaptureCB` wywołanie zwrotne z tablicą obiektów `MediaFile` opisu każdego pliku przechwyconego obrazu. Jeśli użytkownik kończy operację przed zrobieniem zdjęcia, wywołania zwrotnego `CaptureErrorCB` wykonuje się z obiektu `CaptureError` z kodem błędu `CaptureError.CAPTURE_NO_MEDIA_FILES`. - -### Obsługiwane platformy - - * Amazon Fire OS - * Android - * BlackBerry 10 - * Przeglądarka - * iOS - * Windows Phone 7 i 8 - * Windows 8 - * Windows - -### Dziwactwa Windows Phone 7 - -Wywoływanie aparat native aplikacji, podczas gdy urządzenie jest podłączone przez Zune nie dziala, i wykonuje błąd wywołania zwrotnego. - -### Quirks przeglądarki - -Działa w Chrome, Firefox i Opera, tylko (od IE i Safari nie obsługuje interfejsu API navigator.getUserMedia) - -Wyświetlanie obrazów przy użyciu zrobione tylko URL pliku dostępne w Chrome/Opera. Firefox przechowuje przechwyconych obrazów w składzie IndexedDB (zobacz plik wtyczki dokumentacji), i w związku z tym jedynym sposobem, aby pokazać przechwyconego obrazu jest czytać ją i Pokaż przy jego DataURL. - -### Przykład - - // 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}); - - -## CaptureImageOptions - -> Zawiera opcje konfiguracji przechwytywania obrazu. - -### Właściwości - - * **limit**: Maksymalna liczba zdjęć, użytkownik puszka metalowa zawładnięcie w operacji przechwytywania pojedynczego. Wartość musi być większa lub równa 1 (domyślnie 1). - -### Przykład - - // limit capture operation to 3 images - var options = { limit: 3 }; - - navigator.device.capture.captureImage(captureSuccess, captureError, options); - - -### Dziwactwa iOS - - * Parametr **limit** nie jest obsługiwane, i tylko jeden obraz jest podejmowana na wywołanie. - -## capture.captureVideo - -> Uruchom aplikację rejestrator wideo i zwraca informacje o przechwyconych wideo akta. - - navigator.device.capture.captureVideo( - CaptureCB captureSuccess, CaptureErrorCB captureError, [CaptureVideoOptions options] - ); - - -### Opis - -Rozpoczyna operację asynchroniczną do przechwytywania nagrania wideo za pomocą urządzenia wideo notujący zgłoszenie. Operacja pozwala użytkownik wobec zawładnięcie więcej niż jednego nagrania w pojedynczej sesji. - -Operacji przechwytywania kończy się, gdy użytkownik zamyka aplikację nagrywania wideo, lub zostanie osiągnięta Maksymalna liczba nagrań, określony przez `CaptureVideoOptions.limit`. Jeśli wartość parametru nie `spółka z ograniczoną odpowiedzialnością` jest określony, domyślnie do jednego (1), i operacji przechwytywania kończy po użytkownik rejestruje pojedynczy klip audio. - -Po zakończeniu operacji przechwytywania wywołania zwrotnego `CaptureCB` wykonuje z tablicą obiektów `MediaFile` opisu każdego pliku wideo przechwycone. Jeśli użytkownik kończy operację przed przechwytywania wideo, wywołania zwrotnego `CaptureErrorCB` wykonuje się z obiektu `CaptureError` z kodem błędu `CaptureError.CAPTURE_NO_MEDIA_FILES`. - -### Obsługiwane platformy - - * Amazon Fire OS - * Android - * BlackBerry 10 - * iOS - * Windows Phone 7 i 8 - * Windows 8 - * Windows - -### Przykład - - // 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}); - - -### Jeżyna 10 dziwactwa - - * Cordova dla BlackBerry 10 próbuje uruchomić wniosku **Rejestrator wideo** dostarczone przez RIM, przechwytywanie nagrań wideo. Aplikacja otrzymuje `CaptureError.CAPTURE_NOT_SUPPORTED` kod błędu, jeśli aplikacja nie jest zainstalowana na urządzeniu. - -## CaptureVideoOptions - -> Zawiera opcje konfiguracji przechwytywania wideo. - -### Właściwości - - * **Limit**: Maksymalna liczba klipów wideo urządzenia użytkownik puszka metalowa zawładnięcie w operacji przechwytywania pojedynczego. Wartość musi być większa lub równa 1 (domyślnie 1). - - * **czas trwania**: maksymalny czas trwania klipu wideo w kilka sekund. - -### Przykład - - // limit capture operation to 3 video clips - var options = { limit: 3 }; - - navigator.device.capture.captureVideo(captureSuccess, captureError, options); - - -### Jeżyna 10 dziwactwa - - * **Czas trwania** parametr nie jest obsługiwana, więc długość nagrania nie może być ograniczony programowo. - -### Dziwactwa iOS - - * Parametr **limit** nie jest obsługiwane. Tylko jeden film jest nagrany na wywołanie. - -## CaptureCB - -> Wywoływane po operacji przechwytywania mediów sukces. - - function captureSuccess( MediaFile[] mediaFiles ) { ... }; - - -### Opis - -Ta funkcja wykonuje się po zakończeniu operacji wychwytywania sukces. W tym momencie plik multimedialny został złapany, a następnie użytkownik ma zakończony aplikacji przechwytywania mediów, czy osiągnięto limit przechwytywania. - -Każdy obiekt `MediaFile` opisuje plik multimedialny przechwycone. - -### Przykład - - // capture callback - 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 - } - }; - - -## CaptureError - -> Hermetyzuje kod błędów wynikających z operacji przechwytywania mediów nie powiodło się. - -### Właściwości - - * **Kod**: jeden z kodów błędów wstępnie zdefiniowanych poniżej. - -### Stałe - - * `CaptureError.CAPTURE_INTERNAL_ERR`: Kamery lub mikrofonu udało się przechwycić obraz lub dźwięk. - - * `CaptureError.CAPTURE_APPLICATION_BUSY`: Aplikacji przechwytywania kamery lub audio jest aktualnie obsługujący wniosek innego przechwytywania. - - * `CaptureError.CAPTURE_INVALID_ARGUMENT`: Nieprawidłowe użycie interfejsu API (np. wartości `limit` jest mniej niż jeden). - - * `CaptureError.CAPTURE_NO_MEDIA_FILES`: Użytkownik zamyka aparat fotograficzny lub audio aplikacji przechwytywania przed zrobieniem czegokolwiek. - - * `CaptureError.CAPTURE_NOT_SUPPORTED`: Przechwytywania Żądana operacja nie jest obsługiwana. - -## CaptureErrorCB - -> Wywołany, jeśli wystąpi błąd podczas operacji przechwytywania mediów. - - function captureError( CaptureError error ) { ... }; - - -### Opis - -Ta funkcja wykonuje, jeśli wystąpi błąd, gdy próbuje uruchomić nośnik przechwytywania operacji. Brak scenariusze podczas aplikacji przechwytywania jest zajęty, operacji przechwytywania jest już miejsce, lub użytkownik nie anuluje operację zanim jakiekolwiek pliki multimedialne są przechwytywane. - -Ta funkcja wykonuje się z obiektem `CaptureError`, zawierające odpowiedni komunikat `Kod`. - -### Przykład - - // capture error callback - var captureError = function(error) { - navigator.notification.alert('Error code: ' + error.code, null, 'Capture Error'); - }; - - -## ConfigurationData - -> Hermetyzuje zestaw parametrów przechwytywania mediów, które urządzenie obsługuje. - -### Opis - -W tym artykule opisano tryby przechwytywania mediów obsługiwane przez urządzenie. Dane konfiguracji zawiera typ MIME i przechwytywania wymiary do przechwytywania wideo lub obraz. - -Typy MIME powinno stosować się do [RFC2046](http://www.ietf.org/rfc/rfc2046.txt). Przykłady: - - * `video/3gpp` - * `video/quicktime` - * `image/jpeg` - * `audio/amr` - * `audio/wav` - -### Właściwości - - * **Typ**: The ASCII algorytmem małe ciąg reprezentujący typ nośnika. (DOMString) - - * **wysokość**: wysokość obrazu lub wideo w pikselach. Wartość wynosi zero dla klipy dźwiękowe. (Liczba) - - * **szerokość**: szerokość obrazu lub wideo w pikselach. Wartość wynosi zero dla klipy dźwiękowe. (Liczba) - -### Przykład - - // retrieve supported image modes - var imageModes = navigator.device.capture.supportedImageModes; - - // Select mode that has the highest horizontal resolution - var width = 0; - var selectedmode; - for each (var mode in imageModes) { - if (mode.width > width) { - width = mode.width; - selectedmode = mode; - } - } - - -Nie obsługiwane przez każdą platformę. Wszystkie tablice danych konfiguracji są puste. - -## MediaFile.getFormatData - -> Pobiera formatu informacji o pliku przechwytywania mediów. - - mediaFile.getFormatData( - MediaFileDataSuccessCB successCallback, - [MediaFileDataErrorCB errorCallback] - ); - - -### Opis - -Ta funkcja asynchronicznie podejmie próby pobrania informacji o formacie plik multimedialny. Jeśli zakończy się sukcesem, to wywołuje `MediaFileDataSuccessCB` wywołanie zwrotne z obiektu `MediaFileData`. Jeżeli próba nie powiedzie się, funkcja ta wywołuje wywołania zwrotnego `MediaFileDataErrorCB`. - -### Obsługiwane platformy - - * Amazon Fire OS - * Android - * BlackBerry 10 - * iOS - * Windows Phone 7 i 8 - * Windows 8 - * Windows - -### Amazon ogień OS dziwactwa - -Ten API wobec dostęp do mediów informacji o formacie pliku jest ograniczona, więc nie wszystkie `MediaFileData` są obsługiwane właściwości. - -### Jeżyna 10 dziwactwa - -Zapewnia API dla informacji na temat plików multimedialnych, więc wszystkie obiekty `MediaFileData` zwrotu z wartości domyślnych. - -### Dziwactwa Androida - -Ten API wobec dostęp do mediów informacji o formacie pliku jest ograniczona, więc nie wszystkie `MediaFileData` są obsługiwane właściwości. - -### Dziwactwa iOS - -Ten API wobec dostęp do mediów informacji o formacie pliku jest ograniczona, więc nie wszystkie `MediaFileData` są obsługiwane właściwości. - -## MediaFile - -> Hermetyzuje właściwości pliku przechwytywania mediów. - -### Właściwości - - * **Nazwa**: Nazwa pliku, bez informacji o ścieżce. (DOMString) - - * **fullPath**: pełną ścieżkę pliku, łącznie z nazwą. (DOMString) - - * **Typ**: Typ mime pliku (DOMString) - - * **Data ostatniej modyfikacji**: data i czas ostatniej modyfikacji pliku. (Data) - - * **rozmiar**: wielkość pliku w bajtach. (Liczba) - -### Metody - - * **MediaFile.getFormatData**: pobiera informacje o formatach plików multimedialnych. - -## MediaFileData - -> Hermetyzuje informacje formatu pliku multimedialnego. - -### Właściwości - - * **kodery-dekodery**: format rzeczywista zawartość audio i wideo. (DOMString) - - * **bitrate**: średnia szybkość transmisji bitów zawartości. Wartość wynosi zero dla obrazów. (Liczba) - - * **wysokość**: wysokość obrazu lub wideo w pikselach. Wartość wynosi zero dla klipów audio. (Liczba) - - * **szerokość**: szerokość obrazu lub wideo w pikselach. Wartość wynosi zero dla klipów audio. (Liczba) - - * **czas trwania**: długość dźwięku lub wideo klip w kilka sekund. Wartość wynosi zero dla obrazów. (Liczba) - -### Jeżyna 10 dziwactwa - -Nie API zapewnia informacje o formatach plików multimedialnych, więc obiekt `MediaFileData` zwracane przez funkcje `MediaFile.getFormatData` następujące wartości domyślne: - - * **kodery-dekodery**: nie obsługiwane i zwraca`null`. - - * **bitrate**: nie obsługiwane i zwraca zero. - - * **wysokość**: nie obsługiwane i zwraca zero. - - * **szerokość**: nie obsługiwane i zwraca zero. - - * **czas trwania**: nie obsługiwane i zwraca zero. - -### Amazon ogień OS dziwactwa - -Obsługuje następujące `MediaFileData` Właściwości: - - * **kodery-dekodery**: nie obsługiwane i zwraca`null`. - - * **bitrate**: nie obsługiwane i zwraca zero. - - * **wysokość**: obsługiwane: tylko pliki obrazów i wideo. - - * **szerokość**: obsługiwane: tylko pliki obrazów i wideo. - - * **czas trwania**: obsługiwane: audio i wideo tylko pliki - -### Dziwactwa Androida - -Obsługuje następujące `MediaFileData` Właściwości: - - * **kodery-dekodery**: nie obsługiwane i zwraca`null`. - - * **bitrate**: nie obsługiwane i zwraca zero. - - * **wysokość**: obsługiwane: tylko pliki obrazów i wideo. - - * **szerokość**: obsługiwane: tylko pliki obrazów i wideo. - - * **czas trwania**: obsługiwane: audio i wideo tylko pliki. - -### Dziwactwa iOS - -Obsługuje następujące `MediaFileData` Właściwości: - - * **kodery-dekodery**: nie obsługiwane i zwraca`null`. - - * **bitrate**: obsługiwane na iOS4 urządzeń audio tylko. Zwraca wartość zero dla zdjęć i filmów. - - * **wysokość**: obsługiwane: tylko pliki obrazów i wideo. - - * **szerokość**: obsługiwane: tylko pliki obrazów i wideo. - - * **czas trwania**: obsługiwane: audio i wideo tylko pliki. \ No newline at end of file diff --git a/doc/pl/index.md b/doc/pl/index.md deleted file mode 100644 index a8079c84..00000000 --- a/doc/pl/index.md +++ /dev/null @@ -1,551 +0,0 @@ - - -# cordova-plugin-media-capture - -Ten plugin umożliwia dostęp do urządzenia dźwięku, obrazu i możliwości przechwytywania wideo. - -**Ostrzeżenie**: zbierania i wykorzystywania zdjęć, wideo lub audio z urządzenia kamery lub mikrofonu podnosi kwestie prywatności ważne. Polityka prywatności danej aplikacji należy Dyskutować, jak aplikacja używa takich czujników i czy dane zapisane jest współużytkowany z innymi stronami. Ponadto jeśli aplikacji wykorzystanie kamery lub mikrofonu nie jest widoczne w interfejsie użytkownika, powinny zapewnić just-in czas wypowiedzenia przed aplikacji dostęp do kamery lub mikrofonu (jeśli urządzenie system operacyjny nie robi już). Że ogłoszenie powinno zawierać te same informacje, o których wspomniano powyżej, jak również uzyskanie uprawnienia użytkownika (np. poprzez przedstawianie wyborów **OK** i **Nie dzięki**). Należy pamiętać, że niektóre platformy aplikacji może wymagać aplikacji powiadomienia just-in-time oraz uzyskania zgody użytkownika przed dostęp do kamery lub mikrofonu. Aby uzyskać więcej informacji zobacz przewodnik prywatności. - -Ten plugin określa globalne `navigator.device.capture` obiektu. - -Chociaż w globalnym zasięgu, to nie dostępne dopiero po `deviceready` imprezie. - - document.addEventListener("deviceready", onDeviceReady, false); - function onDeviceReady() { - console.log(navigator.device.capture); - } - - -## Instalacja - - cordova plugin add cordova-plugin-media-capture - - -## Obsługiwane platformy - -* Amazon Fire OS -* Android -* BlackBerry 10 -* iOS -* Windows Phone 7 i 8 -* Windows 8 - -## Obiekty - -* Capture -* CaptureAudioOptions -* CaptureImageOptions -* CaptureVideoOptions -* CaptureCallback -* CaptureErrorCB -* ConfigurationData -* MediaFile -* MediaFileData - -## Metody - -* capture.captureAudio -* capture.captureImage -* capture.captureVideo -* MediaFile.getFormatData - -## Właściwości - -* **supportedAudioModes**: nagranie formatów obsługiwanych przez urządzenie. (ConfigurationData[]) - -* **supportedImageModes**: nagrywanie obrazu rozmiarów i formatów obsługiwanych przez urządzenie. (ConfigurationData[]) - -* **supportedVideoModes**: rozdzielczości nagrywania i formatów obsługiwanych przez urządzenie. (ConfigurationData[]) - -## capture.captureAudio - -> Uruchom aplikację rejestrator audio i zwraca informacje o przechwyconych klip audio pliki. - - navigator.device.capture.captureAudio( - CaptureCB captureSuccess, CaptureErrorCB captureError, [CaptureAudioOptions options] - ); - - -### Opis - -Rozpoczyna operację asynchroniczną do przechwytywania audio nagrania za pomocą urządzenia domyślnej aplikacji do nagrywania dźwięku. Operacja pozwala uchwycić wiele nagrań w jednej sesji użytkownika urządzenia. - -Operacji przechwytywania kończy się, gdy użytkownik zamyka nagranie aplikacji, lub zostanie osiągnięta Maksymalna liczba nagrań, określony przez `CaptureAudioOptions.limit`. Jeśli wartość parametru nie `spółka z ograniczoną odpowiedzialnością` jest określony, domyślnie do jednego (1), i operacji przechwytywania kończy po użytkownik rejestruje pojedynczy klip audio. - -Po zakończeniu operacji przechwytywania, `CaptureCallback` wykonuje się z tablicą obiektów `MediaFile` opisu każdego pliku przechwyconych klip audio. Jeśli użytkownik kończy działanie przed klipu audio jest zrobione, `CaptureErrorCallback` wykonuje z obiektem `CaptureError`, z kodem błędu `CaptureError.CAPTURE_NO_MEDIA_FILES`. - -### Obsługiwane platformy - -* Amazon Fire OS -* Android -* BlackBerry 10 -* iOS -* Windows Phone 7 i 8 -* Windows 8 - -### Przykład - - // 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}); - - -### Dziwactwa iOS - -* iOS nie ma domyślnej aplikacji do nagrywania dźwięku, więc podano pewien prosty użytkownik złącze standardowe. - -### Windows Phone 7 i 8 dziwactwa - -* Windows Phone 7 nie ma domyślnej aplikacji do nagrywania dźwięku, więc pewien prosty użytkownik złącze standardowe jest dostarczone. - -## CaptureAudioOptions - -> Zawiera opcje konfiguracji przechwytywania dźwięku. - -### Właściwości - -* **Limit**: Maksymalna liczba klipów audio nagrywać w operacji przechwytywania pojedynczego użytkownika urządzenia. Wartość musi być większa lub równa 1 (domyślnie 1). - -* **czas trwania**: maksymalny czas trwania klipu audio dźwięku, w kilka sekund. - -### Przykład - - // limit capture operation to 3 media files, no longer than 10 seconds each - var options = { limit: 3, duration: 10 }; - - navigator.device.capture.captureAudio(captureSuccess, captureError, options); - - -### Amazon ogień OS dziwactwa - -* `duration`Parametr nie jest obsługiwana. Zapis długości nie może być ograniczony programowo. - -### Dziwactwa Androida - -* `duration`Parametr nie jest obsługiwana. Zapis długości nie może być ograniczony programowo. - -### Jeżyna 10 dziwactwa - -* `duration`Parametr nie jest obsługiwana. Zapis długości nie może być ograniczony programowo. -* `limit`Parametr nie jest obsługiwana, więc tylko jednego nagrania mogą być tworzone dla każdego wywołania. - -### Dziwactwa iOS - -* `limit`Parametr nie jest obsługiwana, więc tylko jednego nagrania mogą być tworzone dla każdego wywołania. - -## capture.captureImage - -> Uruchom aplikację aparatu i zwraca informacje o przechwyconych obrazów. - - navigator.device.capture.captureImage( - CaptureCB captureSuccess, CaptureErrorCB captureError, [CaptureImageOptions options] - ); - - -### Opis - -Rozpoczyna operację asynchroniczną do przechwytywania obrazów przy użyciu urządzenia aparatu. Operacja pozwala użytkownik wobec zawładnięcie więcej niż jeden obraz w jednej sesji. - -Kończy operację przechwytywania, albo kiedy użytkownik zamyka aplikację aparatu, lub zostanie osiągnięta Maksymalna liczba nagrań, określony przez `CaptureAudioOptions.limit`. Jeśli nie `limit` wartość jest określona, domyślnie jest to jeden (1), i operacji przechwytywania kończy się po użytkownika przechwytuje jeden obraz. - -Po zakończeniu operacji przechwytywania, wywołuje `CaptureCB` wywołanie zwrotne z tablicą obiektów `MediaFile` opisu każdego pliku przechwyconego obrazu. Jeśli użytkownik kończy operację przed zrobieniem zdjęcia, wywołania zwrotnego `CaptureErrorCB` wykonuje się z obiektu `CaptureError` z kodem błędu `CaptureError.CAPTURE_NO_MEDIA_FILES`. - -### Obsługiwane platformy - -* Amazon Fire OS -* Android -* BlackBerry 10 -* iOS -* Windows Phone 7 i 8 -* Windows 8 - -### Dziwactwa Windows Phone 7 - -Wywoływanie aparat native aplikacji, podczas gdy urządzenie jest podłączone przez Zune nie dziala, i wykonuje błąd wywołania zwrotnego. - -### Przykład - - // 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}); - - -## CaptureImageOptions - -> Zawiera opcje konfiguracji przechwytywania obrazu. - -### Właściwości - -* **limit**: Maksymalna liczba zdjęć, użytkownik puszka metalowa zawładnięcie w operacji przechwytywania pojedynczego. Wartość musi być większa lub równa 1 (domyślnie 1). - -### Przykład - - // limit capture operation to 3 images - var options = { limit: 3 }; - - navigator.device.capture.captureImage(captureSuccess, captureError, options); - - -### Dziwactwa iOS - -* Parametr **limit** nie jest obsługiwane, i tylko jeden obraz jest podejmowana na wywołanie. - -## capture.captureVideo - -> Uruchom aplikację rejestrator wideo i zwraca informacje o przechwyconych wideo akta. - - navigator.device.capture.captureVideo( - CaptureCB captureSuccess, CaptureErrorCB captureError, [CaptureVideoOptions options] - ); - - -### Opis - -Rozpoczyna operację asynchroniczną do przechwytywania nagrania wideo za pomocą urządzenia wideo notujący zgłoszenie. Operacja pozwala użytkownik wobec zawładnięcie więcej niż jednego nagrania w pojedynczej sesji. - -Operacji przechwytywania kończy się, gdy użytkownik zamyka aplikację nagrywania wideo, lub zostanie osiągnięta Maksymalna liczba nagrań, określony przez `CaptureVideoOptions.limit`. Jeśli wartość parametru nie `spółka z ograniczoną odpowiedzialnością` jest określony, domyślnie do jednego (1), i operacji przechwytywania kończy po użytkownik rejestruje pojedynczy klip audio. - -Po zakończeniu operacji przechwytywania wywołania zwrotnego `CaptureCB` wykonuje z tablicą obiektów `MediaFile` opisu każdego pliku wideo przechwycone. Jeśli użytkownik kończy operację przed przechwytywania wideo, wywołania zwrotnego `CaptureErrorCB` wykonuje się z obiektu `CaptureError` z kodem błędu `CaptureError.CAPTURE_NO_MEDIA_FILES`. - -### Obsługiwane platformy - -* Amazon Fire OS -* Android -* BlackBerry 10 -* iOS -* Windows Phone 7 i 8 -* Windows 8 - -### Przykład - - // 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}); - - -### Jeżyna 10 dziwactwa - -* Cordova dla BlackBerry 10 próbuje uruchomić wniosku **Rejestrator wideo** dostarczone przez RIM, przechwytywanie nagrań wideo. Aplikacja otrzymuje `CaptureError.CAPTURE_NOT_SUPPORTED` kod błędu, jeśli aplikacja nie jest zainstalowana na urządzeniu. - -## CaptureVideoOptions - -> Zawiera opcje konfiguracji przechwytywania wideo. - -### Właściwości - -* **Limit**: Maksymalna liczba klipów wideo urządzenia użytkownik puszka metalowa zawładnięcie w operacji przechwytywania pojedynczego. Wartość musi być większa lub równa 1 (domyślnie 1). - -* **czas trwania**: maksymalny czas trwania klipu wideo w kilka sekund. - -### Przykład - - // limit capture operation to 3 video clips - var options = { limit: 3 }; - - navigator.device.capture.captureVideo(captureSuccess, captureError, options); - - -### Jeżyna 10 dziwactwa - -* **Czas trwania** parametr nie jest obsługiwana, więc długość nagrania nie może być ograniczony programowo. - -### Dziwactwa iOS - -* Parametr **limit** nie jest obsługiwane. Tylko jeden film jest nagrany na wywołanie. - -## CaptureCB - -> Wywoływane po operacji przechwytywania mediów sukces. - - function captureSuccess( MediaFile[] mediaFiles ) { ... }; - - -### Opis - -Ta funkcja wykonuje się po zakończeniu operacji wychwytywania sukces. W tym momencie plik multimedialny został złapany, a następnie użytkownik ma zakończony aplikacji przechwytywania mediów, czy osiągnięto limit przechwytywania. - -Każdy obiekt `MediaFile` opisuje plik multimedialny przechwycone. - -### Przykład - - // capture callback - 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 - } - }; - - -## CaptureError - -> Hermetyzuje kod błędów wynikających z operacji przechwytywania mediów nie powiodło się. - -### Właściwości - -* **Kod**: jeden z kodów błędów wstępnie zdefiniowanych poniżej. - -### Stałe - -* `CaptureError.CAPTURE_INTERNAL_ERR`: Kamery lub mikrofonu udało się przechwycić obraz lub dźwięk. - -* `CaptureError.CAPTURE_APPLICATION_BUSY`: Aplikacji przechwytywania kamery lub audio jest aktualnie obsługujący wniosek innego przechwytywania. - -* `CaptureError.CAPTURE_INVALID_ARGUMENT`: Nieprawidłowe użycie interfejsu API (np. wartości `limit` jest mniej niż jeden). - -* `CaptureError.CAPTURE_NO_MEDIA_FILES`: Użytkownik zamyka aparat fotograficzny lub audio aplikacji przechwytywania przed zrobieniem czegokolwiek. - -* `CaptureError.CAPTURE_NOT_SUPPORTED`: Przechwytywania Żądana operacja nie jest obsługiwana. - -## CaptureErrorCB - -> Wywołany, jeśli wystąpi błąd podczas operacji przechwytywania mediów. - - function captureError( CaptureError error ) { ... }; - - -### Opis - -Ta funkcja wykonuje, jeśli wystąpi błąd, gdy próbuje uruchomić nośnik przechwytywania operacji. Brak scenariusze podczas aplikacji przechwytywania jest zajęty, operacji przechwytywania jest już miejsce, lub użytkownik nie anuluje operację zanim jakiekolwiek pliki multimedialne są przechwytywane. - -Ta funkcja wykonuje się z obiektem `CaptureError`, zawierające odpowiedni komunikat `Kod`. - -### Przykład - - // capture error callback - var captureError = function(error) { - navigator.notification.alert('Error code: ' + error.code, null, 'Capture Error'); - }; - - -## ConfigurationData - -> Hermetyzuje zestaw parametrów przechwytywania mediów, które urządzenie obsługuje. - -### Opis - -W tym artykule opisano tryby przechwytywania mediów obsługiwane przez urządzenie. Dane konfiguracji zawiera typ MIME i przechwytywania wymiary do przechwytywania wideo lub obraz. - -Typy MIME powinno stosować się do [RFC2046][1]. Przykłady: - - [1]: http://www.ietf.org/rfc/rfc2046.txt - -* `video/3gpp` -* `video/quicktime` -* `image/jpeg` -* `audio/amr` -* `audio/wav` - -### Właściwości - -* **Typ**: The ASCII algorytmem małe ciąg reprezentujący typ nośnika. (DOMString) - -* **wysokość**: wysokość obrazu lub wideo w pikselach. Wartość wynosi zero dla klipy dźwiękowe. (Liczba) - -* **szerokość**: szerokość obrazu lub wideo w pikselach. Wartość wynosi zero dla klipy dźwiękowe. (Liczba) - -### Przykład - - // retrieve supported image modes - var imageModes = navigator.device.capture.supportedImageModes; - - // Select mode that has the highest horizontal resolution - var width = 0; - var selectedmode; - for each (var mode in imageModes) { - if (mode.width > width) { - width = mode.width; - selectedmode = mode; - } - } - - -Nie obsługiwane przez każdą platformę. Wszystkie tablice danych konfiguracji są puste. - -## MediaFile.getFormatData - -> Pobiera formatu informacji o pliku przechwytywania mediów. - - mediaFile.getFormatData( - MediaFileDataSuccessCB successCallback, - [MediaFileDataErrorCB errorCallback] - ); - - -### Opis - -Ta funkcja asynchronicznie podejmie próby pobrania informacji o formacie plik multimedialny. Jeśli zakończy się sukcesem, to wywołuje `MediaFileDataSuccessCB` wywołanie zwrotne z obiektu `MediaFileData`. Jeżeli próba nie powiedzie się, funkcja ta wywołuje wywołania zwrotnego `MediaFileDataErrorCB`. - -### Obsługiwane platformy - -* Amazon Fire OS -* Android -* BlackBerry 10 -* iOS -* Windows Phone 7 i 8 -* Windows 8 - -### Amazon ogień OS dziwactwa - -Ten API wobec dostęp do mediów informacji o formacie pliku jest ograniczona, więc nie wszystkie `MediaFileData` są obsługiwane właściwości. - -### Jeżyna 10 dziwactwa - -Zapewnia API dla informacji na temat plików multimedialnych, więc wszystkie obiekty `MediaFileData` zwrotu z wartości domyślnych. - -### Dziwactwa Androida - -Ten API wobec dostęp do mediów informacji o formacie pliku jest ograniczona, więc nie wszystkie `MediaFileData` są obsługiwane właściwości. - -### Dziwactwa iOS - -Ten API wobec dostęp do mediów informacji o formacie pliku jest ograniczona, więc nie wszystkie `MediaFileData` są obsługiwane właściwości. - -## MediaFile - -> Hermetyzuje właściwości pliku przechwytywania mediów. - -### Właściwości - -* **Nazwa**: Nazwa pliku, bez informacji o ścieżce. (DOMString) - -* **fullPath**: pełną ścieżkę pliku, łącznie z nazwą. (DOMString) - -* **Typ**: Typ mime pliku (DOMString) - -* **Data ostatniej modyfikacji**: data i czas ostatniej modyfikacji pliku. (Data) - -* **rozmiar**: wielkość pliku w bajtach. (Liczba) - -### Metody - -* **MediaFile.getFormatData**: pobiera informacje o formatach plików multimedialnych. - -## MediaFileData - -> Hermetyzuje informacje formatu pliku multimedialnego. - -### Właściwości - -* **kodery-dekodery**: format rzeczywista zawartość audio i wideo. (DOMString) - -* **bitrate**: średnia szybkość transmisji bitów zawartości. Wartość wynosi zero dla obrazów. (Liczba) - -* **wysokość**: wysokość obrazu lub wideo w pikselach. Wartość wynosi zero dla klipów audio. (Liczba) - -* **szerokość**: szerokość obrazu lub wideo w pikselach. Wartość wynosi zero dla klipów audio. (Liczba) - -* **czas trwania**: długość dźwięku lub wideo klip w kilka sekund. Wartość wynosi zero dla obrazów. (Liczba) - -### Jeżyna 10 dziwactwa - -Nie API zapewnia informacje o formatach plików multimedialnych, więc obiekt `MediaFileData` zwracane przez funkcje `MediaFile.getFormatData` następujące wartości domyślne: - -* **kodery-dekodery**: nie obsługiwane i zwraca`null`. - -* **bitrate**: nie obsługiwane i zwraca zero. - -* **wysokość**: nie obsługiwane i zwraca zero. - -* **szerokość**: nie obsługiwane i zwraca zero. - -* **czas trwania**: nie obsługiwane i zwraca zero. - -### Amazon ogień OS dziwactwa - -Obsługuje następujące `MediaFileData` Właściwości: - -* **kodery-dekodery**: nie obsługiwane i zwraca`null`. - -* **bitrate**: nie obsługiwane i zwraca zero. - -* **wysokość**: obsługiwane: tylko pliki obrazów i wideo. - -* **szerokość**: obsługiwane: tylko pliki obrazów i wideo. - -* **czas trwania**: obsługiwane: audio i wideo tylko pliki - -### Dziwactwa Androida - -Obsługuje następujące `MediaFileData` Właściwości: - -* **kodery-dekodery**: nie obsługiwane i zwraca`null`. - -* **bitrate**: nie obsługiwane i zwraca zero. - -* **wysokość**: obsługiwane: tylko pliki obrazów i wideo. - -* **szerokość**: obsługiwane: tylko pliki obrazów i wideo. - -* **czas trwania**: obsługiwane: audio i wideo tylko pliki. - -### Dziwactwa iOS - -Obsługuje następujące `MediaFileData` Właściwości: - -* **kodery-dekodery**: nie obsługiwane i zwraca`null`. - -* **bitrate**: obsługiwane na iOS4 urządzeń audio tylko. Zwraca wartość zero dla zdjęć i filmów. - -* **wysokość**: obsługiwane: tylko pliki obrazów i wideo. - -* **szerokość**: obsługiwane: tylko pliki obrazów i wideo. - -* **czas trwania**: obsługiwane: audio i wideo tylko pliki. diff --git a/doc/ru/index.md b/doc/ru/index.md deleted file mode 100644 index c2466cf5..00000000 --- a/doc/ru/index.md +++ /dev/null @@ -1,541 +0,0 @@ - - -# cordova-plugin-media-capture - -Этот плагин обеспечивает доступ к аудио, изображения и возможности видео захвата устройства. - -**Предупреждение**: сбор и использование изображений, видео или аудио с камеры или микрофона устройства поднимает вопросы важные конфиденциальности. Политика конфиденциальности вашего приложения должна обсудить, как приложение использует такие датчики и ли данные, записанные совместно с другими сторонами. Кроме того если app использование камеры или микрофона не является очевидной в пользовательском интерфейсе, необходимо предоставить уведомление just-in-time, прежде, чем приложение обращается к камеру или микрофон (если операционной системы устройства не так уже). Это уведомление должно обеспечивать ту же информацию, отметили выше, а также получения разрешения пользователя (например, путем представления выбора **OK** и **Нет, спасибо**). Обратите внимание, что некоторые торговые площадки app может потребоваться приложению уведомлять just-in-time и получить разрешение от пользователя до доступа к камеру или микрофон. Для получения дополнительной информации пожалуйста, смотрите в руководстве конфиденциальности. - -## Установка - - cordova plugin add cordova-plugin-media-capture - - -## Поддерживаемые платформы - -* Amazon Fire OS -* Android -* BlackBerry 10 -* iOS -* Windows Phone 7 и 8 -* Windows 8 - -## Объекты - -* Съемка -* CaptureAudioOptions -* CaptureImageOptions -* CaptureVideoOptions -* CaptureCallback -* CaptureErrorCB -* ConfigurationData -* MediaFile -* MediaFileData - -## Методы - -* capture.captureAudio -* capture.captureImage -* capture.captureVideo -* MediaFile.getFormatData - -## Параметры - -* **supportedAudioModes**: аудио записи форматы, поддерживаемые устройством. (ConfigurationData[]) - -* **supportedImageModes**: запись изображения размеры и форматы, поддерживаемые устройством. (ConfigurationData[]) - -* **supportedVideoModes**: запись видео резолюций и форматы, поддерживаемые устройством. (ConfigurationData[]) - -## capture.captureAudio - -> Запустите приложение аудио рекордер и возвращают сведения о файлах захватили аудио клип. - - navigator.device.capture.captureAudio( - CaptureCB captureSuccess, CaptureErrorCB captureError, [CaptureAudioOptions options] - ); - - -### Описание - -Начинает асинхронную операцию, чтобы захватить аудио записи с помощью устройства по умолчанию аудио записи приложения. Операция позволяет пользователю устройства захвата нескольких записей за один сеанс. - -Операции захвата заканчивается, когда либо пользователь выходит из аудио записи приложения, или максимальное количество записей, указанный `CaptureAudioOptions.limit` достигается. Если не `limit` значение параметра указывается, по умолчанию он один (1) и захвата операция прекращается после того, как пользователь записывает один аудио клип. - -По завершении операции захвата `CaptureCallback` выполняет с массивом `MediaFile` объекты, описывающие каждый захвачен файл аудио клип. Если пользователь завершает операцию перед захваченных аудио клип `CaptureErrorCallback` выполняет с `CaptureError` объект, показывая `CaptureError.CAPTURE_NO_MEDIA_FILES` код ошибки. - -### Поддерживаемые платформы - -* Amazon Fire OS -* Android -* BlackBerry 10 -* iOS -* Windows Phone 7 и 8 -* Windows 8 - -### Пример - - // 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}); - - -### Особенности iOS - -* iOS не имеет приложение записи звука по умолчанию, поэтому предоставляется простой пользовательский интерфейс. - -### Особенности Windows Phone 7 и 8 - -* Windows Phone 7 не имеет приложение записи звука по умолчанию, поэтому предоставляется простой пользовательский интерфейс. - -## CaptureAudioOptions - -> Инкапсулирует параметры конфигурации аудио захвата. - -### Параметры - -* **ограничение**: максимальное количество аудио клипы, устройства пользователь может записывать в одном захвата. Значение должно быть больше или равно 1 (по умолчанию 1). - -* **Продолжительность**: максимальная продолжительность аудио звуковой клип, в секундах. - -### Пример - - // limit capture operation to 3 media files, no longer than 10 seconds each - var options = { limit: 3, duration: 10 }; - - navigator.device.capture.captureAudio(captureSuccess, captureError, options); - - -### Особенности Amazon Fire OS - -* `duration`Параметр не поддерживается. Запись длины не могут быть ограничены программно. - -### Особенности Android - -* `duration`Параметр не поддерживается. Запись длины не могут быть ограничены программно. - -### Особенности BlackBerry 10 - -* `duration`Параметр не поддерживается. Запись длины не могут быть ограничены программно. -* `limit`Параметр не поддерживается, так что только одна запись может быть создан для каждого вызова. - -### Особенности iOS - -* `limit`Параметр не поддерживается, так что только одна запись может быть создан для каждого вызова. - -## capture.captureImage - -> Запустите приложение камеры и возвращают сведения о файлах образа. - - navigator.device.capture.captureImage( - CaptureCB captureSuccess, CaptureErrorCB captureError, [CaptureImageOptions options] - ); - - -### Описание - -Начинает асинхронную операцию для захвата изображения с помощью приложения камеры устройства. Операция позволяет пользователям захватывать более одного изображения за один сеанс. - -Операции захвата заканчивается, либо когда пользователь закрывает приложение камеры, или максимальное количество записей, указанный `CaptureAudioOptions.limit` достигается. Если не `limit` указано значение, по умолчанию он один (1) и захвата операция прекращается после того, как пользователь захватывает отдельное изображение. - -По завершении операции захвата он вызывает `CaptureCB` обратного вызова с массивом `MediaFile` объектов, описывающих каждый файл образа. Если пользователь завершает операцию до захвата изображения, `CaptureErrorCB` обратного вызова выполняется с `CaptureError` объекта с изображением `CaptureError.CAPTURE_NO_MEDIA_FILES` код ошибки. - -### Поддерживаемые платформы - -* Amazon Fire OS -* Android -* BlackBerry 10 -* iOS -* Windows Phone 7 и 8 -* Windows 8 - -### Особенности Windows Phone 7 - -Вызов приложения родной камеры в то время как ваше устройство подключено через Zune не работает, и выполняет обратный вызов для ошибки. - -### Пример - - // 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}); - - -## CaptureImageOptions - -> Инкапсулирует параметры конфигурации захвата изображения. - -### Параметры - -* **ограничение**: максимальное количество изображений, которые пользователь может захватить в ходе операции один захват. Значение должно быть больше или равно 1 (по умолчанию 1). - -### Пример - - // limit capture operation to 3 images - var options = { limit: 3 }; - - navigator.device.capture.captureImage(captureSuccess, captureError, options); - - -### Особенности iOS - -* Параметр **limit** не поддерживается, и только одно изображение берется за вызов. - -## capture.captureVideo - -> Запустите приложение видеомагнитофон и возвращают сведения о файлах захваченного видео клип. - - navigator.device.capture.captureVideo( - CaptureCB captureSuccess, CaptureErrorCB captureError, [CaptureVideoOptions options] - ); - - -### Описание - -Начинает асинхронную операцию, чтобы захватить видео записи с помощью устройства записи видео приложения. Операция позволяет пользователю захватить более чем одной записи в течение одной сессии. - -Операции захвата заканчивается, когда либо пользователь выходит из приложения записи видео, или максимальное количество записей, указанный `CaptureVideoOptions.limit` достигается. Если не `limit` значение параметра указывается, по умолчанию он один (1) и захвата операция прекращается после того, как пользователь записывает один видео клип. - -По завершении операции захвата его `CaptureCB` обратного вызова выполняется с массивом `MediaFile` объекты, описывающие каждый захвачен файл видео клип. Если пользователь завершает операцию до захвата видео клип, `CaptureErrorCB` обратного вызова выполняется с `CaptureError` объекта с изображением `CaptureError.CAPTURE_NO_MEDIA_FILES` код ошибки. - -### Поддерживаемые платформы - -* Amazon Fire OS -* Android -* BlackBerry 10 -* iOS -* Windows Phone 7 и 8 -* Windows 8 - -### Пример - - // 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}); - - -### Особенности BlackBerry 10 - -* Cordova для BlackBerry 10 пытается запустить приложение **Видео рекордер** , предоставляемых RIM, чтобы захватить видео записи. Приложение получает `CaptureError.CAPTURE_NOT_SUPPORTED` код ошибки, если приложение не установлено на устройстве. - -## CaptureVideoOptions - -> Инкапсулирует параметры конфигурации захвата видео. - -### Параметры - -* **ограничение**: максимальное количество видео клипы устройства пользователь может захватить в ходе операции один захват. Значение должно быть больше или равно 1 (по умолчанию 1). - -* **Продолжительность**: максимальная длительность видеоклипа, в секундах. - -### Пример - - // limit capture operation to 3 video clips - var options = { limit: 3 }; - - navigator.device.capture.captureVideo(captureSuccess, captureError, options); - - -### Особенности BlackBerry 10 - -* Параметр **duration** не поддерживается, поэтому длина записи не могут быть ограничены программно. - -### Особенности iOS - -* Параметр **limit** не поддерживается. Только один видео записывается на вызовов. - -## CaptureCB - -> Вызывается после операции захвата успешных медиа. - - function captureSuccess( MediaFile[] mediaFiles ) { ... }; - - -### Описание - -Эта функция выполняется после завершения операции успешного захвата. В этот момент был захвачен файл мультимедиа и либо пользователь завершил приложение захват средств массовой информации, или захват предел был достигнут. - -Каждый `MediaFile` объект описывает захваченных медиа-файлов. - -### Пример - - // capture callback - 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 - } - }; - - -## CaptureError - -> Инкапсулирует код ошибки, в результате операции захвата неудачной СМИ. - -### Параметры - -* **код**: один из предопределенных кодов, перечисленных ниже. - -### Константы - -* `CaptureError.CAPTURE_INTERNAL_ERR`: Камеру или микрофон не удалось захватить изображение или звук. - -* `CaptureError.CAPTURE_APPLICATION_BUSY`: В настоящее время приложение камеры или аудио захвата отбывает другой запрос захвата. - -* `CaptureError.CAPTURE_INVALID_ARGUMENT`: Недопустимое использование API (например, значение `limit` меньше единицы). - -* `CaptureError.CAPTURE_NO_MEDIA_FILES`: Пользователь выходит из приложения камеры или аудио захвата до захвата ничего. - -* `CaptureError.CAPTURE_NOT_SUPPORTED`: Запрошенный захвата операция не поддерживается. - -## CaptureErrorCB - -> Вызывается, если ошибка возникает во время операции захвата средств массовой информации. - - function captureError( CaptureError error ) { ... }; - - -### Описание - -Эта функция выполняется, если возникает ошибка при попытке запуска операции захвата мультимедиа. Сценарии сбоев включают когда захват приложение занято, операции захвата уже имеет место, или пользователь отменяет операцию, прежде чем любой медиа-файлы записываются. - -Эта функция выполняет с `CaptureError` объект, содержащий соответствующие ошибки`code`. - -### Пример - - // capture error callback - var captureError = function(error) { - navigator.notification.alert('Error code: ' + error.code, null, 'Capture Error'); - }; - - -## ConfigurationData - -> Инкапсулирует набор параметров захвата средств массовой информации, которые поддерживает устройство. - -### Описание - -Описывает режимы захвата мультимедиа поддерживается устройством. Данные конфигурации включает в себя тип MIME и размеры захвата для захвата видео или изображения. - -Типы MIME должны присоединиться к [RFC2046][1]. Примеры: - - [1]: http://www.ietf.org/rfc/rfc2046.txt - -* `video/3gpp` -* `video/quicktime` -* `image/jpeg` -* `audio/amr` -* `audio/wav` - -### Параметры - -* **тип**: кодировке ASCII строчные строка, представляющая тип носителя. (DOMString) - -* **Высота**: высота изображения или видео в пикселях. Значение равно нулю для звуковых клипов. (Число) - -* **Ширина**: ширина изображения или видео в пикселях. Значение равно нулю для звуковых клипов. (Число) - -### Пример - - // retrieve supported image modes - var imageModes = navigator.device.capture.supportedImageModes; - - // Select mode that has the highest horizontal resolution - var width = 0; - var selectedmode; - for each (var mode in imageModes) { - if (mode.width > width) { - width = mode.width; - selectedmode = mode; - } - } - - -Не поддерживается на любой платформе. Все массивы данных конфигурации являются пустыми. - -## MediaFile.getFormatData - -> Извлекает формат сведений о файле записи СМИ. - - mediaFile.getFormatData( - MediaFileDataSuccessCB successCallback, - [MediaFileDataErrorCB errorCallback] - ); - - -### Описание - -Эта функция асинхронно пытается извлечь сведения о формате для файла мультимедиа. Если успешно, он вызывает `MediaFileDataSuccessCB` обратного вызова с `MediaFileData` объект. Если попытка завершается неудачей, то функция вызывает `MediaFileDataErrorCB` обратного вызова. - -### Поддерживаемые платформы - -* Amazon Fire OS -* Android -* BlackBerry 10 -* iOS -* Windows Phone 7 и 8 -* Windows 8 - -### Особенности Amazon Fire OS - -API для доступа к медиа файла формата информации ограничено, поэтому не все `MediaFileData` свойства поддерживаются. - -### Особенности BlackBerry 10 - -Не предоставляет API для получения информации о медиа-файлов, так что все `MediaFileData` объекты возвращают со значениями по умолчанию. - -### Особенности Android - -API для доступа к медиа файлов формата информации ограничено, поэтому не все `MediaFileData` свойства поддерживаются. - -### Особенности iOS - -API для доступа к медиа файлов формата информации ограничено, поэтому не все `MediaFileData` свойства поддерживаются. - -## MediaFile - -> Инкапсулирует свойства файла захвата мультимедиа. - -### Параметры - -* **имя**: имя файла, без сведений о пути. (DOMString) - -* **полный путь**: полный путь к файлу, включая имя. (DOMString) - -* **тип**: тип mime файла (DOMString) - -* **lastModifiedDate**: Дата и время последнего изменения файла. (Дата) - -* **Размер**: Размер файла в байтах. (Число) - -### Методы - -* **MediaFile.getFormatData**: Возвращает сведения о формате файла мультимедиа. - -## MediaFileData - -> Инкапсулирует сведения о файле мультимедиа формате. - -### Параметры - -* **кодеки**: фактический формат аудио и видео контента. (DOMString) - -* **битрейт**: средний битрейт контента. Значение равно нулю для изображений. (Число) - -* **Высота**: высота изображения или видео в пикселях. Значение равно нулю для аудио клипы. (Число) - -* **Ширина**: ширина изображения или видео в пикселях. Значение равно нулю для аудио клипы. (Число) - -* **Продолжительность**: продолжительность видео- или звукового клипа в секундах. Значение равно нулю для изображений. (Число) - -### Особенности BlackBerry 10 - -Нет API предоставляет сведения о формате для мультимедийных файлов, так что `MediaFileData` объект, возвращенный `MediaFile.getFormatData` имеет следующие значения по умолчанию: - -* **кодеки**: не поддерживается и возвращает`null`. - -* **битрейт**: не поддерживается и возвращает ноль. - -* **Высота**: не поддерживается и возвращает ноль. - -* **Ширина**: не поддерживается и возвращает ноль. - -* **Продолжительность**: не поддерживается и возвращает ноль. - -### Особенности Amazon Fire OS - -Поддерживает следующие `MediaFileData` Свойства: - -* **кодеки**: не поддерживается и возвращает`null`. - -* **битрейт**: не поддерживается и возвращает ноль. - -* **Высота**: поддерживается: только изображения и видео файлов. - -* **Ширина**: поддерживается: только изображения и видео файлов. - -* **Продолжительность**: поддерживается: аудио и видео файлы, только - -### Особенности Android - -Поддерживает следующие `MediaFileData` Свойства: - -* **кодеки**: не поддерживается и возвращает`null`. - -* **битрейт**: не поддерживается и возвращает ноль. - -* **Высота**: поддерживается: только изображения и видео файлы. - -* **Ширина**: поддерживается: только изображения и видео файлы. - -* **Продолжительность**: поддерживается: аудио и видео файлы только. - -### Особенности iOS - -Поддерживает следующие `MediaFileData` Свойства: - -* **кодеки**: не поддерживается и возвращает`null`. - -* **битрейт**: поддерживается на устройствах iOS4 для только аудио. Возвращает значение ноль для изображений и видео. - -* **Высота**: поддерживается: только изображения и видео файлов. - -* **Ширина**: поддерживается: только изображения и видео файлов. - -* **Продолжительность**: Поддерживаемые: аудио и видео файлы только. diff --git a/doc/zh/README.md b/doc/zh/README.md deleted file mode 100644 index 4326227b..00000000 --- a/doc/zh/README.md +++ /dev/null @@ -1,564 +0,0 @@ - - -# cordova-plugin-media-capture - -[![Build Status](https://travis-ci.org/apache/cordova-plugin-media-capture.svg)](https://travis-ci.org/apache/cordova-plugin-media-capture) - -這個外掛程式提供了對設備的音訊、 圖像和視頻捕獲功能的訪問。 - -**警告**: 收集和使用的圖像、 視頻或音訊裝置的攝像頭或麥克風從提出了重要的隱私問題。 您的應用程式的隱私權原則應該討論應用程式如何使用這種感應器和記錄的資料是否與任何其他方共用。 此外,如果攝像機或麥克風的應用程式的使用在使用者介面中不是明顯的你應該之前應用程式訪問的相機或麥克風 (如果設備作業系統不會這樣做已經) 提供只是在時間的通知。 該通知應提供相同的資訊上文指出的並獲取該使用者的許可權 (例如,通過為**確定**並**不感謝**提出的選擇)。 請注意有些應用程式市場可能需要您的應用程式提供只是時間的通知,並從訪問攝像機或麥克風之前使用者獲得的許可權。 有關詳細資訊,請參閱隱私指南。 - -這個外掛程式定義全球 `navigator.device.capture` 物件。 - -雖然在全球範圍內,它不可用直到 `deviceready` 事件之後。 - - document.addEventListener("deviceready", onDeviceReady, false); - function onDeviceReady() { - console.log(navigator.device.capture); - } - - -## 安裝 - - cordova plugin add cordova-plugin-media-capture - - -## 支援的平臺 - - * 亞馬遜火 OS - * Android 系統 - * 黑莓 10 - * 瀏覽器 - * iOS - * Windows Phone 7 和 8 - * Windows 8 - * Windows - -## 物件 - - * 捕獲 - * CaptureAudioOptions - * CaptureImageOptions - * CaptureVideoOptions - * CaptureCallback - * CaptureErrorCB - * ConfigurationData - * MediaFile - * MediaFileData - -## 方法 - - * capture.captureAudio - * capture.captureImage - * capture.captureVideo - * MediaFile.getFormatData - -## 屬性 - - * **supportedAudioModes**: 音訊錄音設備所支援的格式。(ConfigurationData[]) - - * **supportedImageModes**: 錄製圖像大小和格式的設備支援。(ConfigurationData[]) - - * **supportedVideoModes**: 錄製的視頻解析度和設備支援的格式。(ConfigurationData[]) - -## capture.captureAudio - -> 啟動音訊答錄機應用程式並返回有關捕獲音訊剪輯檔的資訊。 - - navigator.device.capture.captureAudio( - CaptureCB captureSuccess, CaptureErrorCB captureError, [CaptureAudioOptions options] - ); - - -### 說明 - -開始一個非同步作業以捕獲使用該設備的預設音訊錄製應用程式的音訊錄音。 該操作允許在單個會話中捕獲多個錄音設備使用者。 - -捕獲操作結束時,在使用者退出錄音應用程式,或者達到了錄音由 `CaptureAudioOptions.limit` 指定的最大數目。 如果未不指定任何 `limit` 參數值,它將預設為一 (1) 和捕獲操作將終止後使用者記錄單個音訊剪輯。 - -當捕獲操作完成後時,`CaptureCallback` 執行描述每個捕獲音訊剪輯檔的 `MediaFile` 物件的陣列。 如果使用者終止操作之前捕獲音訊的剪輯,`CaptureErrorCallback` 使用 `CaptureError` 物件時,執行具有 `CaptureError.CAPTURE_NO_MEDIA_FILES` 錯誤代碼。 - -### 支援的平臺 - - * 亞馬遜火 OS - * Android 系統 - * 黑莓 10 - * iOS - * Windows Phone 7 和 8 - * Windows 8 - * Windows - -### 示例 - - // 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}); - - -### iOS 的怪癖 - - * iOS 沒有預設的音訊錄音應用程式,因此提供了一個簡單的使用者介面。 - -### Windows Phone 7 和 8 怪癖 - - * Windows Phone 7 沒有預設的音訊錄音應用程式,因此提供了一個簡單的使用者介面。 - -## CaptureAudioOptions - -> 封裝的音訊捕獲的配置選項。 - -### 屬性 - - * **limit**: 音訊剪輯設備使用者可以在單個捕獲操作中記錄的最大數目。值必須是大於或等於 1 (預設為 1)。 - - * **duration**: 音訊的音效片段,以秒為單位的最長期限。 - -### 示例 - - // limit capture operation to 3 media files, no longer than 10 seconds each - var options = { limit: 3, duration: 10 }; - - navigator.device.capture.captureAudio(captureSuccess, captureError, options); - - -### 亞馬遜火 OS 怪癖 - - * `duration`參數不受支援。記錄長度不能僅限於以程式設計方式。 - -### Android 的怪癖 - - * `duration`參數不受支援。記錄長度不能局限以程式設計方式。 - -### 黑莓 10 怪癖 - - * `duration`參數不受支援。記錄長度不能局限以程式設計方式。 - * `limit`參數不受支援,所以只有一個記錄可以創建的每個調用。 - -### iOS 的怪癖 - - * `limit`參數不受支援,所以只有一個記錄可以創建的每個調用。 - -## capture.captureImage - -> 啟動攝像頭應用程式並返回有關捕獲的影像檔的資訊。 - - navigator.device.capture.captureImage( - CaptureCB captureSuccess, CaptureErrorCB captureError, [CaptureImageOptions options] - ); - - -### 說明 - -開始一個非同步作業以捕獲圖像使用設備的攝像頭應用程式。該操作允許使用者在單個會話中捕獲多個圖像。 - -當使用者關閉攝像頭應用程式,或錄音由 `CaptureAudioOptions.limit` 指定的最大數目達到捕獲操作結束。 如果未指定任何 `limit` 值,其預設值為一 (1) 和捕獲操作終止後使用者捕捉到一個單一的形象。 - -當捕獲操作完成後時,它將調用 `CaptureCB` 回檔與描述每個捕獲的影像檔的 `MediaFile` 物件的陣列。 如果使用者終止之前捕獲的圖像操作,`CaptureErrorCB` 回檔執行同一個 `CaptureError` 物件,該物件具有一個 `CaptureError.CAPTURE_NO_MEDIA_FILES` 錯誤代碼。 - -### 支援的平臺 - - * 亞馬遜火 OS - * Android 系統 - * 黑莓 10 - * 瀏覽器 - * iOS - * Windows Phone 7 和 8 - * Windows 8 - * Windows - -### Windows Phone 7 的怪癖 - -調用本機攝像頭應用程式,而通過 Zune 連接您的設備不能工作,和錯誤回檔執行。 - -### 瀏覽器的怪癖 - -在 Chrome、 火狐瀏覽器和歌劇作品只 (因為 IE 和 Safari 不支援 navigator.getUserMedia API) - -顯示使用的影像檔的 URL 可用鉻雜劇只捕獲。 火狐瀏覽器將捕捉到的圖像存儲在 IndexedDB 存儲 (請參閱檔外掛程式文檔),因為這顯示捕獲的映射的唯一方法是閱讀它並使用其 DataURL 的顯示。 - -### 示例 - - // 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}); - - -## CaptureImageOptions - -> 封裝圖像捕獲的配置選項。 - -### 屬性 - - * **limit**: 使用者可以在單個捕獲操作中捕獲的圖像的最大數目。值必須是大於或等於 1 (預設為 1)。 - -### 示例 - - // limit capture operation to 3 images - var options = { limit: 3 }; - - navigator.device.capture.captureImage(captureSuccess, captureError, options); - - -### iOS 的怪癖 - - * **limit**參數不受支援,並只有一個圖像採取每次調用的。 - -## capture.captureVideo - -> 啟動視頻錄製器應用程式並返回有關捕獲的視訊短片檔的資訊。 - - navigator.device.capture.captureVideo( - CaptureCB captureSuccess, CaptureErrorCB captureError, [CaptureVideoOptions options] - ); - - -### 說明 - -開始一個非同步作業以捕捉錄影製作者使用的設備視頻錄製應用程式。該操作允許使用者在單個會話中捕獲多個錄音。 - -捕獲操作結束時,在使用者退出視頻錄製中的應用,或者達到了錄音由 `CaptureVideoOptions.limit` 指定的最大數目。 如果未不指定任何 `limit` 參數值,它將預設為一 (1) 和捕獲操作將終止後使用者記錄單個視訊短片。 - -當捕獲操作完成後時,它的 `CaptureCB` 回檔執行描述每個已捕獲的視訊短片檔的 `MediaFile` 物件的陣列。 如果使用者終止之前捕獲視頻的剪輯操作,`CaptureErrorCB` 回檔執行同一個 `CaptureError` 物件,該物件具有一個 `CaptureError.CAPTURE_NO_MEDIA_FILES` 錯誤代碼。 - -### 支援的平臺 - - * 亞馬遜火 OS - * Android 系統 - * 黑莓 10 - * iOS - * Windows Phone 7 和 8 - * Windows 8 - * Windows - -### 示例 - - // 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}); - - -### 黑莓 10 怪癖 - - * 科爾多瓦的黑莓 10 嘗試啟動**視頻錄影機**提供的應用程式,由 RIM,以捕獲視頻的錄製。 這款應用程式會收到 `CaptureError.CAPTURE_NOT_SUPPORTED` 錯誤代碼,如果應用程式未安裝在設備上。 - -## CaptureVideoOptions - -> 封裝視頻捕獲的配置選項。 - -### 屬性 - - * **limit**: 該設備的使用者可以在單個捕獲操作中捕獲的視訊短片的最大數目。值必須是大於或等於 1 (預設為 1)。 - - * **duration**: 視訊短片,以秒為單位的最長期限。 - -### 示例 - - // limit capture operation to 3 video clips - var options = { limit: 3 }; - - navigator.device.capture.captureVideo(captureSuccess, captureError, options); - - -### 黑莓 10 怪癖 - - * 不支援的**duration**參數,所以錄製的長度不能以程式設計方式加以限制。 - -### iOS 的怪癖 - - * **limit**參數不受支援。只有一個視頻記錄每次調用的。 - -## CaptureCB - -> 在成功的媒體捕獲操作時調用。 - - function captureSuccess( MediaFile[] mediaFiles ) { ... }; - - -### 說明 - -此函數執行成功捕獲操作完成之後。 在媒體檔案已被抓獲,這點,或者使用者已退出媒體捕獲應用程式,或者已達到捕獲限制。 - -每個 `MediaFile` 物件描述捕捉的媒體檔案。 - -### 示例 - - // capture callback - 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 - } - }; - - -## CaptureError - -> 封裝失敗的媒體捕獲操作所引起的錯誤代碼。 - -### 屬性 - - * **code**: 下面列出的預定義的錯誤代碼之一。 - -### 常量 - - * `CaptureError.CAPTURE_INTERNAL_ERR`: 攝像機或麥克風無法捕獲的圖像或聲音。 - - * `CaptureError.CAPTURE_APPLICATION_BUSY`: 相機或音訊捕獲應用程式正在服另一個捕獲請求。 - - * `CaptureError.CAPTURE_INVALID_ARGUMENT`: API 的使用無效 (例如,價值 `limit` 小於 1)。 - - * `CaptureError.CAPTURE_NO_MEDIA_FILES`: 在使用者退出之前捕獲任何相機或音訊捕獲應用程式。 - - * `CaptureError.CAPTURE_NOT_SUPPORTED`: 請求的捕獲操作不受支援。 - -## CaptureErrorCB - -> 如果媒體捕獲操作期間發生錯誤,調用。 - - function captureError( CaptureError error ) { ... }; - - -### 說明 - -如果在試圖啟動時發生的錯誤的媒體捕獲操作,執行此函數。 失敗的場景包括捕獲應用程式正忙、 捕獲操作已經發生,或使用者取消該操作之前捕獲的所有媒體檔案時。 - -此函數執行同一個 `CaptureError` 物件,該物件包含一個相應的錯誤 `代碼`. - -### 示例 - - // capture error callback - var captureError = function(error) { - navigator.notification.alert('Error code: ' + error.code, null, 'Capture Error'); - }; - - -## ConfigurationData - -> 封裝一組設備支援的媒體捕獲參數。 - -### 說明 - -描述了設備所支援的媒體捕捉模式。配置資料包含的 MIME 類型和視頻或圖像捕獲捕獲尺寸。 - -MIME 類型應堅持 [RFC2046](http://www.ietf.org/rfc/rfc2046.txt)。示例: - - * `video/3gpp` - * `video/quicktime` - * `image/jpeg` - * `audio/amr` - * `audio/wav` - -### 屬性 - - * **type**: ASCII 編碼的小寫字串表示的媒體類型。() DOMString - - * **height**: 圖像或視頻以圖元為單位的高度。值為零的音效片段。(人數) - - * **width**: 圖像或視頻以圖元為單位的寬度。值為零的音效片段。(人數) - -### 示例 - - // retrieve supported image modes - var imageModes = navigator.device.capture.supportedImageModes; - - // Select mode that has the highest horizontal resolution - var width = 0; - var selectedmode; - for each (var mode in imageModes) { - if (mode.width > width) { - width = mode.width; - selectedmode = mode; - } - } - - -不支援任何平臺。所有配置資料陣列都是空的。 - -## MediaFile.getFormatData - -> 檢索格式媒體捕獲檔的資訊。 - - mediaFile.getFormatData( - MediaFileDataSuccessCB successCallback, - [MediaFileDataErrorCB errorCallback] - ); - - -### 說明 - -這個函數非同步嘗試檢索該媒體檔案的格式資訊。 如果成功,它將調用 `MediaFileDataSuccessCB` 回檔與 `MediaFileData` 物件。 如果該嘗試失敗,此函式呼叫的 `MediaFileDataErrorCB` 回檔。 - -### 支援的平臺 - - * 亞馬遜火 OS - * Android 系統 - * 黑莓 10 - * iOS - * Windows Phone 7 和 8 - * Windows 8 - * Windows - -### 亞馬遜火 OS 怪癖 - -訪問媒體檔案格式資訊的 API 的限制,所以並不是所有 `MediaFileData` 支援的屬性。 - -### 黑莓 10 怪癖 - -不為媒體檔案有關的資訊提供 API,所以所有的 `MediaFileData` 物件返回的預設值。 - -### Android 的怪癖 - -訪問媒體檔案格式資訊的 API 的限制,所以並不是所有 `MediaFileData` 支援的屬性。 - -### iOS 的怪癖 - -訪問媒體檔案格式資訊的 API 的限制,所以並不是所有 `MediaFileData` 支援的屬性。 - -## MediaFile - -> 封裝媒體捕獲檔的屬性。 - -### 屬性 - - * **name**: 檔的名稱,不包含路徑資訊。() DOMString - - * **fullPath**: 檔,包括名稱的完整路徑。() DOMString - - * **type**: 檔的 mime 類型 (DOMString) - - * **lastModifiedDate**: 日期和檔的上次修改時間。(日期) - - * **size**: 檔的大小,以位元組為單位。(人數) - -### 方法 - - * **MediaFile.getFormatData**: 檢索該媒體檔案的格式資訊。 - -## MediaFileData - -> 封裝有關的媒體檔案的格式資訊。 - -### 屬性 - - * **codecs**: 實際的音訊和視頻內容的格式。() DOMString - - * **bitrate**: 內容的平均位元速率。值為零的圖像。(人數) - - * **height**: 圖像或視頻以圖元為單位的高度。值為零的音訊剪輯。(人數) - - * **width**: 圖像或視頻以圖元為單位的寬度。值為零的音訊剪輯。(人數) - - * **duration**: 以秒為單位的視頻或音效片段的長度。值為零的圖像。(人數) - -### 黑莓 10 怪癖 - -沒有 API 提供了媒體檔案的格式資訊,所以下面的預設值由 `MediaFile.getFormatData` 功能返回的 `MediaFileData` 物件: - - * **codecs**: 不受支援,並且返回`null`. - - * **bitrate**: 不受支援,並且返回零。 - - * **height**: 不受支援,並且返回零。 - - * **width**: 不受支援,並且返回零。 - - * **duration**: 不受支援,並且返回零。 - -### 亞馬遜火 OS 怪癖 - -支援以下 `MediaFileData` 屬性: - - * **codecs**: 不受支援,並且返回`null`. - - * **bitrate**: 不受支援,並且返回零。 - - * **height**: 支援: 僅圖像和視頻檔。 - - * **width**: 支援: 僅圖像和視頻檔。 - - * **duration**: 支援: 僅音訊和視頻檔 - -### Android 的怪癖 - -支援以下 `MediaFileData` 屬性: - - * **codecs**: 不受支援,並且返回`null`. - - * **bitrate**: 不受支援,並且返回零。 - - * **height**: 支援: 僅圖像和視頻檔。 - - * **width**: 支援: 僅圖像和視頻檔。 - - * **duration**: 支援: 僅音訊和視頻檔。 - -### iOS 的怪癖 - -支援以下 `MediaFileData` 屬性: - - * **codecs**: 不受支援,並且返回`null`. - - * **bitrate**: 僅音訊 iOS4 設備上受支援。對於圖像和視頻,返回零。 - - * **height**: 支援: 僅圖像和視頻檔。 - - * **width**: 支援: 僅圖像和視頻檔。 - - * **duration**: 支援: 僅音訊和視頻檔。 \ No newline at end of file diff --git a/doc/zh/index.md b/doc/zh/index.md deleted file mode 100644 index 0823ef9c..00000000 --- a/doc/zh/index.md +++ /dev/null @@ -1,551 +0,0 @@ - - -# cordova-plugin-media-capture - -這個外掛程式提供了對設備的音訊、 圖像和視頻捕獲功能的訪問。 - -**警告**: 收集和使用的圖像、 視頻或音訊裝置的攝像頭或麥克風從提出了重要的隱私問題。 您的應用程式的隱私權原則應該討論應用程式如何使用這種感應器和記錄的資料是否與任何其他方共用。 此外,如果攝像機或麥克風的應用程式的使用在使用者介面中不是明顯的你應該之前應用程式訪問的相機或麥克風 (如果設備作業系統不會這樣做已經) 提供只是在時間的通知。 該通知應提供相同的資訊上文指出的並獲取該使用者的許可權 (例如,通過為**確定**並**不感謝**提出的選擇)。 請注意有些應用程式市場可能需要您的應用程式提供只是時間的通知,並從訪問攝像機或麥克風之前使用者獲得的許可權。 有關詳細資訊,請參閱隱私指南。 - -這個外掛程式定義全球 `navigator.device.capture` 物件。 - -雖然在全球範圍內,它不可用直到 `deviceready` 事件之後。 - - document.addEventListener("deviceready", onDeviceReady, false); - function onDeviceReady() { - console.log(navigator.device.capture); - } - - -## 安裝 - - cordova plugin add cordova-plugin-media-capture - - -## 支援的平臺 - -* 亞馬遜火 OS -* Android 系統 -* 黑莓 10 -* iOS -* Windows Phone 7 和 8 -* Windows 8 - -## 物件 - -* 捕獲 -* CaptureAudioOptions -* CaptureImageOptions -* CaptureVideoOptions -* CaptureCallback -* CaptureErrorCB -* ConfigurationData -* MediaFile -* MediaFileData - -## 方法 - -* capture.captureAudio -* capture.captureImage -* capture.captureVideo -* MediaFile.getFormatData - -## 屬性 - -* **supportedAudioModes**: 音訊錄音設備所支援的格式。(ConfigurationData[]) - -* **supportedImageModes**: 錄製圖像大小和格式的設備支援。(ConfigurationData[]) - -* **supportedVideoModes**: 錄製的視頻解析度和設備支援的格式。(ConfigurationData[]) - -## capture.captureAudio - -> 啟動音訊答錄機應用程式並返回有關捕獲音訊剪輯檔的資訊。 - - navigator.device.capture.captureAudio( - CaptureCB captureSuccess, CaptureErrorCB captureError, [CaptureAudioOptions options] - ); - - -### 說明 - -開始一個非同步作業以捕獲使用該設備的預設音訊錄製應用程式的音訊錄音。 該操作允許在單個會話中捕獲多個錄音設備使用者。 - -捕獲操作結束時,在使用者退出錄音應用程式,或者達到了錄音由 `CaptureAudioOptions.limit` 指定的最大數目。 如果未不指定任何 `limit` 參數值,它將預設為一 (1) 和捕獲操作將終止後使用者記錄單個音訊剪輯。 - -當捕獲操作完成後時,`CaptureCallback` 執行描述每個捕獲音訊剪輯檔的 `MediaFile` 物件的陣列。 如果使用者終止操作之前捕獲音訊的剪輯,`CaptureErrorCallback` 使用 `CaptureError` 物件時,執行具有 `CaptureError.CAPTURE_NO_MEDIA_FILES` 錯誤代碼。 - -### 支援的平臺 - -* 亞馬遜火 OS -* Android 系統 -* 黑莓 10 -* iOS -* Windows Phone 7 和 8 -* Windows 8 - -### 示例 - - // 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}); - - -### iOS 的怪癖 - -* iOS 沒有預設的音訊錄音應用程式,因此提供了一個簡單的使用者介面。 - -### Windows Phone 7 和 8 怪癖 - -* Windows Phone 7 沒有預設的音訊錄音應用程式,因此提供了一個簡單的使用者介面。 - -## CaptureAudioOptions - -> 封裝的音訊捕獲的配置選項。 - -### 屬性 - -* **limit**: 音訊剪輯設備使用者可以在單個捕獲操作中記錄的最大數目。值必須是大於或等於 1 (預設為 1)。 - -* **duration**: 音訊的音效片段,以秒為單位的最長期限。 - -### 示例 - - // limit capture operation to 3 media files, no longer than 10 seconds each - var options = { limit: 3, duration: 10 }; - - navigator.device.capture.captureAudio(captureSuccess, captureError, options); - - -### 亞馬遜火 OS 怪癖 - -* `duration`參數不受支援。記錄長度不能僅限於以程式設計方式。 - -### Android 的怪癖 - -* `duration`參數不受支援。記錄長度不能僅限於以程式設計方式。 - -### 黑莓 10 怪癖 - -* `duration`參數不受支援。記錄長度不能局限以程式設計方式。 -* `limit`參數不受支援,所以只有一個記錄可以創建的每個調用。 - -### iOS 的怪癖 - -* `limit`參數不受支援,所以只有一個記錄可以創建的每個調用。 - -## capture.captureImage - -> 啟動攝像頭應用程式並返回有關捕獲的影像檔的資訊。 - - navigator.device.capture.captureImage( - CaptureCB captureSuccess, CaptureErrorCB captureError, [CaptureImageOptions options] - ); - - -### 說明 - -開始一個非同步作業以捕獲圖像使用設備的攝像頭應用程式。該操作允許使用者在單個會話中捕獲多個圖像。 - -當使用者關閉攝像頭應用程式,或錄音由 `CaptureAudioOptions.limit` 指定的最大數目達到捕獲操作結束。 如果未指定任何 `limit` 值,其預設值為一 (1) 和捕獲操作終止後使用者捕捉到一個單一的形象。 - -當捕獲操作完成後時,它將調用 `CaptureCB` 回檔與描述每個捕獲的影像檔的 `MediaFile` 物件的陣列。 如果使用者終止之前捕獲的圖像操作,`CaptureErrorCB` 回檔執行同一個 `CaptureError` 物件,該物件具有一個 `CaptureError.CAPTURE_NO_MEDIA_FILES` 錯誤代碼。 - -### 支援的平臺 - -* 亞馬遜火 OS -* Android 系統 -* 黑莓 10 -* iOS -* Windows Phone 7 和 8 -* Windows 8 - -### Windows Phone 7 的怪癖 - -調用本機攝像頭應用程式,而通過 Zune 連接您的設備不能工作,和錯誤回檔執行。 - -### 示例 - - // 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}); - - -## CaptureImageOptions - -> 封裝圖像捕獲的配置選項。 - -### 屬性 - -* **limit**: 使用者可以在單個捕獲操作中捕獲的圖像的最大數目。值必須是大於或等於 1 (預設為 1)。 - -### 示例 - - // limit capture operation to 3 images - var options = { limit: 3 }; - - navigator.device.capture.captureImage(captureSuccess, captureError, options); - - -### iOS 的怪癖 - -* **limit**參數不受支援,並只有一個圖像採取每次調用的。 - -## capture.captureVideo - -> 啟動視頻錄製器應用程式並返回有關捕獲的視訊短片檔的資訊。 - - navigator.device.capture.captureVideo( - CaptureCB captureSuccess, CaptureErrorCB captureError, [CaptureVideoOptions options] - ); - - -### 說明 - -開始一個非同步作業以捕捉錄影製作者使用的設備視頻錄製應用程式。該操作允許使用者在單個會話中捕獲多個錄音。 - -捕獲操作結束時,在使用者退出視頻錄製中的應用,或者達到了錄音由 `CaptureVideoOptions.limit` 指定的最大數目。 如果未不指定任何 `limit` 參數值,它將預設為一 (1) 和捕獲操作將終止後使用者記錄單個視訊短片。 - -當捕獲操作完成後時,它的 `CaptureCB` 回檔執行描述每個已捕獲的視訊短片檔的 `MediaFile` 物件的陣列。 如果使用者終止之前捕獲視頻的剪輯操作,`CaptureErrorCB` 回檔執行同一個 `CaptureError` 物件,該物件具有一個 `CaptureError.CAPTURE_NO_MEDIA_FILES` 錯誤代碼。 - -### 支援的平臺 - -* 亞馬遜火 OS -* Android 系統 -* 黑莓 10 -* iOS -* Windows Phone 7 和 8 -* Windows 8 - -### 示例 - - // 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}); - - -### 黑莓 10 怪癖 - -* 科爾多瓦的黑莓 10 嘗試啟動**視頻錄影機**提供的應用程式,由 RIM,以捕獲視頻的錄製。 這款應用程式會收到 `CaptureError.CAPTURE_NOT_SUPPORTED` 錯誤代碼,如果應用程式未安裝在設備上。 - -## CaptureVideoOptions - -> 封裝視頻捕獲的配置選項。 - -### 屬性 - -* **limit**: 該設備的使用者可以在單個捕獲操作中捕獲的視訊短片的最大數目。值必須是大於或等於 1 (預設為 1)。 - -* **duration**: 視訊短片,以秒為單位的最長期限。 - -### 示例 - - // limit capture operation to 3 video clips - var options = { limit: 3 }; - - navigator.device.capture.captureVideo(captureSuccess, captureError, options); - - -### 黑莓 10 怪癖 - -* 不支援的**duration**參數,所以錄製的長度不能以程式設計方式加以限制。 - -### iOS 的怪癖 - -* **limit**參數不受支援。只有一個視頻記錄每次調用的。 - -## CaptureCB - -> 在成功的媒體捕獲操作時調用。 - - function captureSuccess( MediaFile[] mediaFiles ) { ... }; - - -### 說明 - -此函數執行成功捕獲操作完成之後。 在媒體檔案已被抓獲,這點,或者使用者已退出媒體捕獲應用程式,或者已達到捕獲限制。 - -每個 `MediaFile` 物件描述捕捉的媒體檔案。 - -### 示例 - - // capture callback - 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 - } - }; - - -## CaptureError - -> 封裝失敗的媒體捕獲操作所引起的錯誤代碼。 - -### 屬性 - -* **code**: 下面列出的預定義的錯誤代碼之一。 - -### 常量 - -* `CaptureError.CAPTURE_INTERNAL_ERR`: 攝像機或麥克風無法捕獲的圖像或聲音。 - -* `CaptureError.CAPTURE_APPLICATION_BUSY`: 相機或音訊捕獲應用程式正在服另一個捕獲請求。 - -* `CaptureError.CAPTURE_INVALID_ARGUMENT`: API 的使用無效 (例如,價值 `limit` 小於 1)。 - -* `CaptureError.CAPTURE_NO_MEDIA_FILES`: 在使用者退出之前捕獲任何相機或音訊捕獲應用程式。 - -* `CaptureError.CAPTURE_NOT_SUPPORTED`: 請求的捕獲操作不受支援。 - -## CaptureErrorCB - -> 如果媒體捕獲操作期間發生錯誤,調用。 - - function captureError( CaptureError error ) { ... }; - - -### 說明 - -如果在試圖啟動時發生的錯誤的媒體捕獲操作,執行此函數。 失敗的場景包括捕獲應用程式正忙、 捕獲操作已經發生,或使用者取消該操作之前捕獲的所有媒體檔案時。 - -此函數執行同一個 `CaptureError` 物件,該物件包含一個相應的錯誤 `代碼`. - -### 示例 - - // capture error callback - var captureError = function(error) { - navigator.notification.alert('Error code: ' + error.code, null, 'Capture Error'); - }; - - -## ConfigurationData - -> 封裝一組設備支援的媒體捕獲參數。 - -### 說明 - -描述了設備所支援的媒體捕捉模式。配置資料包含的 MIME 類型和視頻或圖像捕獲捕獲尺寸。 - -MIME 類型應堅持 [RFC2046][1]。示例: - - [1]: http://www.ietf.org/rfc/rfc2046.txt - -* `video/3gpp` -* `video/quicktime` -* `image/jpeg` -* `audio/amr` -* `audio/wav` - -### 屬性 - -* **type**: ASCII 編碼的小寫字串表示的媒體類型。() DOMString - -* **height**: 圖像或視頻以圖元為單位的高度。值為零的音效片段。(人數) - -* **width**: 圖像或視頻以圖元為單位的寬度。值為零的音效片段。(人數) - -### 示例 - - // retrieve supported image modes - var imageModes = navigator.device.capture.supportedImageModes; - - // Select mode that has the highest horizontal resolution - var width = 0; - var selectedmode; - for each (var mode in imageModes) { - if (mode.width > width) { - width = mode.width; - selectedmode = mode; - } - } - - -不支援任何平臺。所有配置資料陣列都是空的。 - -## MediaFile.getFormatData - -> 檢索格式媒體捕獲檔的資訊。 - - mediaFile.getFormatData( - MediaFileDataSuccessCB successCallback, - [MediaFileDataErrorCB errorCallback] - ); - - -### 說明 - -這個函數非同步嘗試檢索該媒體檔案的格式資訊。 如果成功,它將調用 `MediaFileDataSuccessCB` 回檔與 `MediaFileData` 物件。 如果該嘗試失敗,此函式呼叫的 `MediaFileDataErrorCB` 回檔。 - -### 支援的平臺 - -* 亞馬遜火 OS -* Android 系統 -* 黑莓 10 -* iOS -* Windows Phone 7 和 8 -* Windows 8 - -### 亞馬遜火 OS 怪癖 - -訪問媒體檔案格式資訊的 API 的限制,所以並不是所有 `MediaFileData` 支援的屬性。 - -### 黑莓 10 怪癖 - -不為媒體檔案有關的資訊提供 API,所以所有的 `MediaFileData` 物件返回的預設值。 - -### Android 的怪癖 - -訪問媒體檔案格式資訊的 API 的限制,所以並不是所有 `MediaFileData` 支援的屬性。 - -### iOS 的怪癖 - -訪問媒體檔案格式資訊的 API 的限制,所以並不是所有 `MediaFileData` 支援的屬性。 - -## MediaFile - -> 封裝媒體捕獲檔的屬性。 - -### 屬性 - -* **name**: 檔的名稱,不包含路徑資訊。() DOMString - -* **fullPath**: 檔,包括名稱的完整路徑。() DOMString - -* **type**: 檔的 mime 類型 (DOMString) - -* **lastModifiedDate**: 日期和檔的上次修改時間。(日期) - -* **size**: 檔的大小,以位元組為單位。(人數) - -### 方法 - -* **MediaFile.getFormatData**: 檢索該媒體檔案的格式資訊。 - -## MediaFileData - -> 封裝有關的媒體檔案的格式資訊。 - -### 屬性 - -* **codecs**: 實際的音訊和視頻內容的格式。() DOMString - -* **bitrate**: 內容的平均位元速率。值為零的圖像。(人數) - -* **height**: 圖像或視頻以圖元為單位的高度。值為零的音訊剪輯。(人數) - -* **width**: 圖像或視頻以圖元為單位的寬度。值為零的音訊剪輯。(人數) - -* **duration**: 以秒為單位的視頻或音效片段的長度。值為零的圖像。(人數) - -### 黑莓 10 怪癖 - -沒有 API 提供了媒體檔案的格式資訊,所以下面的預設值由 `MediaFile.getFormatData` 功能返回的 `MediaFileData` 物件: - -* **codecs**: 不受支援,並且返回`null`. - -* **bitrate**: 不受支援,並且返回零。 - -* **height**: 不受支援,並且返回零。 - -* **width**: 不受支援,並且返回零。 - -* **duration**: 不受支援,並且返回零。 - -### 亞馬遜火 OS 怪癖 - -支援以下 `MediaFileData` 屬性: - -* **codecs**: 不受支援,並且返回`null`. - -* **bitrate**: 不受支援,並且返回零。 - -* **height**: 支援: 僅圖像和視頻檔。 - -* **width**: 支援: 僅圖像和視頻檔。 - -* **duration**: 支援: 僅音訊和視頻檔 - -### Android 的怪癖 - -支援以下 `MediaFileData` 屬性: - -* **codecs**: 不受支援,並且返回`null`. - -* **bitrate**: 不受支援,並且返回零。 - -* **height**: 支援: 僅圖像和視頻檔。 - -* **width**: 支援: 僅圖像和視頻檔。 - -* **duration**: 支援: 僅音訊和視頻檔。 - -### iOS 的怪癖 - -支援以下 `MediaFileData` 屬性: - -* **codecs**: 不受支援,並且返回`null`. - -* **bitrate**: 僅音訊 iOS4 設備上受支援。對於圖像和視頻,返回零。 - -* **height**: 支援: 僅圖像和視頻檔。 - -* **width**: 支援: 僅圖像和視頻檔。 - -* **duration**: 支援: 僅音訊和視頻檔。 diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 00000000..c12b500e --- /dev/null +++ b/package-lock.json @@ -0,0 +1,1724 @@ +{ + "name": "cordova-plugin-media-capture", + "version": "3.0.4-dev", + "lockfileVersion": 1, + "requires": true, + "dependencies": { + "@babel/code-frame": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.10.4.tgz", + "integrity": "sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg==", + "dev": true, + "requires": { + "@babel/highlight": "^7.10.4" + } + }, + "@babel/helper-validator-identifier": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.4.tgz", + "integrity": "sha512-3U9y+43hz7ZM+rzG24Qe2mufW5KhvFg/NhnNph+i9mgCtdTCtMJuI1TMkrIUiK7Ix4PYlRF9I5dhqaLYA/ADXw==", + "dev": true + }, + "@babel/highlight": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.10.4.tgz", + "integrity": "sha512-i6rgnR/YgPEQzZZnbTHHuZdlE8qyoBNalD6F+q4vAFlcMEcqmkoG+mPqJYJCo63qPf74+Y1UZsl3l6f7/RIkmA==", + "dev": true, + "requires": { + "@babel/helper-validator-identifier": "^7.10.4", + "chalk": "^2.0.0", + "js-tokens": "^4.0.0" + } + }, + "@cordova/eslint-config": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@cordova/eslint-config/-/eslint-config-3.0.0.tgz", + "integrity": "sha512-YOZn/G5foKFzZc8R/oBM+BLG6vHufOmZiJtiZHNxifsrqzORwyjq1EiUSvQ6s0bm6Ydh3zwwyuGVbYyDBil67w==", + "dev": true, + "requires": { + "eslint": "^6.8.0", + "eslint-config-standard": "^14.1.1", + "eslint-plugin-import": "^2.20.1", + "eslint-plugin-node": "^11.0.0", + "eslint-plugin-promise": "^4.2.1", + "eslint-plugin-standard": "^4.0.1" + } + }, + "@types/color-name": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@types/color-name/-/color-name-1.1.1.tgz", + "integrity": "sha512-rr+OQyAjxze7GgWrSaJwydHStIhHq2lvY3BOC2Mj7KnzI7XK0Uw1TOOdI9lDoajEbSWLiYgoo4f1R51erQfhPQ==", + "dev": true + }, + "@types/json5": { + "version": "0.0.29", + "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", + "integrity": "sha1-7ihweulOEdK4J7y+UnC86n8+ce4=", + "dev": true + }, + "acorn": { + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.3.1.tgz", + "integrity": "sha512-tLc0wSnatxAQHVHUapaHdz72pi9KUyHjq5KyHjGg9Y8Ifdc79pTh2XvI6I1/chZbnM7QtNKzh66ooDogPZSleA==", + "dev": true + }, + "acorn-jsx": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.2.0.tgz", + "integrity": "sha512-HiUX/+K2YpkpJ+SzBffkM/AQ2YE03S0U1kjTLVpoJdhZMOWy8qvXVN9JdLqv2QsaQ6MPYQIuNmwD8zOiYUofLQ==", + "dev": true + }, + "ajv": { + "version": "6.12.3", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.3.tgz", + "integrity": "sha512-4K0cK3L1hsqk9xIb2z9vs/XU+PGJZ9PNpJRDS9YLzmNdX6jmVPfamLvTJr0aDAusnHyCHO6MjzlkAsgtqp9teA==", + "dev": true, + "requires": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + } + }, + "ansi-escapes": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.1.tgz", + "integrity": "sha512-JWF7ocqNrp8u9oqpgV+wH5ftbt+cfvv+PTjOvKLT3AdYly/LmORARfEVT1iyjwN+4MqE5UmVKoAdIBqeoCHgLA==", + "dev": true, + "requires": { + "type-fest": "^0.11.0" + }, + "dependencies": { + "type-fest": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.11.0.tgz", + "integrity": "sha512-OdjXJxnCN1AvyLSzeKIgXTXxV+99ZuXl3Hpo9XpJAv9MBcHrrJOQ5kV7ypXOuQie+AmWG25hLbiKdwYTifzcfQ==", + "dev": true + } + } + }, + "ansi-regex": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", + "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", + "dev": true + }, + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dev": true, + "requires": { + "sprintf-js": "~1.0.2" + } + }, + "array-includes": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.1.tgz", + "integrity": "sha512-c2VXaCHl7zPsvpkFsw4nxvFie4fh1ur9bpcgsVkIjqn0H/Xwdg+7fv3n2r/isyS8EBj5b06M9kHyZuIr4El6WQ==", + "dev": true, + "requires": { + "define-properties": "^1.1.3", + "es-abstract": "^1.17.0", + "is-string": "^1.0.5" + } + }, + "array.prototype.flat": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.2.3.tgz", + "integrity": "sha512-gBlRZV0VSmfPIeWfuuy56XZMvbVfbEUnOXUvt3F/eUUUSyzlgLxhEX4YAEpxNAogRGehPSnfXyPtYyKAhkzQhQ==", + "dev": true, + "requires": { + "define-properties": "^1.1.3", + "es-abstract": "^1.17.0-next.1" + } + }, + "astral-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-1.0.0.tgz", + "integrity": "sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg==", + "dev": true + }, + "balanced-match": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", + "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", + "dev": true + }, + "brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "chardet": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", + "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==", + "dev": true + }, + "cli-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", + "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", + "dev": true, + "requires": { + "restore-cursor": "^3.1.0" + } + }, + "cli-width": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-3.0.0.tgz", + "integrity": "sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==", + "dev": true + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", + "dev": true + }, + "concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", + "dev": true + }, + "contains-path": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/contains-path/-/contains-path-0.1.0.tgz", + "integrity": "sha1-/ozxhP9mcLa67wGp1IYaXL7EEgo=", + "dev": true + }, + "cross-spawn": { + "version": "6.0.5", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", + "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", + "dev": true, + "requires": { + "nice-try": "^1.0.4", + "path-key": "^2.0.1", + "semver": "^5.5.0", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + }, + "dependencies": { + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true + } + } + }, + "debug": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", + "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + }, + "deep-is": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz", + "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=", + "dev": true + }, + "define-properties": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", + "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", + "dev": true, + "requires": { + "object-keys": "^1.0.12" + } + }, + "doctrine": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", + "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", + "dev": true, + "requires": { + "esutils": "^2.0.2" + } + }, + "emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + }, + "error-ex": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "dev": true, + "requires": { + "is-arrayish": "^0.2.1" + } + }, + "es-abstract": { + "version": "1.17.6", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.6.tgz", + "integrity": "sha512-Fr89bON3WFyUi5EvAeI48QTWX0AyekGgLA8H+c+7fbfCkJwRWRMLd8CQedNEyJuoYYhmtEqY92pgte1FAhBlhw==", + "dev": true, + "requires": { + "es-to-primitive": "^1.2.1", + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.1", + "is-callable": "^1.2.0", + "is-regex": "^1.1.0", + "object-inspect": "^1.7.0", + "object-keys": "^1.1.1", + "object.assign": "^4.1.0", + "string.prototype.trimend": "^1.0.1", + "string.prototype.trimstart": "^1.0.1" + } + }, + "es-to-primitive": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", + "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", + "dev": true, + "requires": { + "is-callable": "^1.1.4", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.2" + } + }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "dev": true + }, + "eslint": { + "version": "6.8.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-6.8.0.tgz", + "integrity": "sha512-K+Iayyo2LtyYhDSYwz5D5QdWw0hCacNzyq1Y821Xna2xSJj7cijoLLYmLxTQgcgZ9mC61nryMy9S7GRbYpI5Ig==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.0.0", + "ajv": "^6.10.0", + "chalk": "^2.1.0", + "cross-spawn": "^6.0.5", + "debug": "^4.0.1", + "doctrine": "^3.0.0", + "eslint-scope": "^5.0.0", + "eslint-utils": "^1.4.3", + "eslint-visitor-keys": "^1.1.0", + "espree": "^6.1.2", + "esquery": "^1.0.1", + "esutils": "^2.0.2", + "file-entry-cache": "^5.0.1", + "functional-red-black-tree": "^1.0.1", + "glob-parent": "^5.0.0", + "globals": "^12.1.0", + "ignore": "^4.0.6", + "import-fresh": "^3.0.0", + "imurmurhash": "^0.1.4", + "inquirer": "^7.0.0", + "is-glob": "^4.0.0", + "js-yaml": "^3.13.1", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.3.0", + "lodash": "^4.17.14", + "minimatch": "^3.0.4", + "mkdirp": "^0.5.1", + "natural-compare": "^1.4.0", + "optionator": "^0.8.3", + "progress": "^2.0.0", + "regexpp": "^2.0.1", + "semver": "^6.1.2", + "strip-ansi": "^5.2.0", + "strip-json-comments": "^3.0.1", + "table": "^5.2.3", + "text-table": "^0.2.0", + "v8-compile-cache": "^2.0.3" + } + }, + "eslint-config-standard": { + "version": "14.1.1", + "resolved": "https://registry.npmjs.org/eslint-config-standard/-/eslint-config-standard-14.1.1.tgz", + "integrity": "sha512-Z9B+VR+JIXRxz21udPTL9HpFMyoMUEeX1G251EQ6e05WD9aPVtVBn09XUmZ259wCMlCDmYDSZG62Hhm+ZTJcUg==", + "dev": true + }, + "eslint-import-resolver-node": { + "version": "0.3.4", + "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.4.tgz", + "integrity": "sha512-ogtf+5AB/O+nM6DIeBUNr2fuT7ot9Qg/1harBfBtaP13ekEWFQEEMP94BCB7zaNW3gyY+8SHYF00rnqYwXKWOA==", + "dev": true, + "requires": { + "debug": "^2.6.9", + "resolve": "^1.13.1" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + } + } + }, + "eslint-module-utils": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.6.0.tgz", + "integrity": "sha512-6j9xxegbqe8/kZY8cYpcp0xhbK0EgJlg3g9mib3/miLaExuuwc3n5UEfSnU6hWMbT0FAYVvDbL9RrRgpUeQIvA==", + "dev": true, + "requires": { + "debug": "^2.6.9", + "pkg-dir": "^2.0.0" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + } + } + }, + "eslint-plugin-es": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-es/-/eslint-plugin-es-3.0.1.tgz", + "integrity": "sha512-GUmAsJaN4Fc7Gbtl8uOBlayo2DqhwWvEzykMHSCZHU3XdJ+NSzzZcVhXh3VxX5icqQ+oQdIEawXX8xkR3mIFmQ==", + "dev": true, + "requires": { + "eslint-utils": "^2.0.0", + "regexpp": "^3.0.0" + }, + "dependencies": { + "eslint-utils": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz", + "integrity": "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==", + "dev": true, + "requires": { + "eslint-visitor-keys": "^1.1.0" + } + }, + "regexpp": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.1.0.tgz", + "integrity": "sha512-ZOIzd8yVsQQA7j8GCSlPGXwg5PfmA1mrq0JP4nGhh54LaKN3xdai/vHUDu74pKwV8OxseMS65u2NImosQcSD0Q==", + "dev": true + } + } + }, + "eslint-plugin-import": { + "version": "2.22.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.22.0.tgz", + "integrity": "sha512-66Fpf1Ln6aIS5Gr/55ts19eUuoDhAbZgnr6UxK5hbDx6l/QgQgx61AePq+BV4PP2uXQFClgMVzep5zZ94qqsxg==", + "dev": true, + "requires": { + "array-includes": "^3.1.1", + "array.prototype.flat": "^1.2.3", + "contains-path": "^0.1.0", + "debug": "^2.6.9", + "doctrine": "1.5.0", + "eslint-import-resolver-node": "^0.3.3", + "eslint-module-utils": "^2.6.0", + "has": "^1.0.3", + "minimatch": "^3.0.4", + "object.values": "^1.1.1", + "read-pkg-up": "^2.0.0", + "resolve": "^1.17.0", + "tsconfig-paths": "^3.9.0" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "doctrine": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-1.5.0.tgz", + "integrity": "sha1-N53Ocw9hZvds76TmcHoVmwLFpvo=", + "dev": true, + "requires": { + "esutils": "^2.0.2", + "isarray": "^1.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + } + } + }, + "eslint-plugin-node": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-node/-/eslint-plugin-node-11.1.0.tgz", + "integrity": "sha512-oUwtPJ1W0SKD0Tr+wqu92c5xuCeQqB3hSCHasn/ZgjFdA9iDGNkNf2Zi9ztY7X+hNuMib23LNGRm6+uN+KLE3g==", + "dev": true, + "requires": { + "eslint-plugin-es": "^3.0.0", + "eslint-utils": "^2.0.0", + "ignore": "^5.1.1", + "minimatch": "^3.0.4", + "resolve": "^1.10.1", + "semver": "^6.1.0" + }, + "dependencies": { + "eslint-utils": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz", + "integrity": "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==", + "dev": true, + "requires": { + "eslint-visitor-keys": "^1.1.0" + } + }, + "ignore": { + "version": "5.1.8", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.8.tgz", + "integrity": "sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw==", + "dev": true + } + } + }, + "eslint-plugin-promise": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-promise/-/eslint-plugin-promise-4.2.1.tgz", + "integrity": "sha512-VoM09vT7bfA7D+upt+FjeBO5eHIJQBUWki1aPvB+vbNiHS3+oGIJGIeyBtKQTME6UPXXy3vV07OL1tHd3ANuDw==", + "dev": true + }, + "eslint-plugin-standard": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-standard/-/eslint-plugin-standard-4.0.1.tgz", + "integrity": "sha512-v/KBnfyaOMPmZc/dmc6ozOdWqekGp7bBGq4jLAecEfPGmfKiWS4sA8sC0LqiV9w5qmXAtXVn4M3p1jSyhY85SQ==", + "dev": true + }, + "eslint-scope": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.0.tgz", + "integrity": "sha512-iiGRvtxWqgtx5m8EyQUJihBloE4EnYeGE/bz1wSPwJE6tZuJUtHlhqDM4Xj2ukE8Dyy1+HCZ4hE0fzIVMzb58w==", + "dev": true, + "requires": { + "esrecurse": "^4.1.0", + "estraverse": "^4.1.1" + } + }, + "eslint-utils": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-1.4.3.tgz", + "integrity": "sha512-fbBN5W2xdY45KulGXmLHZ3c3FHfVYmKg0IrAKGOkT/464PQsx2UeIzfz1RmEci+KLm1bBaAzZAh8+/E+XAeZ8Q==", + "dev": true, + "requires": { + "eslint-visitor-keys": "^1.1.0" + } + }, + "eslint-visitor-keys": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", + "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", + "dev": true + }, + "espree": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-6.2.1.tgz", + "integrity": "sha512-ysCxRQY3WaXJz9tdbWOwuWr5Y/XrPTGX9Kiz3yoUXwW0VZ4w30HTkQLaGx/+ttFjF8i+ACbArnB4ce68a9m5hw==", + "dev": true, + "requires": { + "acorn": "^7.1.1", + "acorn-jsx": "^5.2.0", + "eslint-visitor-keys": "^1.1.0" + } + }, + "esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "dev": true + }, + "esquery": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.3.1.tgz", + "integrity": "sha512-olpvt9QG0vniUBZspVRN6lwB7hOZoTRtT+jzR+tS4ffYx2mzbw+z0XCOk44aaLYKApNX5nMm+E+P6o25ip/DHQ==", + "dev": true, + "requires": { + "estraverse": "^5.1.0" + }, + "dependencies": { + "estraverse": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.1.0.tgz", + "integrity": "sha512-FyohXK+R0vE+y1nHLoBM7ZTyqRpqAlhdZHCWIWEviFLiGB8b04H6bQs8G+XTthacvT8VuwvteiP7RJSxMs8UEw==", + "dev": true + } + } + }, + "esrecurse": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.2.1.tgz", + "integrity": "sha512-64RBB++fIOAXPw3P9cy89qfMlvZEXZkqqJkjqqXIvzP5ezRZjW+lPWjw35UX/3EhUPFYbg5ER4JYgDw4007/DQ==", + "dev": true, + "requires": { + "estraverse": "^4.1.0" + } + }, + "estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "dev": true + }, + "esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "dev": true + }, + "external-editor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz", + "integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==", + "dev": true, + "requires": { + "chardet": "^0.7.0", + "iconv-lite": "^0.4.24", + "tmp": "^0.0.33" + } + }, + "fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true + }, + "fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "dev": true + }, + "fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", + "dev": true + }, + "figures": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", + "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==", + "dev": true, + "requires": { + "escape-string-regexp": "^1.0.5" + } + }, + "file-entry-cache": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-5.0.1.tgz", + "integrity": "sha512-bCg29ictuBaKUwwArK4ouCaqDgLZcysCFLmM/Yn/FDoqndh/9vNuQfXRDvTuXKLxfD/JtZQGKFT8MGcJBK644g==", + "dev": true, + "requires": { + "flat-cache": "^2.0.1" + } + }, + "find-up": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", + "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", + "dev": true, + "requires": { + "locate-path": "^2.0.0" + } + }, + "flat-cache": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-2.0.1.tgz", + "integrity": "sha512-LoQe6yDuUMDzQAEH8sgmh4Md6oZnc/7PjtwjNFSzveXqSHt6ka9fPBuso7IGf9Rz4uqnSnWiFH2B/zj24a5ReA==", + "dev": true, + "requires": { + "flatted": "^2.0.0", + "rimraf": "2.6.3", + "write": "1.0.3" + } + }, + "flatted": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-2.0.2.tgz", + "integrity": "sha512-r5wGx7YeOwNWNlCA0wQ86zKyDLMQr+/RB8xy74M4hTphfmjlijTSSXGuH8rnvKZnfT9i+75zmd8jcKdMR4O6jA==", + "dev": true + }, + "fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", + "dev": true + }, + "function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", + "dev": true + }, + "functional-red-black-tree": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", + "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=", + "dev": true + }, + "glob": { + "version": "7.1.6", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", + "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", + "dev": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "glob-parent": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.1.tgz", + "integrity": "sha512-FnI+VGOpnlGHWZxthPGR+QhR78fuiK0sNLkHQv+bL9fQi57lNNdquIbna/WrfROrolq8GK5Ek6BiMwqL/voRYQ==", + "dev": true, + "requires": { + "is-glob": "^4.0.1" + } + }, + "globals": { + "version": "12.4.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-12.4.0.tgz", + "integrity": "sha512-BWICuzzDvDoH54NHKCseDanAhE3CeDorgDL5MT6LMXXj2WCnd9UC2szdk4AWLfjdgNBCXLUanXYcpBBKOSWGwg==", + "dev": true, + "requires": { + "type-fest": "^0.8.1" + } + }, + "graceful-fs": { + "version": "4.2.4", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.4.tgz", + "integrity": "sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw==", + "dev": true + }, + "has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "dev": true, + "requires": { + "function-bind": "^1.1.1" + } + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true + }, + "has-symbols": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.1.tgz", + "integrity": "sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg==", + "dev": true + }, + "hosted-git-info": { + "version": "2.8.8", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.8.tgz", + "integrity": "sha512-f/wzC2QaWBs7t9IYqB4T3sR1xviIViXJRJTWBlx2Gf3g0Xi5vI7Yy4koXQ1c9OYDGHN9sBy1DQ2AB8fqZBWhUg==", + "dev": true + }, + "iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "dev": true, + "requires": { + "safer-buffer": ">= 2.1.2 < 3" + } + }, + "ignore": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", + "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", + "dev": true + }, + "import-fresh": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.2.1.tgz", + "integrity": "sha512-6e1q1cnWP2RXD9/keSkxHScg508CdXqXWgWBaETNhyuBFz+kUZlKboh+ISK+bU++DmbHimVBrOz/zzPe0sZ3sQ==", + "dev": true, + "requires": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + } + }, + "imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", + "dev": true + }, + "inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "dev": true, + "requires": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true + }, + "inquirer": { + "version": "7.3.0", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-7.3.0.tgz", + "integrity": "sha512-K+LZp6L/6eE5swqIcVXrxl21aGDU4S50gKH0/d96OMQnSBCyGyZl/oZhbkVmdp5sBoINHd4xZvFSARh2dk6DWA==", + "dev": true, + "requires": { + "ansi-escapes": "^4.2.1", + "chalk": "^4.1.0", + "cli-cursor": "^3.1.0", + "cli-width": "^3.0.0", + "external-editor": "^3.0.3", + "figures": "^3.0.0", + "lodash": "^4.17.15", + "mute-stream": "0.0.8", + "run-async": "^2.4.0", + "rxjs": "^6.6.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0", + "through": "^2.3.6" + }, + "dependencies": { + "ansi-styles": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz", + "integrity": "sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA==", + "dev": true, + "requires": { + "@types/color-name": "^1.1.1", + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", + "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "strip-ansi": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", + "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", + "dev": true, + "requires": { + "ansi-regex": "^5.0.0" + } + }, + "supports-color": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.1.0.tgz", + "integrity": "sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", + "dev": true + }, + "is-callable": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.0.tgz", + "integrity": "sha512-pyVD9AaGLxtg6srb2Ng6ynWJqkHU9bEM087AKck0w8QwDarTfNcpIYoU8x8Hv2Icm8u6kFJM18Dag8lyqGkviw==", + "dev": true + }, + "is-date-object": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.2.tgz", + "integrity": "sha512-USlDT524woQ08aoZFzh3/Z6ch9Y/EWXEHQ/AaRN0SkKq4t2Jw2R2339tSXmwuVoY7LLlBCbOIlx2myP/L5zk0g==", + "dev": true + }, + "is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true + }, + "is-glob": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", + "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", + "dev": true, + "requires": { + "is-extglob": "^2.1.1" + } + }, + "is-regex": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.0.tgz", + "integrity": "sha512-iI97M8KTWID2la5uYXlkbSDQIg4F6o1sYboZKKTDpnDQMLtUL86zxhgDet3Q2SriaYsyGqZ6Mn2SjbRKeLHdqw==", + "dev": true, + "requires": { + "has-symbols": "^1.0.1" + } + }, + "is-string": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.5.tgz", + "integrity": "sha512-buY6VNRjhQMiF1qWDouloZlQbRhDPCebwxSjxMjxgemYT46YMd2NR0/H+fBhEfWX4A/w9TBJ+ol+okqJKFE6vQ==", + "dev": true + }, + "is-symbol": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.3.tgz", + "integrity": "sha512-OwijhaRSgqvhm/0ZdAcXNZt9lYdKFpcRDT5ULUuYXPoT794UNOdU+gpT6Rzo7b4V2HUl/op6GqY894AZwv9faQ==", + "dev": true, + "requires": { + "has-symbols": "^1.0.1" + } + }, + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + "dev": true + }, + "isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", + "dev": true + }, + "js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "dev": true + }, + "js-yaml": { + "version": "3.14.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.0.tgz", + "integrity": "sha512-/4IbIeHcD9VMHFqDR/gQ7EdZdLimOvW2DdcxFjdyyZ9NsbS+ccrXqVWDtab/lRl5AlUqmpBx8EhPaWR+OtY17A==", + "dev": true, + "requires": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + } + }, + "json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true + }, + "json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=", + "dev": true + }, + "json5": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", + "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", + "dev": true, + "requires": { + "minimist": "^1.2.0" + } + }, + "levn": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", + "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=", + "dev": true, + "requires": { + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2" + } + }, + "load-json-file": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-2.0.0.tgz", + "integrity": "sha1-eUfkIUmvgNaWy/eXvKq8/h/inKg=", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "parse-json": "^2.2.0", + "pify": "^2.0.0", + "strip-bom": "^3.0.0" + } + }, + "locate-path": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", + "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", + "dev": true, + "requires": { + "p-locate": "^2.0.0", + "path-exists": "^3.0.0" + } + }, + "lodash": { + "version": "4.17.15", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz", + "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==", + "dev": true + }, + "mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "dev": true + }, + "minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "dev": true, + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "minimist": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", + "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", + "dev": true + }, + "mkdirp": { + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", + "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", + "dev": true, + "requires": { + "minimist": "^1.2.5" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "mute-stream": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz", + "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==", + "dev": true + }, + "natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", + "dev": true + }, + "nice-try": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", + "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==", + "dev": true + }, + "normalize-package-data": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", + "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", + "dev": true, + "requires": { + "hosted-git-info": "^2.1.4", + "resolve": "^1.10.0", + "semver": "2 || 3 || 4 || 5", + "validate-npm-package-license": "^3.0.1" + }, + "dependencies": { + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true + } + } + }, + "object-inspect": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.8.0.tgz", + "integrity": "sha512-jLdtEOB112fORuypAyl/50VRVIBIdVQOSUUGQHzJ4xBSbit81zRarz7GThkEFZy1RceYrWYcPcBFPQwHyAc1gA==", + "dev": true + }, + "object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "dev": true + }, + "object.assign": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.0.tgz", + "integrity": "sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w==", + "dev": true, + "requires": { + "define-properties": "^1.1.2", + "function-bind": "^1.1.1", + "has-symbols": "^1.0.0", + "object-keys": "^1.0.11" + } + }, + "object.values": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.1.tgz", + "integrity": "sha512-WTa54g2K8iu0kmS/us18jEmdv1a4Wi//BZ/DTVYEcH0XhLM5NYdpDHja3gt57VrZLcNAO2WGA+KpWsDBaHt6eA==", + "dev": true, + "requires": { + "define-properties": "^1.1.3", + "es-abstract": "^1.17.0-next.1", + "function-bind": "^1.1.1", + "has": "^1.0.3" + } + }, + "once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "dev": true, + "requires": { + "wrappy": "1" + } + }, + "onetime": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.0.tgz", + "integrity": "sha512-5NcSkPHhwTVFIQN+TUqXoS5+dlElHXdpAWu9I0HP20YOtIi+aZ0Ct82jdlILDxjLEAWwvm+qj1m6aEtsDVmm6Q==", + "dev": true, + "requires": { + "mimic-fn": "^2.1.0" + } + }, + "optionator": { + "version": "0.8.3", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", + "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==", + "dev": true, + "requires": { + "deep-is": "~0.1.3", + "fast-levenshtein": "~2.0.6", + "levn": "~0.3.0", + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2", + "word-wrap": "~1.2.3" + } + }, + "os-tmpdir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", + "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=", + "dev": true + }, + "p-limit": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", + "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", + "dev": true, + "requires": { + "p-try": "^1.0.0" + } + }, + "p-locate": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", + "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", + "dev": true, + "requires": { + "p-limit": "^1.1.0" + } + }, + "p-try": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", + "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=", + "dev": true + }, + "parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "dev": true, + "requires": { + "callsites": "^3.0.0" + } + }, + "parse-json": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", + "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=", + "dev": true, + "requires": { + "error-ex": "^1.2.0" + } + }, + "path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", + "dev": true + }, + "path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", + "dev": true + }, + "path-key": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", + "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=", + "dev": true + }, + "path-parse": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz", + "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==", + "dev": true + }, + "path-type": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-2.0.0.tgz", + "integrity": "sha1-8BLMuEFbcJb8LaoQVMPXI4lZTHM=", + "dev": true, + "requires": { + "pify": "^2.0.0" + } + }, + "pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", + "dev": true + }, + "pkg-dir": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-2.0.0.tgz", + "integrity": "sha1-9tXREJ4Z1j7fQo4L1X4Sd3YVM0s=", + "dev": true, + "requires": { + "find-up": "^2.1.0" + } + }, + "prelude-ls": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", + "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=", + "dev": true + }, + "progress": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", + "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", + "dev": true + }, + "punycode": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", + "dev": true + }, + "read-pkg": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-2.0.0.tgz", + "integrity": "sha1-jvHAYjxqbbDcZxPEv6xGMysjaPg=", + "dev": true, + "requires": { + "load-json-file": "^2.0.0", + "normalize-package-data": "^2.3.2", + "path-type": "^2.0.0" + } + }, + "read-pkg-up": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-2.0.0.tgz", + "integrity": "sha1-a3KoBImE4MQeeVEP1en6mbO1Sb4=", + "dev": true, + "requires": { + "find-up": "^2.0.0", + "read-pkg": "^2.0.0" + } + }, + "regexpp": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-2.0.1.tgz", + "integrity": "sha512-lv0M6+TkDVniA3aD1Eg0DVpfU/booSu7Eev3TDO/mZKHBfVjgCGTV4t4buppESEYDtkArYFOxTJWv6S5C+iaNw==", + "dev": true + }, + "resolve": { + "version": "1.17.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.17.0.tgz", + "integrity": "sha512-ic+7JYiV8Vi2yzQGFWOkiZD5Z9z7O2Zhm9XMaTxdJExKasieFCr+yXZ/WmXsckHiKl12ar0y6XiXDx3m4RHn1w==", + "dev": true, + "requires": { + "path-parse": "^1.0.6" + } + }, + "resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "dev": true + }, + "restore-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", + "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", + "dev": true, + "requires": { + "onetime": "^5.1.0", + "signal-exit": "^3.0.2" + } + }, + "rimraf": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz", + "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==", + "dev": true, + "requires": { + "glob": "^7.1.3" + } + }, + "run-async": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz", + "integrity": "sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==", + "dev": true + }, + "rxjs": { + "version": "6.6.0", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.0.tgz", + "integrity": "sha512-3HMA8z/Oz61DUHe+SdOiQyzIf4tOx5oQHmMir7IZEu6TMqCLHT4LRcmNaUS0NwOz8VLvmmBduMsoaUvMaIiqzg==", + "dev": true, + "requires": { + "tslib": "^1.9.0" + } + }, + "safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "dev": true + }, + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + }, + "shebang-command": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", + "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", + "dev": true, + "requires": { + "shebang-regex": "^1.0.0" + } + }, + "shebang-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", + "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=", + "dev": true + }, + "signal-exit": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.3.tgz", + "integrity": "sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==", + "dev": true + }, + "slice-ansi": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-2.1.0.tgz", + "integrity": "sha512-Qu+VC3EwYLldKa1fCxuuvULvSJOKEgk9pi8dZeCVK7TqBfUNTH4sFkk4joj8afVSfAYgJoSOetjx9QWOJ5mYoQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.0", + "astral-regex": "^1.0.0", + "is-fullwidth-code-point": "^2.0.0" + }, + "dependencies": { + "is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "dev": true + } + } + }, + "spdx-correct": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.1.tgz", + "integrity": "sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==", + "dev": true, + "requires": { + "spdx-expression-parse": "^3.0.0", + "spdx-license-ids": "^3.0.0" + } + }, + "spdx-exceptions": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz", + "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==", + "dev": true + }, + "spdx-expression-parse": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", + "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", + "dev": true, + "requires": { + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" + } + }, + "spdx-license-ids": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.5.tgz", + "integrity": "sha512-J+FWzZoynJEXGphVIS+XEh3kFSjZX/1i9gFBaWQcB+/tmpe2qUsSBABpcxqxnAxFdiUFEgAX1bjYGQvIZmoz9Q==", + "dev": true + }, + "sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", + "dev": true + }, + "string-width": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz", + "integrity": "sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==", + "dev": true, + "requires": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.0" + }, + "dependencies": { + "strip-ansi": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", + "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", + "dev": true, + "requires": { + "ansi-regex": "^5.0.0" + } + } + } + }, + "string.prototype.trimend": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.1.tgz", + "integrity": "sha512-LRPxFUaTtpqYsTeNKaFOw3R4bxIzWOnbQ837QfBylo8jIxtcbK/A/sMV7Q+OAV/vWo+7s25pOE10KYSjaSO06g==", + "dev": true, + "requires": { + "define-properties": "^1.1.3", + "es-abstract": "^1.17.5" + } + }, + "string.prototype.trimstart": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.1.tgz", + "integrity": "sha512-XxZn+QpvrBI1FOcg6dIpxUPgWCPuNXvMD72aaRaUQv1eD4e/Qy8i/hFTe0BUmD60p/QA6bh1avmuPTfNjqVWRw==", + "dev": true, + "requires": { + "define-properties": "^1.1.3", + "es-abstract": "^1.17.5" + } + }, + "strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "dev": true, + "requires": { + "ansi-regex": "^4.1.0" + }, + "dependencies": { + "ansi-regex": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", + "dev": true + } + } + }, + "strip-bom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", + "dev": true + }, + "strip-json-comments": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.0.tgz", + "integrity": "sha512-e6/d0eBu7gHtdCqFt0xJr642LdToM5/cN4Qb9DbHjVx1CP5RyeM+zH7pbecEmDv/lBqb0QH+6Uqq75rxFPkM0w==", + "dev": true + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + }, + "table": { + "version": "5.4.6", + "resolved": "https://registry.npmjs.org/table/-/table-5.4.6.tgz", + "integrity": "sha512-wmEc8m4fjnob4gt5riFRtTu/6+4rSe12TpAELNSqHMfF3IqnA+CH37USM6/YR3qRZv7e56kAEAtd6nKZaxe0Ug==", + "dev": true, + "requires": { + "ajv": "^6.10.2", + "lodash": "^4.17.14", + "slice-ansi": "^2.1.0", + "string-width": "^3.0.0" + }, + "dependencies": { + "emoji-regex": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", + "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "dev": true + }, + "string-width": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", + "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", + "dev": true, + "requires": { + "emoji-regex": "^7.0.1", + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^5.1.0" + } + } + } + }, + "text-table": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=", + "dev": true + }, + "through": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", + "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=", + "dev": true + }, + "tmp": { + "version": "0.0.33", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", + "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", + "dev": true, + "requires": { + "os-tmpdir": "~1.0.2" + } + }, + "tsconfig-paths": { + "version": "3.9.0", + "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.9.0.tgz", + "integrity": "sha512-dRcuzokWhajtZWkQsDVKbWyY+jgcLC5sqJhg2PSgf4ZkH2aHPvaOY8YWGhmjb68b5qqTfasSsDO9k7RUiEmZAw==", + "dev": true, + "requires": { + "@types/json5": "^0.0.29", + "json5": "^1.0.1", + "minimist": "^1.2.0", + "strip-bom": "^3.0.0" + } + }, + "tslib": { + "version": "1.13.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.13.0.tgz", + "integrity": "sha512-i/6DQjL8Xf3be4K/E6Wgpekn5Qasl1usyw++dAA35Ue5orEn65VIxOA+YvNNl9HV3qv70T7CNwjODHZrLwvd1Q==", + "dev": true + }, + "type-check": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", + "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=", + "dev": true, + "requires": { + "prelude-ls": "~1.1.2" + } + }, + "type-fest": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", + "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", + "dev": true + }, + "uri-js": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.2.2.tgz", + "integrity": "sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ==", + "dev": true, + "requires": { + "punycode": "^2.1.0" + } + }, + "v8-compile-cache": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.1.1.tgz", + "integrity": "sha512-8OQ9CL+VWyt3JStj7HX7/ciTL2V3Rl1Wf5OL+SNTm0yK1KvtReVulksyeRnCANHHuUxHlQig+JJDlUhBt1NQDQ==", + "dev": true + }, + "validate-npm-package-license": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", + "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", + "dev": true, + "requires": { + "spdx-correct": "^3.0.0", + "spdx-expression-parse": "^3.0.0" + } + }, + "which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "dev": true, + "requires": { + "isexe": "^2.0.0" + } + }, + "word-wrap": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", + "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", + "dev": true + }, + "wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", + "dev": true + }, + "write": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/write/-/write-1.0.3.tgz", + "integrity": "sha512-/lg70HAjtkUgWPVZhZcm+T4hkL8Zbtp1nFNOn3lRrxnlv50SRBv7cR7RqR+GMsd3hUXy9hWBo4CHTbFTcOYwig==", + "dev": true, + "requires": { + "mkdirp": "^0.5.1" + } + } + } +} diff --git a/package.json b/package.json index cc347853..5a6dd8c2 100644 --- a/package.json +++ b/package.json @@ -1,53 +1,48 @@ { - "name": "cordova-plugin-media-capture-mp4video", - "version": "1.0.5", - "description": "Alpha Software's Media Capture MP4 Video Plugin", + "name": "cordova-plugin-media-capture", + "version": "3.0.4-dev", + "description": "Cordova Media Capture Plugin", + "types": "./types/index.d.ts", "cordova": { - "id": "cordova-plugin-media-capture-mp4video", + "id": "cordova-plugin-media-capture", "platforms": [ "android", - "amazon-fireos", - "ubuntu", "ios", - "blackberry10", - "wp7", - "wp8", - "windows8", - "windows" + "windows", + "browser" ] }, - "repository": { - "type": "git", - "url": "https://github.com/remoorejr/cordova-plugin-media-capture-mp4video" - }, + "repository": "github:apache/cordova-plugin-media-capture", + "bugs": "https://github.com/apache/cordova-plugin-media-capture/issues", "keywords": [ "cordova", "media", - "mp4 video", - "mp4 video capture", - "mpeg", - "mpeg video capture", - "remoorejr", - "alpha software", "capture", "ecosystem:cordova", "cordova-android", - "cordova-amazon-fireos", - "cordova-ubuntu", "cordova-ios", - "cordova-blackberry10", - "cordova-wp7", - "cordova-wp8", - "cordova-windows8", "cordova-windows" ], "scripts": { - "test": "npm run jshint", - "jshint": "jshint www && jshint src && jshint tests" + "test": "npm run lint", + "lint": "eslint ." }, - "author": "Apache Software Foundation / remoorejr", + "author": "Apache Software Foundation", "license": "Apache-2.0", + "engines": { + "cordovaDependencies": { + ">=1.4.4": { + "cordova-ios": ">=4.0.0" + }, + "2.0.0": { + "cordova-android": ">=6.3.0" + }, + "4.0.0": { + "cordova": ">100" + } + } + }, "devDependencies": { - "jshint": "^2.6.0" + "@cordova/eslint-config": "^3.0.0" } } diff --git a/plugin.xml b/plugin.xml index 95abd3e5..0049eee7 100644 --- a/plugin.xml +++ b/plugin.xml @@ -19,20 +19,22 @@ --> +xmlns:android="http://schemas.android.com/apk/res/android" + id="cordova-plugin-media-capture" + version="3.0.4-dev"> + Capture - cordova-plugin-media-capture-mp4video - - Cordova Media Capture Plugin modified to generate a mp4 video file for iOS and Android + Cordova Media Capture Plugin Apache 2.0 cordova,media,capture - https://github/remoorejr/cordova-plugin-media-capture-mp4video.git + https://github.com/apache/cordova-plugin-media-capture + https://github.com/apache/cordova-plugin-media-capture/issues + + + + - - + @@ -76,7 +78,6 @@ - @@ -90,48 +91,6 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -146,93 +105,6 @@ - - This app requires access to the camera to take photos. - - - - This app requires access to the microphone to record audio. - - - - This app requires access to the photo library to display images. - - - - - - - - - - - access_shared - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -248,7 +120,7 @@ - + diff --git a/src/android/Capture.java b/src/android/Capture.java index 96da61c3..317d0ebc 100644 --- a/src/android/Capture.java +++ b/src/android/Capture.java @@ -15,27 +15,6 @@ Licensed to the Apache Software Foundation (ASF) under one KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. - - Note: This is a modified version of the stock cordova media-capture plugin for Android - Revisions by @remoorejr - - Last revised: 08-03-2016 - - REM Notes: - - The goal was to have the MediaStore intent always generate and return a mpeg encoded video file in a mp4 wrapper so that the video - can be played back on Android, iOS, OSX and Windows devices and computers. - - Through significant testing, the only resolution was to simply rename the 3gp file to an mp4 file. - Most Android devices will generate an MPEG encoded file in a mp4 wrapper by default. - In that case, nothing is changed. - However, a few Android devices (like the Nexus 9) always generate a MPEG encoded file in a 3gp wrapper. This plugin simply reanmes - the .3gp file to a .mp4 file and sets the mime type accordingly. There is very little difference between the 3gp file and the mp4 file and - all players and browsers tested are able to play these mp4 files. That includes iOS devices, OSX, Windows, etc. - - To have full control, over the Android video recording process, this plugin would have to be completely re-written and it would not - use the MediaStore intent. - */ package org.apache.cordova.mediacapture; @@ -46,8 +25,11 @@ However, a few Android devices (like the Nexus 9) always generate a MPEG encoded import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Field; import java.lang.reflect.Method; +import java.util.Arrays; +import android.content.ActivityNotFoundException; import android.os.Build; +import android.os.Bundle; import org.apache.cordova.file.FileUtils; import org.apache.cordova.file.LocalFilesystemURL; @@ -64,6 +46,7 @@ However, a few Android devices (like the Nexus 9) always generate a MPEG encoded import android.Manifest; import android.app.Activity; +import android.content.ContentResolver; import android.content.ContentValues; import android.content.Intent; import android.content.pm.PackageManager; @@ -74,33 +57,33 @@ However, a few Android devices (like the Nexus 9) always generate a MPEG encoded import android.net.Uri; import android.os.Environment; import android.provider.MediaStore; -import android.util.Log; public class Capture extends CordovaPlugin { private static final String VIDEO_3GPP = "video/3gpp"; private static final String VIDEO_MP4 = "video/mp4"; - private static final String AUDIO_3GPP = "audio/3gpp"; + private static final String[] AUDIO_TYPES = new String[] {"audio/3gpp", "audio/aac", "audio/amr", "audio/wav"}; private static final String IMAGE_JPEG = "image/jpeg"; private static final int CAPTURE_AUDIO = 0; // Constant for capture audio private static final int CAPTURE_IMAGE = 1; // Constant for capture image private static final int CAPTURE_VIDEO = 2; // Constant for capture video - private static final String LOG_TAG = "CaptureMP4Video"; + private static final String LOG_TAG = "Capture"; private static final int CAPTURE_INTERNAL_ERR = 0; // private static final int CAPTURE_APPLICATION_BUSY = 1; // private static final int CAPTURE_INVALID_ARGUMENT = 2; private static final int CAPTURE_NO_MEDIA_FILES = 3; private static final int CAPTURE_PERMISSION_DENIED = 4; - + private static final int CAPTURE_NOT_SUPPORTED = 20; private boolean cameraPermissionInManifest; // Whether or not the CAMERA permission is declared in AndroidManifest.xml private final PendingRequests pendingRequests = new PendingRequests(); private int numPics; // Number of pictures before capture activity + private Uri imageUri; // public void setContext(Context mCtx) // { @@ -185,12 +168,12 @@ private JSONObject getFormatData(String filePath, String mimeType) throws JSONEx if (mimeType == null || mimeType.equals("") || "null".equals(mimeType)) { mimeType = FileHelper.getMimeType(fileUrl, cordova); } - Log.d(LOG_TAG, "Mime type = " + mimeType); + LOG.d(LOG_TAG, "Mime type = " + mimeType); if (mimeType.equals(IMAGE_JPEG) || filePath.endsWith(".jpg")) { obj = getImageData(fileUrl, obj); } - else if (mimeType.endsWith(AUDIO_3GPP)) { + else if (Arrays.asList(AUDIO_TYPES).contains(mimeType)) { obj = getAudioVideoData(filePath, obj, false); } else if (mimeType.equals(VIDEO_3GPP) || mimeType.equals(VIDEO_MP4)) { @@ -202,7 +185,7 @@ else if (mimeType.equals(VIDEO_3GPP) || mimeType.equals(VIDEO_MP4)) { /** * Get the Image specific attributes * - * @param fileUrl url to the file + * @param fileUrl url pointing to the file * @param obj represents the Media File Data * @return a JSONObject that represents the Media File Data * @throws JSONException @@ -236,7 +219,7 @@ private JSONObject getAudioVideoData(String filePath, JSONObject obj, boolean vi obj.put("width", player.getVideoWidth()); } } catch (IOException e) { - Log.d(LOG_TAG, "Error: loading video file"); + LOG.d(LOG_TAG, "Error: loading video file"); } return obj; } @@ -245,9 +228,17 @@ private JSONObject getAudioVideoData(String filePath, JSONObject obj, boolean vi * Sets up an intent to capture audio. Result handled by onActivityResult() */ private void captureAudio(Request req) { - Intent intent = new Intent(android.provider.MediaStore.Audio.Media.RECORD_SOUND_ACTION); - - this.cordova.startActivityForResult((CordovaPlugin) this, intent, req.requestCode); + if (!PermissionHelper.hasPermission(this, Manifest.permission.READ_EXTERNAL_STORAGE)) { + PermissionHelper.requestPermission(this, req.requestCode, Manifest.permission.READ_EXTERNAL_STORAGE); + } else { + try { + Intent intent = new Intent(android.provider.MediaStore.Audio.Media.RECORD_SOUND_ACTION); + + this.cordova.startActivityForResult((CordovaPlugin) this, intent, req.requestCode); + } catch (ActivityNotFoundException ex) { + pendingRequests.resolveWithFailure(req, createErrorObject(CAPTURE_NOT_SUPPORTED, "No Activity found to handle Audio Capture.")); + } + } } private String getTempDirectoryPath() { @@ -266,16 +257,16 @@ private String getTempDirectoryPath() { */ private void captureImage(Request req) { boolean needExternalStoragePermission = - !PermissionHelper.hasPermission(this, Manifest.permission.READ_EXTERNAL_STORAGE); + !PermissionHelper.hasPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE); boolean needCameraPermission = cameraPermissionInManifest && !PermissionHelper.hasPermission(this, Manifest.permission.CAMERA); if (needExternalStoragePermission || needCameraPermission) { if (needExternalStoragePermission && needCameraPermission) { - PermissionHelper.requestPermissions(this, req.requestCode, new String[]{Manifest.permission.READ_EXTERNAL_STORAGE, Manifest.permission.CAMERA}); + PermissionHelper.requestPermissions(this, req.requestCode, new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE, Manifest.permission.CAMERA}); } else if (needExternalStoragePermission) { - PermissionHelper.requestPermission(this, req.requestCode, Manifest.permission.READ_EXTERNAL_STORAGE); + PermissionHelper.requestPermission(this, req.requestCode, Manifest.permission.WRITE_EXTERNAL_STORAGE); } else { PermissionHelper.requestPermission(this, req.requestCode, Manifest.permission.CAMERA); } @@ -285,16 +276,13 @@ private void captureImage(Request req) { Intent intent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE); - // Specify file so that large image is captured and returned - File photo = new File(getTempDirectoryPath(), "Capture.jpg"); - try { - // the ACTION_IMAGE_CAPTURE is run under different credentials and has to be granted write permissions - createWritableFile(photo); - } catch (IOException ex) { - pendingRequests.resolveWithFailure(req, createErrorObject(CAPTURE_INTERNAL_ERR, ex.toString())); - return; - } - intent.putExtra(android.provider.MediaStore.EXTRA_OUTPUT, Uri.fromFile(photo)); + ContentResolver contentResolver = this.cordova.getActivity().getContentResolver(); + ContentValues cv = new ContentValues(); + cv.put(MediaStore.Images.Media.MIME_TYPE, IMAGE_JPEG); + imageUri = contentResolver.insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, cv); + LOG.d(LOG_TAG, "Taking a picture and saving to: " + imageUri.toString()); + + intent.putExtra(android.provider.MediaStore.EXTRA_OUTPUT, imageUri); this.cordova.startActivityForResult((CordovaPlugin) this, intent, req.requestCode); } @@ -318,7 +306,6 @@ private void captureVideo(Request req) { intent.putExtra("android.intent.extra.durationLimit", req.duration); intent.putExtra("android.intent.extra.videoQuality", req.quality); } - this.cordova.startActivityForResult((CordovaPlugin) this, intent, req.requestCode); } } @@ -397,80 +384,35 @@ public void onAudioActivityResult(Request req, Intent intent) { } public void onImageActivityResult(Request req) { - // For some reason if I try to do: - // Uri data = intent.getData(); - // It crashes in the emulator and on my phone with a null pointer exception - // To work around it I had to grab the code from CameraLauncher.java - try { - // Create entry in media store for image - // (Don't use insertImage() because it uses default compression setting of 50 - no way to change it) - ContentValues values = new ContentValues(); - values.put(android.provider.MediaStore.Images.Media.MIME_TYPE, IMAGE_JPEG); - Uri uri = null; - try { - uri = this.cordova.getActivity().getContentResolver().insert(android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI, values); - } catch (UnsupportedOperationException e) { - LOG.d(LOG_TAG, "Can't write to external media storage."); - try { - uri = this.cordova.getActivity().getContentResolver().insert(android.provider.MediaStore.Images.Media.INTERNAL_CONTENT_URI, values); - } catch (UnsupportedOperationException ex) { - LOG.d(LOG_TAG, "Can't write to internal media storage."); - pendingRequests.resolveWithFailure(req, createErrorObject(CAPTURE_INTERNAL_ERR, "Error capturing image - no media storage found.")); - return; - } - } - FileInputStream fis = new FileInputStream(getTempDirectoryPath() + "/Capture.jpg"); - OutputStream os = this.cordova.getActivity().getContentResolver().openOutputStream(uri); - byte[] buffer = new byte[4096]; - int len; - while ((len = fis.read(buffer)) != -1) { - os.write(buffer, 0, len); - } - os.flush(); - os.close(); - fis.close(); + // Add image to results + req.results.put(createMediaFile(imageUri)); - // Add image to results - req.results.put(createMediaFile(uri)); + checkForDuplicateImage(); - checkForDuplicateImage(); - - if (req.results.length() >= req.limit) { - // Send Uri back to JavaScript for viewing image - pendingRequests.resolveWithSuccess(req); - } else { - // still need to capture more images - captureImage(req); - } - } catch (IOException e) { - e.printStackTrace(); - pendingRequests.resolveWithFailure(req, createErrorObject(CAPTURE_INTERNAL_ERR, "Error capturing image.")); + if (req.results.length() >= req.limit) { + // Send Uri back to JavaScript for viewing image + pendingRequests.resolveWithSuccess(req); + } else { + // still need to capture more images + captureImage(req); } } - public void onVideoActivityResult(Request req, Intent intent) { Uri data = null; if (intent != null){ // Get the uri of the video clip data = intent.getData(); - - Log.i(LOG_TAG, "Video captured: " + data); } - - // This is in the stock plugin, why? - /* - if ( data == null) { - File movie = new File(getTempDirectoryPath(), "capturedVideo.mp4"); + if( data == null){ + File movie = new File(getTempDirectoryPath(), "Capture.avi"); data = Uri.fromFile(movie); - } - */ // create a file object from the uri - if (data == null) { + if(data == null) { pendingRequests.resolveWithFailure(req, createErrorObject(CAPTURE_NO_MEDIA_FILES, "Error: data is null")); } else { @@ -495,7 +437,6 @@ public void onVideoActivityResult(Request req, Intent intent) { */ private JSONObject createMediaFile(Uri data) { File fp = webView.getResourceApi().mapUriToFile(data); - JSONObject obj = new JSONObject(); Class webViewClass = webView.getClass(); @@ -516,74 +457,30 @@ private JSONObject createMediaFile(Uri data) { } } FileUtils filePlugin = (FileUtils) pm.getPlugin("File"); - - // REM: rename the 3gp file to an mp4 extension if required - - boolean fileRenamed = false; - String thisFile = ""; - LocalFilesystemURL url; - File fp2 = null; - - int index = fp.getAbsolutePath().lastIndexOf("."); - String ext = fp.getAbsolutePath().substring(index); - - if (ext.equals(".3gp")) { - thisFile = fp.getAbsolutePath().substring(0,index); - thisFile = thisFile+".mp4"; - fp2 = new File(thisFile); - boolean ok = fp.renameTo(fp2); - if (ok) { - fileRenamed = true; - Log.i(LOG_TAG, "Video renamed: " + thisFile); - } else { - Log.i(LOG_TAG, "Video rename failed: " + thisFile); - } - } - - if (fileRenamed) { - url = filePlugin.filesystemURLforLocalPath(thisFile); - } else { - url = filePlugin.filesystemURLforLocalPath(fp.getAbsolutePath()); - } + LocalFilesystemURL url = filePlugin.filesystemURLforLocalPath(fp.getAbsolutePath()); try { - - if (fileRenamed){ - // File properties - obj.put("name", fp2.getName()); - obj.put("fullPath", fp2.toURI().toString()); - if (url != null) { - obj.put("localURL", url.toString()); - } - - obj.put("type", FileHelper.getMimeType(Uri.fromFile(fp2), cordova)); - obj.put("lastModifiedDate", fp2.lastModified()); - obj.put("size", fp2.length()); - - } else { - // File properties - obj.put("name", fp.getName()); - obj.put("fullPath", fp.toURI().toString()); - if (url != null) { - obj.put("localURL", url.toString()); - } - // Because of an issue with MimeTypeMap.getMimeTypeFromExtension() all .3gpp files - // are reported as video/3gpp. I'm doing this hacky check of the URI to see if it - // is stored in the audio or video content store. - - if (fp.getAbsoluteFile().toString().endsWith(".3gp") || fp.getAbsoluteFile().toString().endsWith(".3gpp")) { - if (data.toString().contains("/audio/")) { - obj.put("type", AUDIO_3GPP); - } else { - obj.put("type", VIDEO_3GPP); - } + // File properties + obj.put("name", fp.getName()); + obj.put("fullPath", Uri.fromFile(fp)); + if (url != null) { + obj.put("localURL", url.toString()); + } + // Because of an issue with MimeTypeMap.getMimeTypeFromExtension() all .3gpp files + // are reported as video/3gpp. I'm doing this hacky check of the URI to see if it + // is stored in the audio or video content store. + if (fp.getAbsoluteFile().toString().endsWith(".3gp") || fp.getAbsoluteFile().toString().endsWith(".3gpp")) { + if (data.toString().contains("/audio/")) { + obj.put("type", AUDIO_3GPP); } else { - obj.put("type", FileHelper.getMimeType(Uri.fromFile(fp), cordova)); + obj.put("type", VIDEO_3GPP); } - - obj.put("lastModifiedDate", fp.lastModified()); - obj.put("size", fp.length()); + } else { + obj.put("type", FileHelper.getMimeType(Uri.fromFile(fp), cordova)); } + + obj.put("lastModifiedDate", fp.lastModified()); + obj.put("size", fp.length()); } catch (JSONException e) { // this will never happen e.printStackTrace(); @@ -680,4 +577,12 @@ public void onRequestPermissionResult(int requestCode, String[] permissions, } } } + + public Bundle onSaveInstanceState() { + return pendingRequests.toBundle(); + } + + public void onRestoreStateForActivityResult(Bundle state, CallbackContext callbackContext) { + pendingRequests.setLastSavedState(state, callbackContext); + } } diff --git a/src/android/PendingRequests.java b/src/android/PendingRequests.java index 1679cbc7..e4a0d606 100644 --- a/src/android/PendingRequests.java +++ b/src/android/PendingRequests.java @@ -1,228 +1,228 @@ -/* - Licensed to the Apache Software Foundation (ASF) under one - or more contributor license agreements. See the NOTICE file - distributed with this work for additional information - regarding copyright ownership. The ASF licenses this file - to you under the Apache License, Version 2.0 (the - "License"); you may not use this file except in compliance - with the License. You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, - software distributed under the License is distributed on an - "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - KIND, either express or implied. See the License for the - specific language governing permissions and limitations - under the License. -*/ - -package org.apache.cordova.mediacapture; - -import android.os.Bundle; -import android.util.SparseArray; - -import org.apache.cordova.CallbackContext; -import org.apache.cordova.LOG; -import org.apache.cordova.PluginResult; -import org.json.JSONArray; -import org.json.JSONException; -import org.json.JSONObject; - -/** - * Holds the pending javascript requests for the plugin - */ -public class PendingRequests { - private static final String LOG_TAG = "PendingCaptureRequests"; - - private static final String CURRENT_ID_KEY = "currentReqId"; - private static final String REQUEST_KEY_PREFIX = "request_"; - - private int currentReqId = 0; - private SparseArray requests = new SparseArray(); - - private Bundle lastSavedState; - private CallbackContext resumeContext; - - /** - * Creates a request and adds it to the array of pending requests. Each created request gets a - * unique result code for use with startActivityForResult() and requestPermission() - * @param action The action this request corresponds to (capture image, capture audio, etc.) - * @param options The options for this request passed from the javascript - * @param callbackContext The CallbackContext to return the result to - * @return The newly created Request object with a unique result code - * @throws JSONException - */ - public synchronized Request createRequest(int action, JSONObject options, CallbackContext callbackContext) throws JSONException { - Request req = new Request(action, options, callbackContext); - requests.put(req.requestCode, req); - return req; - } - - /** - * Gets the request corresponding to this request code - * @param requestCode The request code for the desired request - * @return The request corresponding to the given request code or null if such a - * request is not found - */ - public synchronized Request get(int requestCode) { - // Check to see if this request was saved - if (lastSavedState != null && lastSavedState.containsKey(REQUEST_KEY_PREFIX + requestCode)) { - Request r = new Request(lastSavedState.getBundle(REQUEST_KEY_PREFIX + requestCode), this.resumeContext, requestCode); - requests.put(requestCode, r); - - // Only one of the saved requests will get restored, because that's all cordova-android - // supports. Having more than one is an extremely unlikely scenario anyway - this.lastSavedState = null; - this.resumeContext = null; - - return r; - } - - return requests.get(requestCode); - } - - /** - * Removes the request from the array of pending requests and sends an error plugin result - * to the CallbackContext that contains the given error object - * @param req The request to be resolved - * @param error The error to be returned to the CallbackContext - */ - public synchronized void resolveWithFailure(Request req, JSONObject error) { - req.callbackContext.error(error); - requests.remove(req.requestCode); - } - - /** - * Removes the request from the array of pending requests and sends a successful plugin result - * to the CallbackContext that contains the result of the request - * @param req The request to be resolved - */ - public synchronized void resolveWithSuccess(Request req) { - req.callbackContext.sendPluginResult(new PluginResult(PluginResult.Status.OK, req.results)); - requests.remove(req.requestCode); - } - - - /** - * Each request gets a unique ID that represents its request code when calls are made to - * Activities and for permission requests - * @return A unique request code - */ - private synchronized int incrementCurrentReqId() { - return currentReqId ++; - } - - /** - * Restore state saved by calling toBundle along with a callbackContext to be used in - * delivering the results of a pending callback - * - * @param lastSavedState The bundle received from toBundle() - * @param resumeContext The callbackContext to return results to - */ - public synchronized void setLastSavedState(Bundle lastSavedState, CallbackContext resumeContext) { - this.lastSavedState = lastSavedState; - this.resumeContext = resumeContext; - this.currentReqId = lastSavedState.getInt(CURRENT_ID_KEY); - } - - /** - * Save the current pending requests to a bundle for saving when the Activity gets destroyed. - * - * @return A Bundle that can be used to restore state using setLastSavedState() - */ - public synchronized Bundle toBundle() { - Bundle bundle = new Bundle(); - bundle.putInt(CURRENT_ID_KEY, currentReqId); - - for (int i = 0; i < requests.size(); i++) { - Request r = requests.valueAt(i); - int requestCode = requests.keyAt(i); - bundle.putBundle(REQUEST_KEY_PREFIX + requestCode, r.toBundle()); - } - - if (requests.size() > 1) { - // This scenario is hopefully very unlikely because there isn't much that can be - // done about it. Should only occur if an external Activity is launched while - // there is a pending permission request and the device is on low memory - LOG.w(LOG_TAG, "More than one media capture request pending on Activity destruction. Some requests will be dropped!"); - } - - return bundle; - } - - /** - * Holds the options and CallbackContext for a capture request made to the plugin. - */ - public class Request { - - // Keys for use in saving requests to a bundle - private static final String ACTION_KEY = "action"; - private static final String LIMIT_KEY = "limit"; - private static final String DURATION_KEY = "duration"; - private static final String QUALITY_KEY = "quality"; - private static final String RESULTS_KEY = "results"; - - // Unique int used to identify this request in any Android Permission or Activity callbacks - public int requestCode; - - // The action that this request is performing - public int action; - - // The number of pics/vids/audio clips to take (CAPTURE_IMAGE, CAPTURE_VIDEO, CAPTURE_AUDIO) - public long limit = 1; - - // Optional max duration of recording in seconds (CAPTURE_VIDEO only) - public int duration = 0; - - // Quality level for video capture 0 low, 1 high (CAPTURE_VIDEO only) - public int quality = 1; - - // The array of results to be returned to the javascript callback on success - public JSONArray results = new JSONArray(); - - // The callback context for this plugin request - private CallbackContext callbackContext; - - private Request(int action, JSONObject options, CallbackContext callbackContext) throws JSONException { - this.callbackContext = callbackContext; - this.action = action; - - if (options != null) { - this.limit = options.optLong("limit", 1); - this.duration = options.optInt("duration", 0); - this.quality = options.optInt("quality", 1); - } - - this.requestCode = incrementCurrentReqId(); - } - - private Request(Bundle bundle, CallbackContext callbackContext, int requestCode) { - this.callbackContext = callbackContext; - this.requestCode = requestCode; - this.action = bundle.getInt(ACTION_KEY); - this.limit = bundle.getLong(LIMIT_KEY); - this.duration = bundle.getInt(DURATION_KEY); - this.quality = bundle.getInt(QUALITY_KEY); - - try { - this.results = new JSONArray(bundle.getString(RESULTS_KEY)); - } catch(JSONException e) { - // This should never be caught - LOG.e(LOG_TAG, "Error parsing results for request from saved bundle", e); - } - } - - private Bundle toBundle() { - Bundle bundle = new Bundle(); - - bundle.putInt(ACTION_KEY, this.action); - bundle.putLong(LIMIT_KEY, this.limit); - bundle.putInt(DURATION_KEY, this.duration); - bundle.putInt(QUALITY_KEY, this.quality); - bundle.putString(RESULTS_KEY, this.results.toString()); - - return bundle; - } - } -} +/* + Licensed to the Apache Software Foundation (ASF) under one + or more contributor license agreements. See the NOTICE file + distributed with this work for additional information + regarding copyright ownership. The ASF licenses this file + to you under the Apache License, Version 2.0 (the + "License"); you may not use this file except in compliance + with the License. You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, + software distributed under the License is distributed on an + "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + KIND, either express or implied. See the License for the + specific language governing permissions and limitations + under the License. +*/ + +package org.apache.cordova.mediacapture; + +import android.os.Bundle; +import android.util.SparseArray; + +import org.apache.cordova.CallbackContext; +import org.apache.cordova.LOG; +import org.apache.cordova.PluginResult; +import org.json.JSONArray; +import org.json.JSONException; +import org.json.JSONObject; + +/** + * Holds the pending javascript requests for the plugin + */ +public class PendingRequests { + private static final String LOG_TAG = "PendingCaptureRequests"; + + private static final String CURRENT_ID_KEY = "currentReqId"; + private static final String REQUEST_KEY_PREFIX = "request_"; + + private int currentReqId = 0; + private SparseArray requests = new SparseArray(); + + private Bundle lastSavedState; + private CallbackContext resumeContext; + + /** + * Creates a request and adds it to the array of pending requests. Each created request gets a + * unique result code for use with startActivityForResult() and requestPermission() + * @param action The action this request corresponds to (capture image, capture audio, etc.) + * @param options The options for this request passed from the javascript + * @param callbackContext The CallbackContext to return the result to + * @return The newly created Request object with a unique result code + * @throws JSONException + */ + public synchronized Request createRequest(int action, JSONObject options, CallbackContext callbackContext) throws JSONException { + Request req = new Request(action, options, callbackContext); + requests.put(req.requestCode, req); + return req; + } + + /** + * Gets the request corresponding to this request code + * @param requestCode The request code for the desired request + * @return The request corresponding to the given request code or null if such a + * request is not found + */ + public synchronized Request get(int requestCode) { + // Check to see if this request was saved + if (lastSavedState != null && lastSavedState.containsKey(REQUEST_KEY_PREFIX + requestCode)) { + Request r = new Request(lastSavedState.getBundle(REQUEST_KEY_PREFIX + requestCode), this.resumeContext, requestCode); + requests.put(requestCode, r); + + // Only one of the saved requests will get restored, because that's all cordova-android + // supports. Having more than one is an extremely unlikely scenario anyway + this.lastSavedState = null; + this.resumeContext = null; + + return r; + } + + return requests.get(requestCode); + } + + /** + * Removes the request from the array of pending requests and sends an error plugin result + * to the CallbackContext that contains the given error object + * @param req The request to be resolved + * @param error The error to be returned to the CallbackContext + */ + public synchronized void resolveWithFailure(Request req, JSONObject error) { + req.callbackContext.error(error); + requests.remove(req.requestCode); + } + + /** + * Removes the request from the array of pending requests and sends a successful plugin result + * to the CallbackContext that contains the result of the request + * @param req The request to be resolved + */ + public synchronized void resolveWithSuccess(Request req) { + req.callbackContext.sendPluginResult(new PluginResult(PluginResult.Status.OK, req.results)); + requests.remove(req.requestCode); + } + + + /** + * Each request gets a unique ID that represents its request code when calls are made to + * Activities and for permission requests + * @return A unique request code + */ + private synchronized int incrementCurrentReqId() { + return currentReqId ++; + } + + /** + * Restore state saved by calling toBundle along with a callbackContext to be used in + * delivering the results of a pending callback + * + * @param lastSavedState The bundle received from toBundle() + * @param resumeContext The callbackContext to return results to + */ + public synchronized void setLastSavedState(Bundle lastSavedState, CallbackContext resumeContext) { + this.lastSavedState = lastSavedState; + this.resumeContext = resumeContext; + this.currentReqId = lastSavedState.getInt(CURRENT_ID_KEY); + } + + /** + * Save the current pending requests to a bundle for saving when the Activity gets destroyed. + * + * @return A Bundle that can be used to restore state using setLastSavedState() + */ + public synchronized Bundle toBundle() { + Bundle bundle = new Bundle(); + bundle.putInt(CURRENT_ID_KEY, currentReqId); + + for (int i = 0; i < requests.size(); i++) { + Request r = requests.valueAt(i); + int requestCode = requests.keyAt(i); + bundle.putBundle(REQUEST_KEY_PREFIX + requestCode, r.toBundle()); + } + + if (requests.size() > 1) { + // This scenario is hopefully very unlikely because there isn't much that can be + // done about it. Should only occur if an external Activity is launched while + // there is a pending permission request and the device is on low memory + LOG.w(LOG_TAG, "More than one media capture request pending on Activity destruction. Some requests will be dropped!"); + } + + return bundle; + } + + /** + * Holds the options and CallbackContext for a capture request made to the plugin. + */ + public class Request { + + // Keys for use in saving requests to a bundle + private static final String ACTION_KEY = "action"; + private static final String LIMIT_KEY = "limit"; + private static final String DURATION_KEY = "duration"; + private static final String QUALITY_KEY = "quality"; + private static final String RESULTS_KEY = "results"; + + // Unique int used to identify this request in any Android Permission or Activity callbacks + public int requestCode; + + // The action that this request is performing + public int action; + + // The number of pics/vids/audio clips to take (CAPTURE_IMAGE, CAPTURE_VIDEO, CAPTURE_AUDIO) + public long limit = 1; + + // Optional max duration of recording in seconds (CAPTURE_VIDEO only) + public int duration = 0; + + // Quality level for video capture 0 low, 1 high (CAPTURE_VIDEO only) + public int quality = 1; + + // The array of results to be returned to the javascript callback on success + public JSONArray results = new JSONArray(); + + // The callback context for this plugin request + private CallbackContext callbackContext; + + private Request(int action, JSONObject options, CallbackContext callbackContext) throws JSONException { + this.callbackContext = callbackContext; + this.action = action; + + if (options != null) { + this.limit = options.optLong("limit", 1); + this.duration = options.optInt("duration", 0); + this.quality = options.optInt("quality", 1); + } + + this.requestCode = incrementCurrentReqId(); + } + + private Request(Bundle bundle, CallbackContext callbackContext, int requestCode) { + this.callbackContext = callbackContext; + this.requestCode = requestCode; + this.action = bundle.getInt(ACTION_KEY); + this.limit = bundle.getLong(LIMIT_KEY); + this.duration = bundle.getInt(DURATION_KEY); + this.quality = bundle.getInt(QUALITY_KEY); + + try { + this.results = new JSONArray(bundle.getString(RESULTS_KEY)); + } catch(JSONException e) { + // This should never be caught + LOG.e(LOG_TAG, "Error parsing results for request from saved bundle", e); + } + } + + private Bundle toBundle() { + Bundle bundle = new Bundle(); + + bundle.putInt(ACTION_KEY, this.action); + bundle.putLong(LIMIT_KEY, this.limit); + bundle.putInt(DURATION_KEY, this.duration); + bundle.putInt(QUALITY_KEY, this.quality); + bundle.putString(RESULTS_KEY, this.results.toString()); + + return bundle; + } + } +} diff --git a/src/blackberry10/index.js b/src/blackberry10/index.js deleted file mode 100644 index 7ceb8387..00000000 --- a/src/blackberry10/index.js +++ /dev/null @@ -1,116 +0,0 @@ -/* - * - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - * -*/ - -/* global PluginResult */ - -//cordova-js/lib/common/plugin/CaptureError.js -var INTERNAL_ERROR_CODE = 0, - APPLICATION_BUSY_ERROR_CODE = 1, - INVALID_ARGUMENT_ERROR_CODE = 2, - NO_MEDIA_FILES_ERROR_CODE = 3; - -function capture(action, options, result, webview) { - var limit = options.limit || 1, - fail = function (error) { - result.callbackError({code: INTERNAL_ERROR_CODE}); - }, - onCaptured = function (path) { - var sb = webview.setFileSystemSandbox; - webview.setFileSystemSandbox = false; - window.webkitRequestFileSystem(window.PERSISTENT, 1024, function (fs) { - fs.root.getFile(path, {}, function (fe) { - fe.file(function (file) { - file.fullPath = fe.fullPath; - webview.setFileSystemSandbox = sb; - result.callbackOk([file]); - }, fail); - }, fail); - }, fail); - }, - onAudioCaptured = function (response) { - window.qnx.webplatform.getApplication().invocation.removeEventListener("childCardClosed", onAudioCaptured); - if (response.data && response.data !== "") { - onCaptured(response.data); - } else { - result.callbackError({code: NO_MEDIA_FILES_ERROR_CODE }); - } - }, - onCancelled = function () { - result.callbackError({code: NO_MEDIA_FILES_ERROR_CODE }); - }, - onInvoked = function (error) { - if (error) { - result.callbackError({code: APPLICATION_BUSY_ERROR_CODE}); - } - }; - - if (limit < 0) { - result.error({code: INVALID_ARGUMENT_ERROR_CODE}); - } else if (action === "audio") { - window.qnx.webplatform.getApplication().invocation.invoke( - { - target: "sys.apps.audiorecorder", - action: "bb.action.CAPTURE" - }, - function (error) { - if (error) { - console.log(error); - } else { - window.qnx.webplatform.getApplication().invocation.addEventListener("childCardClosed", onAudioCaptured); - } - }); - result.noResult(true); - } else { - window.qnx.webplatform.getApplication().cards.camera.open(action, onCaptured, onCancelled, onInvoked); - result.noResult(true); - } -} - -module.exports = { - getSupportedAudioModes: function (success, fail, args, env) { - var result = new PluginResult(args, env); - result.ok([]); - }, - getSupportedImageModes: function (win, fail, args, env) { - var result = new PluginResult(args, env); - result.ok([]); - }, - getSupportedVideoModes: function (win, fail, args, env) { - var result = new PluginResult(args, env); - result.ok([]); - }, - captureImage: function (win, fail, args, env) { - var result = new PluginResult(args, env), - options = args[0] === "undefined" ? {} : JSON.parse(decodeURIComponent(args[0])); - - capture("photo", options, result, env.webview); - }, - captureVideo: function (win, fail, args, env) { - var result = new PluginResult(args, env), - options = args[0] === "undefined" ? {} : JSON.parse(decodeURIComponent(args[0])); - - capture("video", options, result, env.webview); - }, - captureAudio: function (win, fail, args, env) { - var result = new PluginResult(args, env); - capture("audio", {}, result, env.webview); - } -}; diff --git a/src/browser/CaptureProxy.js b/src/browser/CaptureProxy.js index 6c7cf4b1..d5c8f8bf 100644 --- a/src/browser/CaptureProxy.js +++ b/src/browser/CaptureProxy.js @@ -17,9 +17,7 @@ * specific language governing permissions and limitations * under the License. * -*/ - -/*global require, module*/ + */ var MediaFile = require('cordova-plugin-media-capture.MediaFile'); var MediaFileData = require('cordova-plugin-media-capture.MediaFileData'); @@ -30,10 +28,10 @@ var CaptureError = require('cordova-plugin-media-capture.CaptureError'); * @param {String} dataURI Data URI to convert * @return {Blob} Blob, covnerted from DataURI String */ -function dataURItoBlob(dataURI) { +function dataURItoBlob (dataURI) { // convert base64 to raw binary data held in a string // doesn't handle URLEncoded DataURIs - var byteString = atob(dataURI.split(',')[1]); + var byteString = atob(dataURI.split(',')[1]); // eslint-disable-line no-undef // separate out the mime component var mimeString = dataURI.split(',')[0].split(':')[1].split(';')[0]; @@ -46,26 +44,26 @@ function dataURItoBlob(dataURI) { } // write the ArrayBuffer to a blob, and you're done - return new Blob([ab], { type: mimeString }); + return new Blob([ab], { type: mimeString }); // eslint-disable-line no-undef } /** * Creates basic camera UI with preview 'video' element and 'Cancel' button * Capture starts, when you clicking on preview. */ -function CameraUI() { - - // Root element for preview +function CameraUI () { + // Root element for preview var container = document.createElement('div'); - container.style.cssText = "left: 0px; top: 0px; width: 100%; height: 100%; position: fixed; z-index:9999;" + - "padding: 40px; background-color: rgba(0,0,0,0.75);" + - "text-align:center; visibility: hidden"; + container.style.cssText = + 'left: 0px; top: 0px; width: 100%; height: 100%; position: fixed; z-index:9999;' + + 'padding: 40px; background-color: rgba(0,0,0,0.75);' + + 'text-align:center; visibility: hidden'; // Set up root element contetnts container.innerHTML = '
' + '

' + - 'Click on preview to capture image. Click outside of preview to cancel.

' + + 'Click on preview to capture image. Click outside of preview to cancel.' + '' + '
'; @@ -91,7 +89,7 @@ function CameraUI() { * @param {Function} successCB Success callback, that accepts data URL of captured image * @param {Function} errorCB Error callback */ -CameraUI.prototype.startPreview = function(count, successCB, errorCB) { +CameraUI.prototype.startPreview = function (count, successCB, errorCB) { var that = this; this.preview.onclick = function (e) { @@ -114,15 +112,19 @@ CameraUI.prototype.startPreview = function(count, successCB, errorCB) { errorCB(new CaptureError(CaptureError.CAPTURE_NO_MEDIA_FILES)); }; - navigator.getUserMedia({video: true}, function (previewStream) { - // Save video stream to be able to stop it later - that._previewStream = previewStream; - that.preview.src = URL.createObjectURL(previewStream); - // We don't need to set visibility = true for preview element - // since this will be done automatically in onplay event handler - }, function (/*err*/) { - errorCB(new CaptureError(CaptureError.CAPTURE_INTERNAL_ERR)); - }); + navigator.getUserMedia( + { video: true }, + function (previewStream) { + // Save video stream to be able to stop it later + that._previewStream = previewStream; + that.preview.src = URL.createObjectURL(previewStream); // eslint-disable-line no-undef + // We don't need to set visibility = true for preview element + // since this will be done automatically in onplay event handler + }, + function (/* err */) { + errorCB(new CaptureError(CaptureError.CAPTURE_INTERNAL_ERR)); + } + ); }; /** @@ -138,22 +140,20 @@ CameraUI.prototype.destroyPreview = function () { } }; - module.exports = { - captureAudio:function(successCallback, errorCallback) { + captureAudio: function (successCallback, errorCallback) { if (errorCallback) { errorCallback(new CaptureError(CaptureError.CAPTURE_NOT_SUPPORTED)); } }, - captureVideo:function (successCallback, errorCallback) { + captureVideo: function (successCallback, errorCallback) { if (errorCallback) { errorCallback(new CaptureError(CaptureError.CAPTURE_NOT_SUPPORTED)); } }, - captureImage:function (successCallback, errorCallback, args) { - + captureImage: function (successCallback, errorCallback, args) { var fail = function (code) { if (errorCallback) { errorCallback(new CaptureError(code || CaptureError.CAPTURE_INTERNAL_ERR)); @@ -171,10 +171,8 @@ module.exports = { // Counter for already taken images var imagesTaken = 0; - navigator.getUserMedia = navigator.getUserMedia || - navigator.webkitGetUserMedia || - navigator.mozGetUserMedia || - navigator.msGetUserMedia; + navigator.getUserMedia = + navigator.getUserMedia || navigator.webkitGetUserMedia || navigator.mozGetUserMedia || navigator.msGetUserMedia; if (!navigator.getUserMedia) { fail(CaptureError.CAPTURE_NOT_SUPPORTED); @@ -182,45 +180,60 @@ module.exports = { } var ui = new CameraUI(); - ui.startPreview(limit, function (data) { - // Check if we're done with capture. If so, then destroy UI - if (++imagesTaken >= limit) { + ui.startPreview( + limit, + function (data) { + // Check if we're done with capture. If so, then destroy UI + if (++imagesTaken >= limit) { + ui.destroyPreview(); + } + + // Array of resultant MediaFiles + var mediaFiles = []; + + // save data to file here + window.requestFileSystem( + window.TEMPORARY, + data.length * limit, + function (fileSystem) { + // If we need to capture multiple files, then append counter to filename + var fileName = limit <= 1 ? 'image.jpg' : 'image' + imagesTaken + '.jpg'; + fileSystem.root.getFile( + fileName, + { create: true }, + function (file) { + file.createWriter(function (writer) { + writer.onwriteend = function () { + file.getMetadata(function (meta) { + mediaFiles.push( + new MediaFile(file.name, file.toURL(), 'image/jpeg', meta.modificationTime, meta.size) + ); + // Check if we're done with capture. If so, then call a successCallback + if (imagesTaken >= limit) { + successCallback(mediaFiles); + } + }, fail); + }; + writer.onerror = fail; + // Since success callback for start preview returns + // a base64 encoded string, we need to convert it to blob first + writer.write(dataURItoBlob(data)); + }); + }, + fail + ); + }, + fail + ); + }, + function (err) { ui.destroyPreview(); + fail(err.code); } - - // Array of resultant MediaFiles - var mediaFiles = []; - - // save data to file here - window.requestFileSystem(window.TEMPORARY, data.length * limit, function (fileSystem) { - // If we need to capture multiple files, then append counter to filename - var fileName = limit <= 1 ? 'image.jpg' : 'image' + imagesTaken + '.jpg'; - fileSystem.root.getFile(fileName, {create: true}, function (file) { - file.createWriter(function (writer) { - writer.onwriteend = function () { - file.getMetadata(function (meta) { - mediaFiles.push(new MediaFile(file.name, file.toURL(), 'image/jpeg', meta.modificationTime, meta.size)); - // Check if we're done with capture. If so, then call a successCallback - if (imagesTaken >= limit) { - successCallback(mediaFiles); - } - }, fail); - }; - writer.onerror = fail; - // Since success callback for start preview returns - // a base64 encoded string, we need to convert it to blob first - writer.write(dataURItoBlob(data)); - }); - }, fail); - }, fail); - }, function (err) { - ui.destroyPreview(); - fail(err.code); - }); + ); }, getFormatData: function (successCallback, errorCallback, args) { - var img = document.createElement('img'); img.src = args[0]; img.onload = function () { @@ -231,4 +244,4 @@ module.exports = { } }; -require("cordova/exec/proxy").add("Capture",module.exports); +require('cordova/exec/proxy').add('Capture', module.exports); diff --git a/src/ios/CDVCapture.h b/src/ios/CDVCapture.h index 090bcaf0..7b4d1ed3 100644 --- a/src/ios/CDVCapture.h +++ b/src/ios/CDVCapture.h @@ -28,6 +28,7 @@ enum CDVCaptureError { CAPTURE_APPLICATION_BUSY = 1, CAPTURE_INVALID_ARGUMENT = 2, CAPTURE_NO_MEDIA_FILES = 3, + CAPTURE_PERMISSION_DENIED = 4, CAPTURE_NOT_SUPPORTED = 20 }; typedef NSUInteger CDVCaptureError; diff --git a/src/ios/CDVCapture.m b/src/ios/CDVCapture.m index 99fae1bc..fb0b7c55 100644 --- a/src/ios/CDVCapture.m +++ b/src/ios/CDVCapture.m @@ -69,17 +69,17 @@ - (uint64_t)accessibilityTraits - (BOOL)prefersStatusBarHidden { return YES; } - + - (UIViewController*)childViewControllerForStatusBarHidden { return nil; } - + - (void)viewWillAppear:(BOOL)animated { SEL sel = NSSelectorFromString(@"setNeedsStatusBarAppearanceUpdate"); if ([self respondsToSelector:sel]) { [self performSelector:sel withObject:nil afterDelay:0]; } - + [super viewWillAppear:animated]; } @@ -152,6 +152,7 @@ - (void)captureImage:(CDVInvokedUrlCommand*)command pickerController = [[CDVImagePicker alloc] init]; } + [self showAlertIfAccessProhibited]; pickerController.delegate = self; pickerController.sourceType = UIImagePickerControllerSourceTypeCamera; pickerController.allowsEditing = NO; @@ -168,7 +169,7 @@ - (void)captureImage:(CDVInvokedUrlCommand*)command }*/ // CDVImagePicker specific property pickerController.callbackId = callbackId; - + pickerController.modalPresentationStyle = UIModalPresentationCurrentContext; [self.viewController presentViewController:pickerController animated:YES completion:nil]; } } @@ -258,6 +259,8 @@ - (void)captureVideo:(CDVInvokedUrlCommand*)command [self.commandDelegate sendPluginResult:result callbackId:callbackId]; pickerController = nil; } else { + [self showAlertIfAccessProhibited]; + pickerController.delegate = self; pickerController.sourceType = UIImagePickerControllerSourceTypeCamera; pickerController.allowsEditing = NO; @@ -280,7 +283,7 @@ - (void)captureVideo:(CDVInvokedUrlCommand*)command } // CDVImagePicker specific property pickerController.callbackId = callbackId; - + pickerController.modalPresentationStyle = UIModalPresentationCurrentContext; [self.viewController presentViewController:pickerController animated:YES completion:nil]; } } @@ -302,6 +305,51 @@ - (void)processVideo:(NSString*)moviePath forCallbackId:(NSString*)callbackId [self.commandDelegate sendPluginResult:result callbackId:callbackId]; } +- (void)showAlertIfAccessProhibited +{ + if (![self hasCameraAccess]) { + [self showPermissionsAlert]; + } +} + +- (BOOL)hasCameraAccess +{ + AVAuthorizationStatus status = [AVCaptureDevice authorizationStatusForMediaType:AVMediaTypeVideo]; + + return status != AVAuthorizationStatusDenied && status != AVAuthorizationStatusRestricted; +} + +- (void)showPermissionsAlert +{ + UIAlertController *alertController = [UIAlertController alertControllerWithTitle:[[NSBundle mainBundle] objectForInfoDictionaryKey:@"CFBundleDisplayName"] + message:NSLocalizedString(@"Access to the camera has been prohibited; please enable it in the Settings app to continue.", nil) + preferredStyle:UIAlertControllerStyleAlert]; + [alertController addAction:[UIAlertAction actionWithTitle:NSLocalizedString(@"OK", nil) + style:UIAlertActionStyleDefault + handler:^(UIAlertAction * action) + { + [self returnNoPermissionError]; + }]]; + [alertController addAction:[UIAlertAction actionWithTitle:NSLocalizedString(@"Settings", nil) + style:UIAlertActionStyleDefault + handler:^(UIAlertAction * action) + { + [[UIApplication sharedApplication] openURL:[NSURL URLWithString:UIApplicationOpenSettingsURLString]options:@{} completionHandler:nil]; + [self returnNoPermissionError]; + }]]; + [self.viewController presentViewController:alertController animated:YES completion:^{}]; +} + +- (void)returnNoPermissionError +{ + CDVPluginResult* result = [CDVPluginResult resultWithStatus:CDVCommandStatus_ERROR messageToErrorObject:CAPTURE_PERMISSION_DENIED]; + + [[pickerController presentingViewController] dismissViewControllerAnimated:YES completion:nil]; + [self.commandDelegate sendPluginResult:result callbackId:pickerController.callbackId]; + pickerController = nil; + self.inUse = NO; +} + - (void)getMediaModes:(CDVInvokedUrlCommand*)command { // NSString* callbackId = [command argumentAtIndex:0]; @@ -347,7 +395,7 @@ - (void)getMediaModes:(CDVInvokedUrlCommand*)command movieArray ? (NSObject*) movieArray:[NSNull null], @"video", audioArray ? (NSObject*) audioArray:[NSNull null], @"audio", nil]; - + NSData* jsonData = [NSJSONSerialization dataWithJSONObject:modes options:0 error:nil]; NSString* jsonStr = [[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding]; @@ -628,19 +676,11 @@ - (void)imagePickerControllerDidCancel:(UIImagePickerController*)picker @implementation CDVAudioNavigationController -#if __IPHONE_OS_VERSION_MAX_ALLOWED >= 90000 - (UIInterfaceOrientationMask)supportedInterfaceOrientations { // delegate to CVDAudioRecorderViewController return [self.topViewController supportedInterfaceOrientations]; } -#else -- (NSUInteger)supportedInterfaceOrientations -{ - // delegate to CVDAudioRecorderViewController - return [self.topViewController supportedInterfaceOrientations]; -} -#endif @end @@ -692,9 +732,9 @@ - (void)loadView if ([self respondsToSelector:@selector(edgesForExtendedLayout)]) { self.edgesForExtendedLayout = UIRectEdgeNone; } - + // create view and display - CGRect viewRect = [[UIScreen mainScreen] applicationFrame]; + CGRect viewRect = [[UIScreen mainScreen] bounds]; UIView* tmp = [[UIView alloc] initWithFrame:viewRect]; // make backgrounds @@ -735,12 +775,7 @@ - (void)loadView // timerLabel.autoresizingMask = reSizeMask; [self.timerLabel setBackgroundColor:[UIColor clearColor]]; [self.timerLabel setTextColor:[UIColor whiteColor]]; -#ifdef __IPHONE_6_0 [self.timerLabel setTextAlignment:NSTextAlignmentCenter]; -#else - // for iOS SDK < 6.0 - [self.timerLabel setTextAlignment:UITextAlignmentCenter]; -#endif [self.timerLabel setText:@"0:00"]; [self.timerLabel setAccessibilityHint:PluginLocalizedString(captureCommand, @"recorded time in minutes and seconds", nil)]; self.timerLabel.accessibilityTraits |= UIAccessibilityTraitUpdatesFrequently; @@ -815,31 +850,14 @@ - (void)viewDidLoad } } -#if __IPHONE_OS_VERSION_MAX_ALLOWED >= 90000 - (UIInterfaceOrientationMask)supportedInterfaceOrientations { UIInterfaceOrientationMask orientation = UIInterfaceOrientationMaskPortrait; UIInterfaceOrientationMask supported = [captureCommand.viewController supportedInterfaceOrientations]; - - orientation = orientation | (supported & UIInterfaceOrientationMaskPortraitUpsideDown); - return orientation; -} -#else -- (NSUInteger)supportedInterfaceOrientations -{ - NSUInteger orientation = UIInterfaceOrientationMaskPortrait; // must support portrait - NSUInteger supported = [captureCommand.viewController supportedInterfaceOrientations]; - + orientation = orientation | (supported & UIInterfaceOrientationMaskPortraitUpsideDown); return orientation; } -#endif - -- (void)viewDidUnload -{ - [self setView:nil]; - [self.captureCommand setInUse:NO]; -} - (void)processButton:(id)sender { @@ -856,7 +874,7 @@ - (void)processButton:(id)sender __block NSError* error = nil; __weak CDVAudioRecorderViewController* weakSelf = self; - + void (^startRecording)(void) = ^{ [weakSelf.avSession setCategory:AVAudioSessionCategoryRecord error:&error]; [weakSelf.avSession setActive:YES error:&error]; @@ -867,7 +885,7 @@ - (void)processButton:(id)sender } else { if (weakSelf.duration) { weakSelf.isTimed = true; - [weakSelf.avRecorder recordForDuration:[duration doubleValue]]; + [weakSelf.avRecorder recordForDuration:[weakSelf.duration doubleValue]]; } else { [weakSelf.avRecorder record]; } @@ -877,7 +895,7 @@ - (void)processButton:(id)sender } UIAccessibilityPostNotification(UIAccessibilityLayoutChangedNotification, nil); }; - + SEL rrpSel = NSSelectorFromString(@"requestRecordPermission:"); if ([self.avSession respondsToSelector:rrpSel]) { @@ -921,7 +939,7 @@ - (void)stopRecordingCleanup //BOOL isUIAccessibilityAnnouncementNotification = (&UIAccessibilityAnnouncementNotification != NULL); if (UIAccessibilityAnnouncementNotification) { dispatch_after(dispatch_time(DISPATCH_TIME_NOW, 500ull * NSEC_PER_MSEC), dispatch_get_main_queue(), ^{ - UIAccessibilityPostNotification(UIAccessibilityAnnouncementNotification, PluginLocalizedString(captureCommand, @"timed recording complete", nil)); + UIAccessibilityPostNotification(UIAccessibilityAnnouncementNotification, PluginLocalizedString(self->captureCommand, @"timed recording complete", nil)); }); } } else { @@ -947,10 +965,6 @@ - (void)dismissAudioView:(id)sender UIAccessibilityPostNotification(UIAccessibilityScreenChangedNotification, nil); // return result [self.captureCommand.commandDelegate sendPluginResult:pluginResult callbackId:callbackId]; - - if (IsAtLeastiOSVersion(@"7.0")) { - [[UIApplication sharedApplication] setStatusBarStyle:_previousStatusBarStyle]; - } } - (void)updateTime @@ -1001,18 +1015,4 @@ - (void)audioRecorderEncodeErrorDidOccur:(AVAudioRecorder*)recorder error:(NSErr [self dismissAudioView:nil]; } -- (UIStatusBarStyle)preferredStatusBarStyle -{ - return UIStatusBarStyleDefault; -} - -- (void)viewWillAppear:(BOOL)animated -{ - if (IsAtLeastiOSVersion(@"7.0")) { - [[UIApplication sharedApplication] setStatusBarStyle:[self preferredStatusBarStyle]]; - } - - [super viewWillAppear:animated]; -} - @end diff --git a/src/ubuntu/MediaCaptureWidget.qml b/src/ubuntu/MediaCaptureWidget.qml deleted file mode 100644 index 98350fad..00000000 --- a/src/ubuntu/MediaCaptureWidget.qml +++ /dev/null @@ -1,206 +0,0 @@ -/* - * - * Copyright 2013 Canonical Ltd. - * - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - * -*/ -import QtQuick 2.0 -import QtMultimedia 5.0 - -Rectangle { - property string recordOffImagePath: "record_off.png" - property string recordOnImagePath: "record_on.png" - property string shootImagePath: "shoot.png" - function isSuffix(str, suffix) { - return String(str).substr(String(str).length - suffix.length) == suffix - } - - id: ui - color: "#252423" - anchors.fill: parent - state: "off" - - Camera { - objectName: "camera" - id: camera - onError: { - console.log(errorString); - shootButton.source = recordOffImagePath - } - imageCapture { - onImageSaved: { - root.exec("Capture", "onImageSaved", [path]); - ui.destroy(); - } - } - videoRecorder { - audioBitRate: 128000 - mediaContainer: "mp4" - outputLocation: ui.parent.plugin('Capture').generateLocation("mp4") - onRecorderStateChanged: { - if (videoRecorder.recorderState === CameraRecorder.StoppedState) { - ui.parent.exec("Capture", "onVideoRecordEnd", [camera.videoRecorder.outputLocation]); - shootButton.source = recordOffImagePath - } - } - } - } - Image { - id: microphoneImage - source: "microphone.png" - smooth: true - visible: false - width: parent.width - height: parent.height - } - VideoOutput { - id: output - focus : visible - source: camera - width: parent.width - height: parent.height - } - - Item { - anchors.bottom: parent.bottom - width: parent.width - height: shootButton.height - BorderImage { - id: leftBackground - anchors.left: parent.left - anchors.top: parent.top - anchors.bottom: parent.bottom - anchors.right: middle.left - anchors.topMargin: units.dp(2) - anchors.bottomMargin: units.dp(2) - source: "toolbar-left.png" - Image { - anchors.verticalCenter: parent.verticalCenter - anchors.left: parent.left - anchors.leftMargin: parent.iconSpacing - source: "back.png" - width: units.gu(6) - height: units.gu(5) - MouseArea { - anchors.fill: parent - onClicked: { - root.exec("Capture", "cancel"); - } - } - } - } - BorderImage { - id: middle - anchors.top: parent.top - anchors.bottom: parent.bottom - anchors.horizontalCenter: parent.horizontalCenter - height: shootButton.height + units.gu(1) - width: shootButton.width - source: "toolbar-middle.png" - Image { - id: shootButton - width: units.gu(8) - height: width - anchors.horizontalCenter: parent.horizontalCenter - source: shootImagePath - MouseArea { - anchors.fill: parent - onClicked: { - if (ui.state === "camera") { - camera.imageCapture.captureToLocation(ui.parent.plugin('Capture').generateLocation("jpg")); - } else if (ui.state === "audio") { - ui.parent.exec("Capture", "recordAudio"); - if (isSuffix(shootButton.source, recordOffImagePath)) { - shootButton.source = recordOnImagePath - } else { - shootButton.source = recordOffImagePath - } - } else if (ui.state === "videoRecording") { - if (!camera.videoRecorder.recorderState) { - shootButton.source = recordOnImagePath - camera.videoRecorder.record(); - } else { - camera.videoRecorder.stop(); - } - } - } - } - } - } - BorderImage { - id: rightBackground - anchors.right: parent.right - anchors.top: parent.top - anchors.bottom: parent.bottom - anchors.left: middle.right - anchors.topMargin: units.dp(2) - anchors.bottomMargin: units.dp(2) - source: "toolbar-right.png" - } - } - states: [ - State { - name: "off" - StateChangeScript { - script:{ - ui.visible = false; - camera.stop(); - camera.unlock(); - } - } - }, - State { - name: "camera" - StateChangeScript { - script: { - camera.start(); - microphoneImage.visible = false - output.visible = true - shootButton.source = shootImagePath - ui.visible = true - } - } - }, - State { - name: "videoRecording" - StateChangeScript { - script: { - shootButton.source = recordOffImagePath - camera.start(); - microphoneImage.visible = false - output.visible = true - ui.visible = true - } - } - }, - State { - name: "audio" - StateChangeScript { - script:{ - shootButton.source = recordOffImagePath - camera.stop(); - microphoneImage.visible = true - camera.unlock(); - output.visible = false - ui.visible = true - } - } - } - ] -} diff --git a/src/ubuntu/back.png b/src/ubuntu/back.png deleted file mode 100644 index af78faa8..00000000 Binary files a/src/ubuntu/back.png and /dev/null differ diff --git a/src/ubuntu/capture.cpp b/src/ubuntu/capture.cpp deleted file mode 100644 index aaf0910f..00000000 --- a/src/ubuntu/capture.cpp +++ /dev/null @@ -1,161 +0,0 @@ -/* - * - * Copyright 2013 Canonical Ltd. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - * -*/ -#include "capture.h" - -const char code[] = "\ -var component, object; \ -function createObject() { \ - component = Qt.createComponent(%1); \ - if (component.status == Component.Ready) \ - finishCreation(); \ - else \ - component.statusChanged.connect(finishCreation); \ -} \ -function finishCreation() { \ - CordovaWrapper.global.captureObject = component.createObject(root, \ - {root: root, cordova: cordova, state: \"%2\"}); \ -} \ -createObject()"; - -static QString formatFile(const QMimeDatabase &db, const QString &path) { - QFileInfo info(path); - QMimeType mime = db.mimeTypeForFile(info.fileName()); - - QVariantMap file; - file.insert("name", info.fileName()); - file.insert("fullPath", info.absoluteFilePath()); - file.insert("lastModifiedDate", info.lastModified().toMSecsSinceEpoch()); - file.insert("size", info.size()); - file.insert("type", mime.name()); - - return CordovaInternal::format(file); -} - -MediaCapture::MediaCapture(Cordova *cordova): CPlugin(cordova), _scId(0), _ecId(0) { -} - -void MediaCapture::captureAudio(int scId, int ecId, const QVariantMap &) { - if (_scId || _ecId) { - this->callback(_ecId, QString("{code: %1}").arg(CAPTURE_APPLICATION_BUSY)); - return; - } - - QString path = m_cordova->get_app_dir() + "/../qml/MediaCaptureWidget.qml"; - - QString qml = QString(code).arg(CordovaInternal::format(path)).arg("audio"); - m_cordova->execQML(qml); - - _scId = scId; - _ecId = ecId; -} - -void MediaCapture::onAudioRecordError(QMediaRecorder::Error) { - if (!_ecId) - return; - this->callback(_ecId, QString("{code: %1}").arg(CAPTURE_INTERNAL_ERR)); - _ecId = _scId = 0; - - _recorder.clear(); - _files.clear(); - - m_cordova->execQML("CordovaWrapper.global.captureObject.destroy()"); -} - -void MediaCapture::recordAudio() { - if (_recorder.data()) { - QUrl url = _recorder->outputLocation(); - - QString path = url.toString(); - _recorder->stop(); - - _recorder.clear(); - - this->callback(_scId, QString("[%1]").arg(formatFile(_db, path))); - _ecId = _scId = 0; - - m_cordova->execQML("CordovaWrapper.global.captureObject.destroy()"); - } else { - _recorder = QSharedPointer(new QAudioRecorder); - QObject::connect(_recorder.data(), SIGNAL(error(QMediaRecorder::Error)), this, SLOT(onAudioRecordError(QMediaRecorder::Error))); - - if (_options.find("mode")->toString() == "audio/amr") { - _recorder->setContainerFormat("amr"); - _recorder->setOutputLocation(generateLocation("amr")); - } else { - _recorder->setContainerFormat("wav"); - _recorder->setOutputLocation(generateLocation("wav")); - } - _recorder->record(); - } -} - -void MediaCapture::cancel() { - if (!_ecId) - return; - - m_cordova->execQML("CordovaWrapper.global.captureObject.destroy()"); - - _recorder.clear(); - this->callback(_ecId, QString("{code: %1}").arg(CAPTURE_NO_MEDIA_FILES)); - _ecId = _scId = 0; - - _recorder.clear(); -} - -void MediaCapture::captureVideo(int scId, int ecId, const QVariantMap &) { - if (_scId || _ecId) { - this->callback(_ecId, QString("{code: %1}").arg(CAPTURE_APPLICATION_BUSY)); - return; - } - - QString path = m_cordova->get_app_dir() + "/../qml/MediaCaptureWidget.qml"; - QString qml = QString(code).arg(CordovaInternal::format(path)).arg("videoRecording"); - m_cordova->execQML(qml); - - _scId = scId; - _ecId = ecId; -} - -void MediaCapture::onVideoRecordEnd(const QString &uri) { - QString path = QUrl::fromUserInput(uri).path(); - - this->callback(_scId, QString("[%1]").arg(formatFile(_db, path))); - _ecId = _scId = 0; - - m_cordova->execQML("CordovaWrapper.global.captureObject.destroy()"); -} - -void MediaCapture::captureImage(int scId, int ecId, const QVariantMap &) { - if (_scId || _ecId) { - this->callback(_ecId, QString("{code: %1}").arg(CAPTURE_APPLICATION_BUSY)); - return; - } - - QString path = m_cordova->get_app_dir() + "/../qml/MediaCaptureWidget.qml"; - QString qml = QString(code).arg(CordovaInternal::format(path)).arg("camera"); - m_cordova->execQML(qml); - - _scId = scId; - _ecId = ecId; -} - -void MediaCapture::onImageSaved(const QString &path) { - this->callback(_scId, QString("[%1]").arg(formatFile(_db, path))); - _ecId = _scId = 0; -} diff --git a/src/ubuntu/capture.h b/src/ubuntu/capture.h deleted file mode 100644 index 4806771a..00000000 --- a/src/ubuntu/capture.h +++ /dev/null @@ -1,84 +0,0 @@ -/* - * - * Copyright 2013 Canonical Ltd. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - * -*/ -#ifndef CAPTURE_H_ASCXZFG975 -#define CAPTURE_H_ASCXZFG975 - -#include -#include -#include -#include -#include - -class MediaCapture: public CPlugin { - Q_OBJECT -public: - explicit MediaCapture(Cordova *cordova); - - virtual const QString fullName() override { - return MediaCapture::fullID(); - } - - virtual const QString shortName() override { - return "Capture"; - } - - static const QString fullID() { - return "Capture"; - } - -public slots: - void captureAudio(int scId, int ecId, const QVariantMap &); - void captureImage(int scId, int ecId, const QVariantMap &); - void captureVideo(int scId, int ecId, const QVariantMap &); - - void recordAudio(); - void cancel(); - void onVideoRecordEnd(const QString &uri); - void onImageSaved(const QString &path); - - QString generateLocation(const QString &extension) { - int i = 1; - for (;;++i) { - QString path = QString("%1/.local/share/%2/persistent/%3.%4").arg(QDir::homePath()) - .arg(QCoreApplication::applicationName()).arg(i).arg(extension); - - if (!QFileInfo(path).exists()) - return path; - } - } -private slots: - void onAudioRecordError(QMediaRecorder::Error); -private: - QSharedPointer _recorder; - - int _scId, _ecId; - QList _files; - QVariantMap _options; - QMimeDatabase _db; - - enum CaptureError { - CAPTURE_INTERNAL_ERR = 0, - CAPTURE_APPLICATION_BUSY = 1, - CAPTURE_INVALID_ARGUMENT = 2, - CAPTURE_NO_MEDIA_FILES = 3, - CAPTURE_NOT_SUPPORTED = 20 - }; -}; - -#endif diff --git a/src/ubuntu/microphone.png b/src/ubuntu/microphone.png deleted file mode 100644 index 4f2a5cfd..00000000 Binary files a/src/ubuntu/microphone.png and /dev/null differ diff --git a/src/ubuntu/record_off.png b/src/ubuntu/record_off.png deleted file mode 100644 index adc822c7..00000000 Binary files a/src/ubuntu/record_off.png and /dev/null differ diff --git a/src/ubuntu/record_on.png b/src/ubuntu/record_on.png deleted file mode 100644 index 985658ab..00000000 Binary files a/src/ubuntu/record_on.png and /dev/null differ diff --git a/src/ubuntu/shoot.png b/src/ubuntu/shoot.png deleted file mode 100644 index c093b633..00000000 Binary files a/src/ubuntu/shoot.png and /dev/null differ diff --git a/src/ubuntu/toolbar-left.png b/src/ubuntu/toolbar-left.png deleted file mode 100644 index 720d7f60..00000000 Binary files a/src/ubuntu/toolbar-left.png and /dev/null differ diff --git a/src/ubuntu/toolbar-middle.png b/src/ubuntu/toolbar-middle.png deleted file mode 100644 index 77595bb1..00000000 Binary files a/src/ubuntu/toolbar-middle.png and /dev/null differ diff --git a/src/ubuntu/toolbar-right.png b/src/ubuntu/toolbar-right.png deleted file mode 100644 index e4e6aa60..00000000 Binary files a/src/ubuntu/toolbar-right.png and /dev/null differ diff --git a/src/windows/CaptureProxy.js b/src/windows/CaptureProxy.js index 3b9689e6..b881d665 100644 --- a/src/windows/CaptureProxy.js +++ b/src/windows/CaptureProxy.js @@ -17,9 +17,9 @@ * specific language governing permissions and limitations * under the License. * -*/ + */ -/* global Windows:true */ +/* global Windows */ var MediaFile = require('cordova-plugin-media-capture.MediaFile'); var CaptureError = require('cordova-plugin-media-capture.CaptureError'); @@ -30,27 +30,26 @@ var MediaFileData = require('cordova-plugin-media-capture.MediaFileData'); /* * Class that combines all logic for capturing picture and video on WP8.1 */ -function MediaCaptureProxy() { - - var previewContainer, - capturePreview = null, - captureCancelButton = null, - captureSettings = null, - captureStarted = false, - capturedPictureFile, - capturedVideoFile, - capture = null; +function MediaCaptureProxy () { + var previewContainer; + var capturePreview = null; + var captureCancelButton = null; // eslint-disable-line no-unused-vars + var captureSettings = null; + var captureStarted = false; + var capturedPictureFile; + var capturedVideoFile; + var capture = null; var CaptureNS = Windows.Media.Capture; /** * Helper function that toggles visibility of DOM elements with provided ids - * @param {String} variable number of elements' ids which visibility needs to be toggled + * @param {String} variable number of elements' ids which visibility needs to be toggled */ - function toggleElements() { + function toggleElements () { // convert arguments to array var args = Array.prototype.slice.call(arguments); - args.forEach(function(buttonId) { + args.forEach(function (buttonId) { var buttonEl = document.getElementById(buttonId); if (buttonEl) { var curDisplayStyle = buttonEl.style.display; @@ -63,19 +62,27 @@ function MediaCaptureProxy() { * Creates basic camera UI with preview 'video' element and 'Cancel' button * Capture starts, when you clicking on preview. */ - function createCameraUI() { - - var buttonStyle = "margin: 7px; border: 2.5px solid white; width: 45%; height: 35px; color: white; background-color: black;"; + function createCameraUI () { + var buttonStyle = 'margin: 7px; border: 2.5px solid white; width: 45%; height: 35px; color: white; background-color: black;'; previewContainer = document.createElement('div'); - previewContainer.style.cssText = "background-position: 50% 50%; background-repeat: no-repeat; background-size: contain; background-color: black; left: 0px; top: 0px; width: 100%; height: 100%; position: fixed; z-index: 9999"; + previewContainer.style.cssText = + 'background-position: 50% 50%; background-repeat: no-repeat; background-size: contain; background-color: black; left: 0px; top: 0px; width: 100%; height: 100%; position: fixed; z-index: 9999'; previewContainer.innerHTML = '' + '
' + - '' + - '' + - '' + - '' + + '' + + '' + + '' + + '' + '
'; document.body.appendChild(previewContainer); @@ -99,42 +106,47 @@ function MediaCaptureProxy() { * @param {function} selectCallback Callback for Select button * @param {function} retakeCallback Callback for Retake button */ - function startCameraPreview(takeCallback, errorCallback, selectCallback, retakeCallback) { + function startCameraPreview (takeCallback, errorCallback, selectCallback, retakeCallback) { // try to select appropriate device for capture // rear camera is preferred option var expectedPanel = Windows.Devices.Enumeration.Panel.back; - Windows.Devices.Enumeration.DeviceInformation.findAllAsync(Windows.Devices.Enumeration.DeviceClass.videoCapture).done(function (devices) { + Windows.Devices.Enumeration.DeviceInformation.findAllAsync(Windows.Devices.Enumeration.DeviceClass.videoCapture).done(function ( + devices + ) { if (devices.length > 0) { devices.forEach(function (currDev) { - if (currDev.enclosureLocation && currDev.enclosureLocation.panel && currDev.enclosureLocation.panel == expectedPanel) { + if (currDev.enclosureLocation && currDev.enclosureLocation.panel && currDev.enclosureLocation.panel === expectedPanel) { captureSettings.videoDeviceId = currDev.id; } }); - capture.initializeAsync(captureSettings).done(function () { - // This is necessary since WP8.1 MediaCapture outputs video stream rotated 90 degrees CCW - // TODO: This can be not consistent across devices, need additional testing on various devices - // msdn.microsoft.com/en-us/library/windows/apps/hh452807.aspx - capture.setPreviewRotation(Windows.Media.Capture.VideoRotation.clockwise90Degrees); - capturePreview.msZoom = true; - - capturePreview.src = URL.createObjectURL(capture); - capturePreview.play(); - - previewContainer.style.display = 'block'; - - // Bind events to controls - capturePreview.onclick = takeCallback; - document.getElementById('takePicture').onclick = takeCallback; - document.getElementById('cancelCapture').onclick = function () { - errorCallback(CaptureError.CAPTURE_NO_MEDIA_FILES); - }; - document.getElementById('selectPicture').onclick = selectCallback; - document.getElementById('retakePicture').onclick = retakeCallback; - }, function (err) { - destroyCameraPreview(); - errorCallback(CaptureError.CAPTURE_INTERNAL_ERR, err); - }); + capture.initializeAsync(captureSettings).done( + function () { + // This is necessary since WP8.1 MediaCapture outputs video stream rotated 90 degrees CCW + // TODO: This can be not consistent across devices, need additional testing on various devices + // msdn.microsoft.com/en-us/library/windows/apps/hh452807.aspx + capture.setPreviewRotation(Windows.Media.Capture.VideoRotation.clockwise90Degrees); + capturePreview.msZoom = true; + + capturePreview.src = URL.createObjectURL(capture); // eslint-disable-line no-undef + capturePreview.play(); + + previewContainer.style.display = 'block'; + + // Bind events to controls + capturePreview.onclick = takeCallback; + document.getElementById('takePicture').onclick = takeCallback; + document.getElementById('cancelCapture').onclick = function () { + errorCallback(CaptureError.CAPTURE_NO_MEDIA_FILES); + }; + document.getElementById('selectPicture').onclick = selectCallback; + document.getElementById('retakePicture').onclick = retakeCallback; + }, + function (err) { + destroyCameraPreview(); + errorCallback(CaptureError.CAPTURE_INTERNAL_ERR, err); + } + ); } else { // no appropriate devices found destroyCameraPreview(); @@ -146,7 +158,7 @@ function MediaCaptureProxy() { /** * Destroys camera preview, removes all elements created */ - function destroyCameraPreview() { + function destroyCameraPreview () { capturePreview.pause(); capturePreview.src = null; if (previewContainer) { @@ -175,22 +187,30 @@ function MediaCaptureProxy() { toggleElements('cancelCapture'); document.getElementById('takePicture').text = 'Stop'; - var encodingProperties = Windows.Media.MediaProperties.MediaEncodingProfile.createMp4(Windows.Media.MediaProperties.VideoEncodingQuality.auto), - generateUniqueCollisionOption = Windows.Storage.CreationCollisionOption.generateUniqueName, - localFolder = Windows.Storage.ApplicationData.current.localFolder; - - localFolder.createFileAsync("cameraCaptureVideo.mp4", generateUniqueCollisionOption).done(function(capturedFile) { - capture.startRecordToStorageFileAsync(encodingProperties, capturedFile).done(function() { - capturedVideoFile = capturedFile; - captureStarted = true; - }, function(err) { + var encodingProperties = Windows.Media.MediaProperties.MediaEncodingProfile.createMp4( + Windows.Media.MediaProperties.VideoEncodingQuality.auto + ); + var generateUniqueCollisionOption = Windows.Storage.CreationCollisionOption.generateUniqueName; + var localFolder = Windows.Storage.ApplicationData.current.localFolder; + + localFolder.createFileAsync('cameraCaptureVideo.mp4', generateUniqueCollisionOption).done( + function (capturedFile) { + capture.startRecordToStorageFileAsync(encodingProperties, capturedFile).done( + function () { + capturedVideoFile = capturedFile; + captureStarted = true; + }, + function (err) { + destroyCameraPreview(); + errorCallback(CaptureError.CAPTURE_INTERNAL_ERR, err); + } + ); + }, + function (err) { destroyCameraPreview(); errorCallback(CaptureError.CAPTURE_INTERNAL_ERR, err); - }); - }, function(err) { - destroyCameraPreview(); - errorCallback(CaptureError.CAPTURE_INTERNAL_ERR, err); - }); + } + ); } else { capture.stopRecordAsync().done(function () { destroyCameraPreview(); @@ -215,25 +235,31 @@ function MediaCaptureProxy() { startCameraPreview( // Callback for Take button - captures intermediate image file. function () { - var encodingProperties = Windows.Media.MediaProperties.ImageEncodingProperties.createJpeg(), - overwriteCollisionOption = Windows.Storage.CreationCollisionOption.replaceExisting, - tempFolder = Windows.Storage.ApplicationData.current.temporaryFolder; - - tempFolder.createFileAsync("cameraCaptureImage.jpg", overwriteCollisionOption).done(function (capturedFile) { - capture.capturePhotoToStorageFileAsync(encodingProperties, capturedFile).done(function () { - // store intermediate result in object's global variable - capturedPictureFile = capturedFile; - // show pre-captured image and toggle visibility of all buttons - previewContainer.style.backgroundImage = 'url("' + 'ms-appdata:///temp/' + capturedFile.name + '")'; - toggleElements('capturePreview', 'takePicture', 'cancelCapture', 'selectPicture', 'retakePicture'); - }, function (err) { + var encodingProperties = Windows.Media.MediaProperties.ImageEncodingProperties.createJpeg(); + var overwriteCollisionOption = Windows.Storage.CreationCollisionOption.replaceExisting; + var tempFolder = Windows.Storage.ApplicationData.current.temporaryFolder; + + tempFolder.createFileAsync('cameraCaptureImage.jpg', overwriteCollisionOption).done( + function (capturedFile) { + capture.capturePhotoToStorageFileAsync(encodingProperties, capturedFile).done( + function () { + // store intermediate result in object's global variable + capturedPictureFile = capturedFile; + // show pre-captured image and toggle visibility of all buttons + previewContainer.style.backgroundImage = 'url("' + 'ms-appdata:///temp/' + capturedFile.name + '")'; + toggleElements('capturePreview', 'takePicture', 'cancelCapture', 'selectPicture', 'retakePicture'); + }, + function (err) { + destroyCameraPreview(); + errorCallback(CaptureError.CAPTURE_INTERNAL_ERR, err); + } + ); + }, + function (err) { destroyCameraPreview(); errorCallback(CaptureError.CAPTURE_INTERNAL_ERR, err); - }); - }, function (err) { - destroyCameraPreview(); - errorCallback(CaptureError.CAPTURE_INTERNAL_ERR, err); - }); + } + ); }, // error + cancel callback function (err) { @@ -242,16 +268,19 @@ function MediaCaptureProxy() { }, // Callback for Select button - copies intermediate file into persistent application's storage function () { - var generateUniqueCollisionOption = Windows.Storage.CreationCollisionOption.generateUniqueName, - localFolder = Windows.Storage.ApplicationData.current.localFolder; + var generateUniqueCollisionOption = Windows.Storage.CreationCollisionOption.generateUniqueName; + var localFolder = Windows.Storage.ApplicationData.current.localFolder; - capturedPictureFile.copyAsync(localFolder, capturedPictureFile.name, generateUniqueCollisionOption).done(function (copiedFile) { - destroyCameraPreview(); - successCallback(copiedFile); - }, function(err) { - destroyCameraPreview(); - errorCallback(err); - }); + capturedPictureFile.copyAsync(localFolder, capturedPictureFile.name, generateUniqueCollisionOption).done( + function (copiedFile) { + destroyCameraPreview(); + successCallback(copiedFile); + }, + function (err) { + destroyCameraPreview(); + errorCallback(err); + } + ); }, // Callback for retake button - just toggles visibility of necessary elements function () { @@ -267,12 +296,11 @@ function MediaCaptureProxy() { } module.exports = { - - captureAudio:function(successCallback, errorCallback, args) { + captureAudio: function (successCallback, errorCallback, args) { var options = args[0]; var audioOptions = new CaptureAudioOptions(); - if (typeof(options.duration) == 'undefined') { + if (typeof options.duration === 'undefined') { audioOptions.duration = 3600; // Arbitrary amount, need to change later } else if (options.duration > 0) { audioOptions.duration = options.duration; @@ -282,68 +310,91 @@ module.exports = { } // Some shortcuts for long namespaces - var CaptureNS = Windows.Media.Capture, - MediaPropsNS = Windows.Media.MediaProperties, - localAppData = Windows.Storage.ApplicationData.current.localFolder, - generateUniqueName = Windows.Storage.NameCollisionOption.generateUniqueName; + var CaptureNS = Windows.Media.Capture; + var MediaPropsNS = Windows.Media.MediaProperties; + var localAppData = Windows.Storage.ApplicationData.current.localFolder; + var generateUniqueName = Windows.Storage.NameCollisionOption.generateUniqueName; - var mediaCapture = new CaptureNS.MediaCapture(), - mediaCaptureSettings = new CaptureNS.MediaCaptureInitializationSettings(), - mp3EncodingProfile = new MediaPropsNS.MediaEncodingProfile.createMp3(MediaPropsNS.AudioEncodingQuality.auto), - m4aEncodingProfile = new MediaPropsNS.MediaEncodingProfile.createM4a(MediaPropsNS.AudioEncodingQuality.auto); + var mediaCapture = new CaptureNS.MediaCapture(); + var mediaCaptureSettings = new CaptureNS.MediaCaptureInitializationSettings(); + var mp3EncodingProfile = new MediaPropsNS.MediaEncodingProfile.createMp3(MediaPropsNS.AudioEncodingQuality.auto); // eslint-disable-line new-cap + var m4aEncodingProfile = new MediaPropsNS.MediaEncodingProfile.createM4a(MediaPropsNS.AudioEncodingQuality.auto); // eslint-disable-line new-cap mediaCaptureSettings.streamingCaptureMode = CaptureNS.StreamingCaptureMode.audio; - var capturedFile, - stopRecordTimeout; + var capturedFile; + var stopRecordTimeout; var stopRecord = function () { - mediaCapture.stopRecordAsync().then(function() { - capturedFile.getBasicPropertiesAsync().then(function (basicProperties) { - var result = new MediaFile(capturedFile.name, 'ms-appdata:///local/' + capturedFile.name, capturedFile.contentType, basicProperties.dateModified, basicProperties.size); - result.fullPath = capturedFile.path; - successCallback([result]); - }, function() { + mediaCapture.stopRecordAsync().then( + function () { + capturedFile.getBasicPropertiesAsync().then( + function (basicProperties) { + var result = new MediaFile( + capturedFile.name, + 'ms-appdata:///local/' + capturedFile.name, + capturedFile.contentType, + basicProperties.dateModified, + basicProperties.size + ); + result.fullPath = capturedFile.path; + successCallback([result]); + }, + function () { + errorCallback(new CaptureError(CaptureError.CAPTURE_NO_MEDIA_FILES)); + } + ); + }, + function () { errorCallback(new CaptureError(CaptureError.CAPTURE_NO_MEDIA_FILES)); - }); - }, function() { errorCallback(new CaptureError(CaptureError.CAPTURE_NO_MEDIA_FILES)); }); + } + ); }; mediaCapture.initializeAsync(mediaCaptureSettings).done(function () { - localAppData.createFileAsync("captureAudio.mp3", generateUniqueName).then(function (storageFile) { - capturedFile = storageFile; - mediaCapture.startRecordToStorageFileAsync(mp3EncodingProfile, capturedFile).then(function () { - stopRecordTimeout = setTimeout(stopRecord, audioOptions.duration * 1000); - }, function (err) { - // -1072868846 is the error code for "No suitable transform was found to encode or decode the content." - // so we try to use another (m4a) format - if (err.number === -1072868846) { - // first we clear existing timeout to prevent success callback to be called with invalid arguments - // second we start same actions to try to record m4a audio - clearTimeout(stopRecordTimeout); - localAppData.createFileAsync("captureAudio.m4a", generateUniqueName).then(function (storageFile) { - capturedFile = storageFile; - mediaCapture.startRecordToStorageFileAsync(m4aEncodingProfile, capturedFile).then(function () { - stopRecordTimeout = setTimeout(stopRecord, audioOptions.duration * 1000); - }, function() { - // if we here, we're totally failed to record either mp3 or m4a + localAppData.createFileAsync('captureAudio.mp3', generateUniqueName).then( + function (storageFile) { + capturedFile = storageFile; + mediaCapture.startRecordToStorageFileAsync(mp3EncodingProfile, capturedFile).then( + function () { + stopRecordTimeout = setTimeout(stopRecord, audioOptions.duration * 1000); + }, + function (err) { + // -1072868846 is the error code for "No suitable transform was found to encode or decode the content." + // so we try to use another (m4a) format + if (err.number === -1072868846) { + // first we clear existing timeout to prevent success callback to be called with invalid arguments + // second we start same actions to try to record m4a audio + clearTimeout(stopRecordTimeout); + localAppData.createFileAsync('captureAudio.m4a', generateUniqueName).then(function (storageFile) { + capturedFile = storageFile; + mediaCapture.startRecordToStorageFileAsync(m4aEncodingProfile, capturedFile).then( + function () { + stopRecordTimeout = setTimeout(stopRecord, audioOptions.duration * 1000); + }, + function () { + // if we here, we're totally failed to record either mp3 or m4a + errorCallback(new CaptureError(CaptureError.CAPTURE_INTERNAL_ERR)); + } + ); + }); + } else { errorCallback(new CaptureError(CaptureError.CAPTURE_INTERNAL_ERR)); - return; - }); - }); - } else { - errorCallback(new CaptureError(CaptureError.CAPTURE_INTERNAL_ERR)); - return; - } - }); - }, function () { errorCallback(new CaptureError(CaptureError.CAPTURE_NO_MEDIA_FILES)); }); + } + } + ); + }, + function () { + errorCallback(new CaptureError(CaptureError.CAPTURE_NO_MEDIA_FILES)); + } + ); }); }, - captureImage:function (successCallback, errorCallback, args) { + captureImage: function (successCallback, errorCallback, args) { var CaptureNS = Windows.Media.Capture; - function fail(code, data) { + function fail (code, data) { var err = new CaptureError(code); err.message = data; errorCallback(err); @@ -356,50 +407,80 @@ module.exports = { var proxy = new MediaCaptureProxy(); - proxy.capturePhoto(function (photoFile) { - photoFile.getBasicPropertiesAsync().done(function (basicProperties) { - var result = new MediaFile(photoFile.name, 'ms-appdata:///local/' + photoFile.name, photoFile.contentType, basicProperties.dateModified, basicProperties.size); - result.fullPath = photoFile.path; - successCallback([result]); - }, function (err) { - fail(CaptureError.CAPTURE_INTERNAL_ERR, err); - }); - }, function (err) { - fail(err); - }); - + proxy.capturePhoto( + function (photoFile) { + photoFile.getBasicPropertiesAsync().done( + function (basicProperties) { + var result = new MediaFile( + photoFile.name, + 'ms-appdata:///local/' + photoFile.name, + photoFile.contentType, + basicProperties.dateModified, + basicProperties.size + ); + result.fullPath = photoFile.path; + successCallback([result]); + }, + function (err) { + fail(CaptureError.CAPTURE_INTERNAL_ERR, err); + } + ); + }, + function (err) { + fail(err); + } + ); } else { var cameraCaptureUI = new Windows.Media.Capture.CameraCaptureUI(); cameraCaptureUI.photoSettings.allowCropping = true; cameraCaptureUI.photoSettings.maxResolution = Windows.Media.Capture.CameraCaptureUIMaxPhotoResolution.highestAvailable; cameraCaptureUI.photoSettings.format = Windows.Media.Capture.CameraCaptureUIPhotoFormat.jpeg; - cameraCaptureUI.captureFileAsync(Windows.Media.Capture.CameraCaptureUIMode.photo).done(function (file) { - if (file) { - file.moveAsync(Windows.Storage.ApplicationData.current.localFolder, "cameraCaptureImage.jpg", Windows.Storage.NameCollisionOption.generateUniqueName).then(function () { - file.getBasicPropertiesAsync().then(function (basicProperties) { - var result = new MediaFile(file.name, 'ms-appdata:///local/' + file.name, file.contentType, basicProperties.dateModified, basicProperties.size); - result.fullPath = file.path; - successCallback([result]); - }, function () { - errorCallback(new CaptureError(CaptureError.CAPTURE_NO_MEDIA_FILES)); - }); - }, function () { + cameraCaptureUI.captureFileAsync(Windows.Media.Capture.CameraCaptureUIMode.photo).done( + function (file) { + if (file) { + file.moveAsync( + Windows.Storage.ApplicationData.current.localFolder, + 'cameraCaptureImage.jpg', + Windows.Storage.NameCollisionOption.generateUniqueName + ).then( + function () { + file.getBasicPropertiesAsync().then( + function (basicProperties) { + var result = new MediaFile( + file.name, + 'ms-appdata:///local/' + file.name, + file.contentType, + basicProperties.dateModified, + basicProperties.size + ); + result.fullPath = file.path; + successCallback([result]); + }, + function () { + errorCallback(new CaptureError(CaptureError.CAPTURE_NO_MEDIA_FILES)); + } + ); + }, + function () { + errorCallback(new CaptureError(CaptureError.CAPTURE_NO_MEDIA_FILES)); + } + ); + } else { errorCallback(new CaptureError(CaptureError.CAPTURE_NO_MEDIA_FILES)); - }); - } else { + } + }, + function () { errorCallback(new CaptureError(CaptureError.CAPTURE_NO_MEDIA_FILES)); } - }, function () { - errorCallback(new CaptureError(CaptureError.CAPTURE_NO_MEDIA_FILES)); - }); + ); } }, - captureVideo:function (successCallback, errorCallback, args) { + captureVideo: function (successCallback, errorCallback, args) { var options = args[0]; var CaptureNS = Windows.Media.Capture; - function fail(code, data) { + function fail (code, data) { var err = new CaptureError(code); err.message = data; errorCallback(err); @@ -413,17 +494,24 @@ module.exports = { var proxy = new MediaCaptureProxy(); proxy.captureVideo(function (videoFile) { - videoFile.getBasicPropertiesAsync().done(function (basicProperties) { - var result = new MediaFile(videoFile.name, 'ms-appdata:///local/' + videoFile.name, videoFile.contentType, basicProperties.dateModified, basicProperties.size); - result.fullPath = videoFile.path; - successCallback([result]); - }, function (err) { - fail(CaptureError.CAPTURE_INTERNAL_ERR, err); - }); + videoFile.getBasicPropertiesAsync().done( + function (basicProperties) { + var result = new MediaFile( + videoFile.name, + 'ms-appdata:///local/' + videoFile.name, + videoFile.contentType, + basicProperties.dateModified, + basicProperties.size + ); + result.fullPath = videoFile.path; + successCallback([result]); + }, + function (err) { + fail(CaptureError.CAPTURE_INTERNAL_ERR, err); + } + ); }, fail); - } else { - var videoOptions = new CaptureVideoOptions(); if (options.duration && options.duration > 0) { videoOptions.duration = options.duration; @@ -435,57 +523,95 @@ module.exports = { cameraCaptureUI.videoSettings.allowTrimming = true; cameraCaptureUI.videoSettings.format = Windows.Media.Capture.CameraCaptureUIVideoFormat.mp4; cameraCaptureUI.videoSettings.maxDurationInSeconds = videoOptions.duration; - cameraCaptureUI.captureFileAsync(Windows.Media.Capture.CameraCaptureUIMode.video).then(function(file) { - if (file) { - file.moveAsync(Windows.Storage.ApplicationData.current.localFolder, "cameraCaptureVideo.mp4", Windows.Storage.NameCollisionOption.generateUniqueName).then(function () { - file.getBasicPropertiesAsync().then(function(basicProperties) { - var result = new MediaFile(file.name, 'ms-appdata:///local/' + file.name, file.contentType, basicProperties.dateModified, basicProperties.size); - result.fullPath = file.path; - successCallback([result]); - }, function() { - errorCallback(new CaptureError(CaptureError.CAPTURE_NO_MEDIA_FILES)); - }); - }, function() { + cameraCaptureUI.captureFileAsync(Windows.Media.Capture.CameraCaptureUIMode.video).then( + function (file) { + if (file) { + file.moveAsync( + Windows.Storage.ApplicationData.current.localFolder, + 'cameraCaptureVideo.mp4', + Windows.Storage.NameCollisionOption.generateUniqueName + ).then( + function () { + file.getBasicPropertiesAsync().then( + function (basicProperties) { + var result = new MediaFile( + file.name, + 'ms-appdata:///local/' + file.name, + file.contentType, + basicProperties.dateModified, + basicProperties.size + ); + result.fullPath = file.path; + successCallback([result]); + }, + function () { + errorCallback(new CaptureError(CaptureError.CAPTURE_NO_MEDIA_FILES)); + } + ); + }, + function () { + errorCallback(new CaptureError(CaptureError.CAPTURE_NO_MEDIA_FILES)); + } + ); + } else { errorCallback(new CaptureError(CaptureError.CAPTURE_NO_MEDIA_FILES)); - }); - } else { + } + }, + function () { errorCallback(new CaptureError(CaptureError.CAPTURE_NO_MEDIA_FILES)); } - }, function() { errorCallback(new CaptureError(CaptureError.CAPTURE_NO_MEDIA_FILES)); }); + ); } }, getFormatData: function (successCallback, errorCallback, args) { Windows.Storage.StorageFile.getFileFromPathAsync(args[0]).then( function (storageFile) { - var mediaTypeFlag = String(storageFile.contentType).split("/")[0].toLowerCase(); - if (mediaTypeFlag === "audio") { - storageFile.properties.getMusicPropertiesAsync().then(function (audioProperties) { - successCallback(new MediaFileData(null, audioProperties.bitrate, 0, 0, audioProperties.duration / 1000)); - }, function () { - errorCallback(new CaptureError(CaptureError.CAPTURE_INVALID_ARGUMENT)); - }); - } - else if (mediaTypeFlag === "video") { - storageFile.properties.getVideoPropertiesAsync().then(function (videoProperties) { - successCallback(new MediaFileData(null, videoProperties.bitrate, videoProperties.height, videoProperties.width, videoProperties.duration / 1000)); - }, function () { - errorCallback(new CaptureError(CaptureError.CAPTURE_INVALID_ARGUMENT)); - }); - } - else if (mediaTypeFlag === "image") { - storageFile.properties.getImagePropertiesAsync().then(function (imageProperties) { - successCallback(new MediaFileData(null, 0, imageProperties.height, imageProperties.width, 0)); - }, function () { - errorCallback(new CaptureError(CaptureError.CAPTURE_INVALID_ARGUMENT)); - }); + var mediaTypeFlag = String(storageFile.contentType).split('/')[0].toLowerCase(); + if (mediaTypeFlag === 'audio') { + storageFile.properties.getMusicPropertiesAsync().then( + function (audioProperties) { + successCallback(new MediaFileData(null, audioProperties.bitrate, 0, 0, audioProperties.duration / 1000)); + }, + function () { + errorCallback(new CaptureError(CaptureError.CAPTURE_INVALID_ARGUMENT)); + } + ); + } else if (mediaTypeFlag === 'video') { + storageFile.properties.getVideoPropertiesAsync().then( + function (videoProperties) { + successCallback( + new MediaFileData( + null, + videoProperties.bitrate, + videoProperties.height, + videoProperties.width, + videoProperties.duration / 1000 + ) + ); + }, + function () { + errorCallback(new CaptureError(CaptureError.CAPTURE_INVALID_ARGUMENT)); + } + ); + } else if (mediaTypeFlag === 'image') { + storageFile.properties.getImagePropertiesAsync().then( + function (imageProperties) { + successCallback(new MediaFileData(null, 0, imageProperties.height, imageProperties.width, 0)); + }, + function () { + errorCallback(new CaptureError(CaptureError.CAPTURE_INVALID_ARGUMENT)); + } + ); + } else { + errorCallback(new CaptureError(CaptureError.CAPTURE_INVALID_ARGUMENT)); } - else { errorCallback(new CaptureError(CaptureError.CAPTURE_INVALID_ARGUMENT)); } - }, function () { + }, + function () { errorCallback(new CaptureError(CaptureError.CAPTURE_INVALID_ARGUMENT)); } ); } }; -require("cordova/exec/proxy").add("Capture",module.exports); +require('cordova/exec/proxy').add('Capture', module.exports); diff --git a/src/windows/MediaFile.js b/src/windows/MediaFile.js index a8b0bc3b..e57d14c8 100644 --- a/src/windows/MediaFile.js +++ b/src/windows/MediaFile.js @@ -17,47 +17,58 @@ * specific language governing permissions and limitations * under the License. * -*/ + */ -/*global Windows:true */ +/* global Windows */ var MediaFileData = require('cordova-plugin-media-capture.MediaFileData'); var CaptureError = require('cordova-plugin-media-capture.CaptureError'); module.exports = { - getFormatData: function (successCallback, errorCallback, args) { Windows.Storage.StorageFile.getFileFromPathAsync(this.fullPath).then( function (storageFile) { - var mediaTypeFlag = String(storageFile.contentType).split("/")[0].toLowerCase(); - if (mediaTypeFlag === "audio") { + var mediaTypeFlag = String(storageFile.contentType).split('/')[0].toLowerCase(); + if (mediaTypeFlag === 'audio') { storageFile.properties.getMusicPropertiesAsync().then( function (audioProperties) { successCallback(new MediaFileData(null, audioProperties.bitrate, 0, 0, audioProperties.duration / 1000)); - }, function () { + }, + function () { errorCallback(new CaptureError(CaptureError.CAPTURE_INVALID_ARGUMENT)); } ); - } else if (mediaTypeFlag === "video") { + } else if (mediaTypeFlag === 'video') { storageFile.properties.getVideoPropertiesAsync().then( function (videoProperties) { - successCallback(new MediaFileData(null, videoProperties.bitrate, videoProperties.height, videoProperties.width, videoProperties.duration / 1000)); - }, function () { + successCallback( + new MediaFileData( + null, + videoProperties.bitrate, + videoProperties.height, + videoProperties.width, + videoProperties.duration / 1000 + ) + ); + }, + function () { errorCallback(new CaptureError(CaptureError.CAPTURE_INVALID_ARGUMENT)); } ); - } else if (mediaTypeFlag === "image") { + } else if (mediaTypeFlag === 'image') { storageFile.properties.getImagePropertiesAsync().then( function (imageProperties) { successCallback(new MediaFileData(null, 0, imageProperties.height, imageProperties.width, 0)); - }, function () { + }, + function () { errorCallback(new CaptureError(CaptureError.CAPTURE_INVALID_ARGUMENT)); } ); } else { errorCallback(new CaptureError(CaptureError.CAPTURE_INVALID_ARGUMENT)); } - }, function () { + }, + function () { errorCallback(new CaptureError(CaptureError.CAPTURE_INVALID_ARGUMENT)); } ); diff --git a/src/wp/Capture.cs b/src/wp/Capture.cs deleted file mode 100644 index 1f5a3272..00000000 --- a/src/wp/Capture.cs +++ /dev/null @@ -1,736 +0,0 @@ -/* - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. -*/ - -using System; -using System.Collections.Generic; -using System.IO; -using System.IO.IsolatedStorage; -using System.Runtime.Serialization; -using System.Windows.Media.Imaging; -using Microsoft.Phone; -using Microsoft.Phone.Tasks; -using Microsoft.Xna.Framework.Media; -using WPCordovaClassLib.Cordova.UI; -using AudioResult = WPCordovaClassLib.Cordova.UI.AudioCaptureTask.AudioResult; -using VideoResult = WPCordovaClassLib.Cordova.UI.VideoCaptureTask.VideoResult; -using System.Windows; -using System.Diagnostics; -using Microsoft.Phone.Controls; - -namespace WPCordovaClassLib.Cordova.Commands -{ - /// - /// Provides access to the audio, image, and video capture capabilities of the device - /// - public class Capture : BaseCommand - { - #region Internal classes (options and resultant objects) - - /// - /// Represents captureImage action options. - /// - [DataContract] - public class CaptureImageOptions - { - /// - /// The maximum number of images the device user can capture in a single capture operation. The value must be greater than or equal to 1 (defaults to 1). - /// - [DataMember(IsRequired = false, Name = "limit")] - public int Limit { get; set; } - - public static CaptureImageOptions Default - { - get { return new CaptureImageOptions() { Limit = 1 }; } - } - } - - /// - /// Represents captureAudio action options. - /// - [DataContract] - public class CaptureAudioOptions - { - /// - /// The maximum number of audio files the device user can capture in a single capture operation. The value must be greater than or equal to 1 (defaults to 1). - /// - [DataMember(IsRequired = false, Name = "limit")] - public int Limit { get; set; } - - public static CaptureAudioOptions Default - { - get { return new CaptureAudioOptions() { Limit = 1 }; } - } - } - - /// - /// Represents captureVideo action options. - /// - [DataContract] - public class CaptureVideoOptions - { - /// - /// The maximum number of video files the device user can capture in a single capture operation. The value must be greater than or equal to 1 (defaults to 1). - /// - [DataMember(IsRequired = false, Name = "limit")] - public int Limit { get; set; } - - public static CaptureVideoOptions Default - { - get { return new CaptureVideoOptions() { Limit = 1 }; } - } - } - - /// - /// Represents getFormatData action options. - /// - [DataContract] - public class MediaFormatOptions - { - /// - /// File path - /// - [DataMember(IsRequired = true, Name = "fullPath")] - public string FullPath { get; set; } - - /// - /// File mime type - /// - [DataMember(Name = "type")] - public string Type { get; set; } - - } - - /// - /// Stores image info - /// - [DataContract] - public class MediaFile - { - - [DataMember(Name = "name")] - public string FileName { get; set; } - - [DataMember(Name = "fullPath")] - public string FilePath { get; set; } - - [DataMember(Name = "type")] - public string Type { get; set; } - - [DataMember(Name = "lastModifiedDate")] - public string LastModifiedDate { get; set; } - - [DataMember(Name = "size")] - public long Size { get; set; } - - public MediaFile(string filePath, Picture image) - { - this.FilePath = filePath; - this.FileName = System.IO.Path.GetFileName(this.FilePath); - this.Type = MimeTypeMapper.GetMimeType(FileName); - this.Size = image.GetImage().Length; - - using (IsolatedStorageFile storage = IsolatedStorageFile.GetUserStoreForApplication()) - { - this.LastModifiedDate = storage.GetLastWriteTime(filePath).DateTime.ToString(); - } - - } - - public MediaFile(string filePath, Stream stream) - { - this.FilePath = filePath; - this.FileName = System.IO.Path.GetFileName(this.FilePath); - this.Type = MimeTypeMapper.GetMimeType(FileName); - this.Size = stream.Length; - - using (IsolatedStorageFile storage = IsolatedStorageFile.GetUserStoreForApplication()) - { - this.LastModifiedDate = storage.GetLastWriteTime(filePath).DateTime.ToString(); - } - } - } - - /// - /// Stores additional media file data - /// - [DataContract] - public class MediaFileData - { - [DataMember(Name = "height")] - public int Height { get; set; } - - [DataMember(Name = "width")] - public int Width { get; set; } - - [DataMember(Name = "bitrate")] - public int Bitrate { get; set; } - - [DataMember(Name = "duration")] - public int Duration { get; set; } - - [DataMember(Name = "codecs")] - public string Codecs { get; set; } - - public MediaFileData(WriteableBitmap image) - { - this.Height = image.PixelHeight; - this.Width = image.PixelWidth; - this.Bitrate = 0; - this.Duration = 0; - this.Codecs = ""; - } - } - - #endregion - - /// - /// Folder to store captured images - /// - private string isoFolder = "CapturedImagesCache"; - - /// - /// Capture Image options - /// - protected CaptureImageOptions captureImageOptions; - - /// - /// Capture Audio options - /// - protected CaptureAudioOptions captureAudioOptions; - - /// - /// Capture Video options - /// - protected CaptureVideoOptions captureVideoOptions; - - /// - /// Used to open camera application - /// - private CameraCaptureTask cameraTask; - - /// - /// Used for audio recording - /// - private AudioCaptureTask audioCaptureTask; - - /// - /// Used for video recording - /// - private VideoCaptureTask videoCaptureTask; - - /// - /// Stores information about captured files - /// - List files = new List(); - - /// - /// Launches default camera application to capture image - /// - /// may contains limit or mode parameters - public void captureImage(string options) - { - try - { - try - { - - string args = JSON.JsonHelper.Deserialize(options)[0]; - this.captureImageOptions = String.IsNullOrEmpty(args) ? CaptureImageOptions.Default : JSON.JsonHelper.Deserialize(args); - - } - catch (Exception ex) - { - this.DispatchCommandResult(new PluginResult(PluginResult.Status.JSON_EXCEPTION, ex.Message)); - return; - } - - - cameraTask = new CameraCaptureTask(); - cameraTask.Completed += this.cameraTask_Completed; - cameraTask.Show(); - } - catch (Exception e) - { - DispatchCommandResult(new PluginResult(PluginResult.Status.ERROR, e.Message)); - } - } - - /// - /// Launches our own audio recording control to capture audio - /// - /// may contains additional parameters - public void captureAudio(string options) - { - try - { - try - { - string args = JSON.JsonHelper.Deserialize(options)[0]; - this.captureAudioOptions = String.IsNullOrEmpty(args) ? CaptureAudioOptions.Default : JSON.JsonHelper.Deserialize(args); - - } - catch (Exception ex) - { - this.DispatchCommandResult(new PluginResult(PluginResult.Status.JSON_EXCEPTION, ex.Message)); - return; - } - - audioCaptureTask = new AudioCaptureTask(); - audioCaptureTask.Completed += audioRecordingTask_Completed; - audioCaptureTask.Show(); - - } - catch (Exception e) - { - DispatchCommandResult(new PluginResult(PluginResult.Status.ERROR, e.Message)); - } - } - - /// - /// Launches our own video recording control to capture video - /// - /// may contains additional parameters - public void captureVideo(string options) - { - try - { - try - { - string args = JSON.JsonHelper.Deserialize(options)[0]; - this.captureVideoOptions = String.IsNullOrEmpty(args) ? CaptureVideoOptions.Default : JSON.JsonHelper.Deserialize(args); - - } - catch (Exception ex) - { - this.DispatchCommandResult(new PluginResult(PluginResult.Status.JSON_EXCEPTION, ex.Message)); - return; - } - - videoCaptureTask = new VideoCaptureTask(); - videoCaptureTask.Completed += videoRecordingTask_Completed; - videoCaptureTask.Show(); - - } - catch (Exception e) - { - DispatchCommandResult(new PluginResult(PluginResult.Status.ERROR, e.Message)); - } - } - - /// - /// Retrieves the format information of the media file. - /// - /// - public void getFormatData(string options) - { - try - { - MediaFormatOptions mediaFormatOptions; - try - { - mediaFormatOptions = new MediaFormatOptions(); - string[] optionStrings = JSON.JsonHelper.Deserialize(options); - mediaFormatOptions.FullPath = optionStrings[0]; - mediaFormatOptions.Type = optionStrings[1]; - } - catch (Exception ex) - { - this.DispatchCommandResult(new PluginResult(PluginResult.Status.JSON_EXCEPTION, ex.Message)); - return; - } - - if (string.IsNullOrEmpty(mediaFormatOptions.FullPath)) - { - DispatchCommandResult(new PluginResult(PluginResult.Status.JSON_EXCEPTION)); - } - - string mimeType = mediaFormatOptions.Type; - - if (string.IsNullOrEmpty(mimeType)) - { - mimeType = MimeTypeMapper.GetMimeType(mediaFormatOptions.FullPath); - } - - if (mimeType.Equals("image/jpeg")) - { - Deployment.Current.Dispatcher.BeginInvoke(() => - { - WriteableBitmap image = ExtractImageFromLocalStorage(mediaFormatOptions.FullPath); - - if (image == null) - { - DispatchCommandResult(new PluginResult(PluginResult.Status.ERROR, "File not found")); - return; - } - - MediaFileData mediaData = new MediaFileData(image); - DispatchCommandResult(new PluginResult(PluginResult.Status.OK, mediaData)); - }); - } - else - { - DispatchCommandResult(new PluginResult(PluginResult.Status.ERROR)); - } - } - catch (Exception) - { - DispatchCommandResult(new PluginResult(PluginResult.Status.ERROR)); - } - } - - /// - /// Opens specified file in media player - /// - /// MediaFile to play - public void play(string options) - { - try - { - MediaFile file; - - try - { - file = String.IsNullOrEmpty(options) ? null : JSON.JsonHelper.Deserialize(options)[0]; - - } - catch (Exception ex) - { - this.DispatchCommandResult(new PluginResult(PluginResult.Status.JSON_EXCEPTION, ex.Message)); - return; - } - - if (file == null || String.IsNullOrEmpty(file.FilePath)) - { - DispatchCommandResult(new PluginResult(PluginResult.Status.ERROR, "File path is missing")); - return; - } - - // if url starts with '/' media player throws FileNotFound exception - Uri fileUri = new Uri(file.FilePath.TrimStart(new char[] { '/', '\\' }), UriKind.Relative); - - MediaPlayerLauncher player = new MediaPlayerLauncher(); - player.Media = fileUri; - player.Location = MediaLocationType.Data; - player.Show(); - - this.DispatchCommandResult(new PluginResult(PluginResult.Status.OK)); - - } - catch (Exception e) - { - DispatchCommandResult(new PluginResult(PluginResult.Status.ERROR, e.Message)); - } - } - - - /// - /// Handles result of capture to save image information - /// - /// - /// stores information about current captured image - private void cameraTask_Completed(object sender, PhotoResult e) - { - - if (e.Error != null) - { - DispatchCommandResult(new PluginResult(PluginResult.Status.ERROR)); - return; - } - - switch (e.TaskResult) - { - case TaskResult.OK: - try - { - string fileName = System.IO.Path.GetFileName(e.OriginalFileName); - - // Save image in media library - MediaLibrary library = new MediaLibrary(); - Picture image = library.SavePicture(fileName, e.ChosenPhoto); - - int orient = ImageExifHelper.getImageOrientationFromStream(e.ChosenPhoto); - int newAngle = 0; - switch (orient) - { - case ImageExifOrientation.LandscapeLeft: - newAngle = 90; - break; - case ImageExifOrientation.PortraitUpsideDown: - newAngle = 180; - break; - case ImageExifOrientation.LandscapeRight: - newAngle = 270; - break; - case ImageExifOrientation.Portrait: - default: break; // 0 default already set - } - - Stream rotImageStream = ImageExifHelper.RotateStream(e.ChosenPhoto, newAngle); - - // Save image in isolated storage - - // we should return stream position back after saving stream to media library - rotImageStream.Seek(0, SeekOrigin.Begin); - - byte[] imageBytes = new byte[rotImageStream.Length]; - rotImageStream.Read(imageBytes, 0, imageBytes.Length); - rotImageStream.Dispose(); - string pathLocalStorage = this.SaveImageToLocalStorage(fileName, isoFolder, imageBytes); - imageBytes = null; - // Get image data - MediaFile data = new MediaFile(pathLocalStorage, image); - - this.files.Add(data); - - if (files.Count < this.captureImageOptions.Limit) - { - cameraTask.Show(); - } - else - { - DispatchCommandResult(new PluginResult(PluginResult.Status.OK, files)); - files.Clear(); - } - } - catch (Exception) - { - DispatchCommandResult(new PluginResult(PluginResult.Status.ERROR, "Error capturing image.")); - } - break; - - case TaskResult.Cancel: - if (files.Count > 0) - { - // User canceled operation, but some images were made - DispatchCommandResult(new PluginResult(PluginResult.Status.OK, files)); - files.Clear(); - } - else - { - DispatchCommandResult(new PluginResult(PluginResult.Status.ERROR, "Canceled.")); - } - break; - - default: - if (files.Count > 0) - { - DispatchCommandResult(new PluginResult(PluginResult.Status.OK, files)); - files.Clear(); - } - else - { - DispatchCommandResult(new PluginResult(PluginResult.Status.ERROR, "Did not complete!")); - } - break; - } - } - - /// - /// Handles result of audio recording tasks - /// - /// - /// stores information about current captured audio - private void audioRecordingTask_Completed(object sender, AudioResult e) - { - - if (e.Error != null) - { - DispatchCommandResult(new PluginResult(PluginResult.Status.ERROR)); - return; - } - - switch (e.TaskResult) - { - case TaskResult.OK: - try - { - // Get image data - MediaFile data = new MediaFile(e.AudioFileName, e.AudioFile); - - this.files.Add(data); - - if (files.Count < this.captureAudioOptions.Limit) - { - audioCaptureTask.Show(); - } - else - { - DispatchCommandResult(new PluginResult(PluginResult.Status.OK, files)); - files.Clear(); - } - } - catch (Exception) - { - DispatchCommandResult(new PluginResult(PluginResult.Status.ERROR, "Error capturing audio.")); - } - break; - - case TaskResult.Cancel: - if (files.Count > 0) - { - // User canceled operation, but some audio clips were made - DispatchCommandResult(new PluginResult(PluginResult.Status.OK, files)); - files.Clear(); - } - else - { - DispatchCommandResult(new PluginResult(PluginResult.Status.ERROR, "Canceled.")); - } - break; - - default: - if (files.Count > 0) - { - DispatchCommandResult(new PluginResult(PluginResult.Status.OK, files)); - files.Clear(); - } - else - { - DispatchCommandResult(new PluginResult(PluginResult.Status.ERROR, "Did not complete!")); - } - break; - } - } - - /// - /// Handles result of video recording tasks - /// - /// - /// stores information about current captured video - private void videoRecordingTask_Completed(object sender, VideoResult e) - { - - if (e.Error != null) - { - DispatchCommandResult(new PluginResult(PluginResult.Status.ERROR)); - return; - } - - switch (e.TaskResult) - { - case TaskResult.OK: - try - { - // Get image data - MediaFile data = new MediaFile(e.VideoFileName, e.VideoFile); - - this.files.Add(data); - - if (files.Count < this.captureVideoOptions.Limit) - { - videoCaptureTask.Show(); - } - else - { - DispatchCommandResult(new PluginResult(PluginResult.Status.OK, files)); - files.Clear(); - } - } - catch (Exception) - { - DispatchCommandResult(new PluginResult(PluginResult.Status.ERROR, "Error capturing video.")); - } - break; - - case TaskResult.Cancel: - if (files.Count > 0) - { - // User canceled operation, but some video clips were made - DispatchCommandResult(new PluginResult(PluginResult.Status.OK, files)); - files.Clear(); - } - else - { - DispatchCommandResult(new PluginResult(PluginResult.Status.ERROR, "Canceled.")); - } - break; - - default: - if (files.Count > 0) - { - DispatchCommandResult(new PluginResult(PluginResult.Status.OK, files)); - files.Clear(); - } - else - { - DispatchCommandResult(new PluginResult(PluginResult.Status.ERROR, "Did not complete!")); - } - break; - } - } - - /// - /// Extract file from Isolated Storage as WriteableBitmap object - /// - /// - /// - private WriteableBitmap ExtractImageFromLocalStorage(string filePath) - { - try - { - - var isoFile = IsolatedStorageFile.GetUserStoreForApplication(); - - using (var imageStream = isoFile.OpenFile(filePath, FileMode.Open, FileAccess.Read)) - { - var imageSource = PictureDecoder.DecodeJpeg(imageStream); - return imageSource; - } - } - catch (Exception) - { - return null; - } - } - - - /// - /// Saves captured image in isolated storage - /// - /// image file name - /// folder to store images - /// Image path - private string SaveImageToLocalStorage(string imageFileName, string imageFolder, byte[] imageBytes) - { - if (imageBytes == null) - { - throw new ArgumentNullException("imageBytes"); - } - try - { - var isoFile = IsolatedStorageFile.GetUserStoreForApplication(); - - if (!isoFile.DirectoryExists(imageFolder)) - { - isoFile.CreateDirectory(imageFolder); - } - string filePath = System.IO.Path.Combine("/" + imageFolder + "/", imageFileName); - - using (IsolatedStorageFileStream stream = isoFile.CreateFile(filePath)) - { - stream.Write(imageBytes, 0, imageBytes.Length); - } - - return filePath; - } - catch (Exception) - { - //TODO: log or do something else - throw; - } - } - - - } -} diff --git a/src/wp/UI/AudioCaptureTask.cs b/src/wp/UI/AudioCaptureTask.cs deleted file mode 100644 index 9049e2ec..00000000 --- a/src/wp/UI/AudioCaptureTask.cs +++ /dev/null @@ -1,107 +0,0 @@ -/* - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. -*/ - -using System; -using System.IO; -using System.Windows; -using Microsoft.Phone.Controls; -using Microsoft.Phone.Tasks; - -namespace WPCordovaClassLib.Cordova.UI -{ - /// - /// Allows an application to launch the Audio Recording application. - /// Use this to allow users to record audio from your application. - /// - public class AudioCaptureTask - { - /// - /// Represents recorded audio returned from a call to the Show method of - /// a WPCordovaClassLib.Cordova.Controls.AudioCaptureTask object - /// - public class AudioResult : TaskEventArgs - { - /// - /// Initializes a new instance of the AudioResult class. - /// - public AudioResult() - { } - - /// - /// Initializes a new instance of the AudioResult class - /// with the specified Microsoft.Phone.Tasks.TaskResult. - /// - /// Associated Microsoft.Phone.Tasks.TaskResult - public AudioResult(TaskResult taskResult) - : base(taskResult) - { } - - /// - /// Gets the file name of the recorded audio. - /// - public Stream AudioFile { get; internal set; } - - /// - /// Gets the stream containing the data for the recorded audio. - /// - public string AudioFileName { get; internal set; } - } - - /// - /// Occurs when a audio recording task is completed. - /// - public event EventHandler Completed; - - /// - /// Shows Audio Recording application - /// - public void Show() - { - Deployment.Current.Dispatcher.BeginInvoke(() => - { - var root = Application.Current.RootVisual as PhoneApplicationFrame; - - root.Navigated += new System.Windows.Navigation.NavigatedEventHandler(NavigationService_Navigated); - - string baseUrl = "/"; - // dummy parameter is used to always open a fresh version - root.Navigate(new System.Uri(baseUrl + "Plugins/cordova-plugin-media-capture/AudioRecorder.xaml?dummy=" + Guid.NewGuid().ToString(), UriKind.Relative)); - - }); - } - - /// - /// Performs additional configuration of the recording application. - /// - /// - /// - private void NavigationService_Navigated(object sender, System.Windows.Navigation.NavigationEventArgs e) - { - if (!(e.Content is AudioRecorder)) return; - - (Application.Current.RootVisual as PhoneApplicationFrame).Navigated -= NavigationService_Navigated; - - AudioRecorder audioRecorder = (AudioRecorder)e.Content; - - if (audioRecorder != null) - { - audioRecorder.Completed += this.Completed; - } - else if (this.Completed != null) - { - this.Completed(this, new AudioResult(TaskResult.Cancel)); - } - } - } -} diff --git a/src/wp/UI/AudioRecorder.xaml b/src/wp/UI/AudioRecorder.xaml deleted file mode 100644 index 0fd26abe..00000000 --- a/src/wp/UI/AudioRecorder.xaml +++ /dev/null @@ -1,66 +0,0 @@ - - - - - - - - - - - - - - - - - -