Как сделать снимок с помощью MediaCapture в Enyo (webOS)?

Я новичок в разработке для WebOS, и сейчас я разрабатываю приложение, в котором мне нужно сфотографировать определенного пользователя.

Я искал много ресурсов и сайтов в Интернете, но я не могу найти решение для моей проблемы.

Я следую инструкциям, перечисленным здесь:

Как сделать снимок с помощью командной строки на webOS на сенсорной панели HP?

Я хочу дать понять, что я не хочу делать фотографию из командной строки.

Я попробовал следующее:

А. Включите в мои зависимости.js

"$enyo/../lib/mediacapture/"

Б. В моей сцене

enyo.kind({
name: "MyComponent",
kind: "Pane",
components: [
    {
        kind: "enyo.MediaCapture",
        name: "mediaCapture",
        onInitialized: "onImageCaptureInitialized",
        onError: "onImageCaptureError",
        onImageCaptureComplete: "onImageCaptureComplete"
    }
],
...
..
.
});

C. Внутри функции onCreate

create: function () {
    this.inherited(arguments);
    this.$.mediaCapture.initialize(this.$.ViewPort);
},

D. Внутри инициализированного события

onImageCaptureInitialized: function () {
    var keyString;                              
    for(var i = 0; i < this.pb.deviceKeys.length; i++) {
        if(this.pb.deviceKeys[i].description.indexOf("Camera/Camcorder") >= 0) {
              keyString = this.pb.deviceKeys[i].deviceUri;
              break;
        }
    }

    if(keyString) {
        var formatObj = {imageCaptureFormat: this.pb[keyString].supportedImageFormats[0]};
        this.$.mediaCapture.load(keyString, formatObj);
    }
},

D. Внутри события нажатия определенной кнопки

takePhotoClickEvent: function (inSender) {      

    this.$.mediaCapture.startImageCapture("/media/internal/CanalCocina/recipe_photo.jpg",
        { 
            "bitrate":128000,
            "samplerate":8000,
            "width":480,
            "height":320,
            "mimetype":"image/jpeg",
            "codecs":"jpeg"}
        );  
},

Когда я запускаю приложение на сенсорной панели HP, в консоли появляется следующий журнал:

информация: MediaCapture::ServiceProxy ===== MediaCapture::_initializeMediaServerInstanceSuccess() ...palm://com.palm.mediad.MediaCaptureV3_1814440/, /usr/palm/frameworks/enyo/1.0/framework/lib/mediacture helper/MediaCaptureProxyHelper.js:83 [20111017-16:52:32.906482] информация: MediaCapture::ServiceProxy @@@@@@----------- GRAB ПЕРВОЙ СОБСТВЕННОСТИ -----------@@@@@@, /usr/palm/frameworks/enyo/1.0/framework/lib/mediacapture/helper/MediaCaptureProxyHelper.js:106 [20111017-16:52:32.913991] info: MediaCapture::ServiceProxy inResponse: {"propertyValues":[{"name":"ready","value":false},{"name":"enabledAudioFormats","value":[{"bitrate":128000,"samplerate":8000,"ширина": 0, "высота": 0, "MimeType": "аудио / vnd.wave", "кодеки":"1"},{"битрейт":256000,"оцифровки":16000,"ширина": 0, "высота": 0, "MimeType": "аудио / vnd.wave", "кодеки":"1"},{"битрейт":705600,"оцифровка":44100,"ширина": 0, "высота ": 0," MimeType ":" аудио / vnd.wave", "кодеки":"1"},{"битрейт": 128000, "оцифровка": 8000, "ширина": 0, "высота": 0, "MimeType": "аудио / vnd.wave", "сотрудничество DECS ":" 1 "}, {" битрейт ": 256000," оцифровка ": 16000," ширина ": 0," высота ": 0," MimeType ":" аудио / vnd.wave " "кодеки":" 1 "}, {" битрейт ": 705600," оцифровка ": 44100," ширина ": 0," высота ": 0," MimeType ":" аудио / vnd.wave", "кодеки":"1"},{"битрейт": 128000, "оцифровка": 8000, "ширина": 0, "высота": 0, "MimeType": "аудио / vnd.wave", "кодеки":"1"},{"битрейт":256000,"оцифровка":16000,"ширина": 0, "высота": 0, "MimeType": "аудио / vnd.wave", "кодеки":"1"},{"битрейт": 705600," SAMPL

Однако, когда приложение пытается загрузить объект mediaCapture, я получаю:

Uncaught TypeError: Невозможно прочитать свойство 'deviceKeys' из неопределенного, source/CCRecipesStep1View.js:186

Я знаю и понимаю, что эта ошибка связана с тем, что приложение пытается получить доступ к несуществующему свойству. В этом случае конкретная строка:

onImageCaptureInitialized: function () {
    var keyString;                              
    for(var i = 0; i < this.pb.deviceKeys.length; i++)    <<------------ Here
    ...
    ..
    .
}

Файл MediaCapture.js и инструкции, которые я следую, говорят о " Пакете свойств", я понимаю, что именно здесь вы объявляете свойства, однако я не знаю, как получить ключи устройства, необходимые для загрузки MediaCaptureObject.

Когда кнопка нажата, я получаю:

MediaCapture:: ServiceProxy ####### ----------- СОБЫТИЕ ИЗМЕНИТЬ СВОЙСТВА -----------######vuData, /usr/palm/frameworks/enyo/1.0/framework/lib/mediacapture/helper/MediaCaptureProxyHelper.js:140 [20111017-17:07:35.401836] информация: MediaCapture:: ServiceProxy

# ----------- ИЗМЕНЕНИЕ СВОЙСТВ СОБСТВЕННОСТИ ----------- ###### vuData,

/usr/palm/frameworks/enyo/1.0/framework/lib/mediacapture/helper/MediaCaptureProxyHelper.js:140 [20111017-17: 07: 35.653586] информация: MediaCapture:: ServiceProxy

# ----------- ИЗМЕНЕНИЕ СВОЙСТВ СОБСТВЕННОСТИ ----------- ###### vuData,

/usr/palm/frameworks/enyo/1.0/framework/lib/mediacapture/helper/MediaCaptureProxyHelper.js:140 [20111017-17: 07: 35.885940] информация: MediaCapture:: ServiceProxy

# ----------- ИЗМЕНЕНИЕ СВОЙСТВ СОБСТВЕННОСТИ ----------- ###### vuData,

/usr/palm/frameworks/enyo/1.0/framework/lib/mediacapture/helper/MediaCaptureProxyHelper.js:140

И начать бесконечный цикл: S

Я надеюсь, что вы можете помочь мне. Это приложение очень важно.

Спасибо.

1 ответ

Вы смотрели образцы в 3.0.4 SDK?

Он поставляется с примером приложения MediaCapture, которое делает снимки. Способ получения deviceUri полностью отличается от того, что вы делаете, метод initialize получает список форматирования в качестве аргумента.

Другие вопросы по тегам