cordova-plugin-media-capture
Этот плагин предоставляет доступ к возможностям записи аудио, изображений и видео с устройства.
ПРЕДУПРЕЖДЕНИЕ: Сбор и использование изображений, видео или аудио с камеры или микрофона устройства поднимает важные вопросы конфиденциальности. Политика конфиденциальности вашего приложения должна обсуждать, как приложение использует такие датчики и делится ли записанные данные с другими сторонами. Кроме того, если использование камеры или микрофона не очевидно в пользовательском интерфейсе, вы должны предоставить уведомление в режиме реального времени перед доступом приложения к камере или микрофону (если операционная система устройства этого ещё не делает). Это уведомление должно содержать ту же информацию, что и выше, а также получить разрешение пользователя (например, представив варианты OK и Нет, спасибо). Обратите внимание, что некоторые рынки приложений могут потребовать от вашего приложения предоставить уведомление в режиме реального времени и получить разрешение от пользователя до доступа к камере или микрофону. Для получения дополнительной информации см. Руководство по конфиденциальности.
Этот плагин определяет глобальный navigator.device.capture объект.
Хотя он находится в глобальной области, он недоступен до события deviceready.
document.addEventListener("deviceready", onDeviceReady, false);
function onDeviceReady() {
console.log(navigator.device.capture);
}
Сообщайте о проблемах с этим плагином на форуме отслеживания проблем Apache Cordova.
Установка
cordova plugin add cordova-plugin-media-capture
Поддерживаемые платформы
- Amazon Fire OS
- Android
- BlackBerry 10
- Браузер
- iOS
- Windows Phone 7 и 8
- Windows 8
- Windows
Объекты
- 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), и операция записи завершается после записи пользователем одного аудиоклипа.
Когда операция записи завершается, CaptureCallback выполняется с массивом MediaFile объектов, описывающих каждый записанный файл аудиоклипа. Если пользователь завершает операцию до записи аудиоклипа, CaptureErrorCallback выполняется с объектом CaptureError, содержащим код ошибки CaptureError.CAPTURE_NO_MEDIA_FILES.
Поддерживаемые платформы
- Amazon Fire OS
- Android
- BlackBerry 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 нет приложения для записи звука по умолчанию, поэтому предоставлен простой пользовательский интерфейс.
capture.captureImage
Запустить приложение камеры и получить информацию о файлах записанных изображений.
navigator.device.capture.captureImage(
CaptureCB captureSuccess, CaptureErrorCB captureError, [CaptureImageOptions options]
);
Описание
Запускает асинхронную операцию для захвата изображений с помощью приложения камеры устройства. Операция позволяет пользователям захватывать более одного изображения в одной сессии.
Операция захвата завершается либо при закрытии пользователем приложения камеры, либо при достижении максимального числа записей, указанного в CaptureImageOptions.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
Особенности iOS
Начиная с iOS 10, обязательно добавить NSCameraUsageDescription, NSMicrophoneUsageDescription и NSPhotoLibraryUsageDescriptionentry в info.plist.
-
NSCameraUsageDescriptionописывает причину доступа приложения к камере пользователя. -
NSMicrophoneUsageDescriptionописывает причину доступа приложения к микрофону пользователя. -
NSPhotoLibraryUsageDescriptionentryописывает причину доступа приложения к фотобиблиотеке пользователя.
При запросе доступа системой это строка отображается в диалоговом окне.
Для добавления этой записи вы можете передать следующие переменные при установке плагина.
-
CAMERA_USAGE_DESCRIPTIONдляNSCameraUsageDescription -
MICROPHONE_USAGE_DESCRIPTIONдляNSMicrophoneUsageDescription -
PHOTOLIBRARY_USAGE_DESCRIPTIONдляNSPhotoLibraryUsageDescriptionentry
- Пример:
cordova plugin add cordova-plugin-media-capture --variable CAMERA_USAGE_DESCRIPTION="your usage message"
Если вы не передаете переменную, плагин добавит пустую строку в качестве значения.
Особенности Windows Phone 7
Вызов приложения камеры, когда устройство подключено через Zune, не работает и выполняется обратный вызов ошибки.
Особенности браузера
Работает только в Chrome, Firefox и Opera (так как IE и Safari не поддерживают API navigator.getUserMedia).
Отображение изображений с использованием URL захваченного файла доступно только в Chrome/Opera. Firefox хранит захваченные изображения в хранилище IndexedDB (см. документацию плагина File), и поэтому единственный способ отобразить захваченное изображение — прочитать его и отобразить с помощью его 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});
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
- 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});
Особенности BlackBerry 10
- Cordova для BlackBerry 10 пытается запустить приложение **Video Recorder**, предоставленное RIM, для записи видео. Приложение получает код ошибки
CaptureError.CAPTURE_NOT_SUPPORTED, если приложение не установлено на устройстве.
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);
Особенности Amazon Fire OS
- Параметр
durationне поддерживается. Продолжительность записи не может быть ограничена программно.
Особенности Android
- Параметр
durationне поддерживается. Продолжительность записи не может быть ограничена программно.
Особенности BlackBerry 10
- Параметр
durationне поддерживается. Продолжительность записи не может быть ограничена программно. - Параметр
limitне поддерживается, поэтому для каждого вызова может быть создана только одна запись.
Особенности iOS
- Параметр
limitне поддерживается, поэтому для каждого вызова может быть создана только одна запись.
CaptureImageOptions
Содержит параметры конфигурации захвата изображений.
Свойства
- limit: Максимальное количество изображений, которые пользователь может захватить в одной операции захвата. Значение должно быть больше или равно 1 (по умолчанию 1).
Пример
// limit capture operation to 3 images
var options = { limit: 3 };
navigator.device.capture.captureImage(captureSuccess, captureError, options);
Особенности iOS
- Параметр limit не поддерживается, и для каждого вызова делается только одно изображение.
CaptureVideoOptions
Содержит параметры конфигурации записи видео.
Свойства
limit: Максимальное количество видеоклипов, которые пользователь может захватить в одной операции захвата. Значение должно быть больше или равно 1 (по умолчанию 1).
duration: Максимальная продолжительность видеоклипа в секундах.
Пример
// limit capture operation to 3 video clips
var options = { limit: 3 };
navigator.device.capture.captureVideo(captureSuccess, captureError, options);
Особенности BlackBerry 10
- Свойство duration игнорируется, поэтому продолжительность записей не может быть ограничена программно.
Особенности iOS
- Свойство limit игнорируется. Для каждого вызова записывается только одно видео.
Особенности Android
- Android поддерживает дополнительное свойство качество, чтобы разрешить захват видео с разным качеством. Значение
1(по умолчанию) означает высокое качество, а значение0означает низкое качество, подходящее для сообщений MMS. Подробнее см. здесь.
Пример (Android с качеством)
// limit capture operation to 1 video clip of low quality
var options = { limit: 1, quality: 0 };
navigator.device.capture.captureVideo(captureSuccess, captureError, options);
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меньше единицы).CaptureError.CAPTURE_NO_MEDIA_FILES: Пользователь закрывает приложение захвата камеры или аудио, прежде чем что-либо захватить.CaptureError.CAPTURE_PERMISSION_DENIED: Пользователь отказался от разрешения, необходимого для выполнения данного запроса на захват.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. Примеры:
video/3gppvideo/quicktimeimage/jpegaudio/amraudio/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.
Поддерживаемые платформы
- Amazon Fire OS
- Android
- BlackBerry 10
- iOS
- Windows Phone 7 и 8
- Windows 8
- Windows
Особенности Amazon Fire OS
API для доступа к информации о формате медиафайлов ограничен, поэтому не все свойства MediaFileData поддерживаются.
Особенности BlackBerry 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: Длительность видео- или аудиоклипа в секундах. Значение равно нулю для изображений. (Число)
Особенности BlackBerry 10
Ни один API не предоставляет информацию о формате медиафайлов, поэтому объект MediaFileData, возвращаемый MediaFile.getFormatData, имеет следующие значения по умолчанию:
codecs: Не поддерживается, возвращает
null.bitrate: Не поддерживается, возвращает ноль.
height: Не поддерживается, возвращает ноль.
width: Не поддерживается, возвращает ноль.
duration: Не поддерживается, возвращает ноль.
Особенности Amazon Fire 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: Поддерживается: только для аудио- и видеофайлов.
Особенности жизненного цикла Android
При захвате аудио, видео или изображений на платформе Android существует вероятность того, что приложение будет уничтожено после того, как Cordova Webview будет выведен в фоновый режим приложением захвата. Подробнее об этой проблеме см. в Руководстве по жизненному циклу Android. В этом случае обратные вызовы успеха и ошибки, переданные методу захвата, не будут вызваны, а результаты вызова будут переданы через событие документа, которое срабатывает после события возобновления Cordova.
В вашем приложении вы должны подписаться на два возможных события следующим образом:
function onDeviceReady() {
// pendingcaptureresult is fired if the capture call is successful
document.addEventListener('pendingcaptureresult', function(mediaFiles) {
// Do something with result
});
// pendingcaptureerror is fired if the capture call is unsuccessful
document.addEventListener('pendingcaptureerror', function(error) {
// Handle error case
});
}
// Only subscribe to events after deviceready fires
document.addEventListener('deviceready', onDeviceReady);
Вам нужно отслеживать, откуда эти результаты поступают. Убедитесь, что вы сохраняете и восстанавливаете состояние вашего приложения в рамках событий паузы и возобновления, как это необходимо. Обратите внимание, что эти события будут срабатывать только на платформе Android и только тогда, когда Webview был уничтожен во время операции захвата.
© 2012, 2013, 2015 The Apache Software Foundation
Licensed under the Apache License 2.0.
https://cordova.apache.org/docs/en/6.x/reference/cordova-plugin-media-capture/index.html