Как сделать снимок с помощью MediaCapture в Enyo (webOS)? - PullRequest
2 голосов
/ 18 октября 2011

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

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

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

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

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

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

A.Включить в мои зависимости.js

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

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

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.Внутри события onclick определенной кнопки

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, я получаю следующий журнал в своей консоли:

info: MediaCapture:: ServiceProxy ===== MediaCapture :: _ initializeMediaServerInstanceSuccess () ... palm: //com.palm.mediad.MediaCaptureV3_1814440/, /usr/palm/frameworks/enyo/1.0/framework/lib/mediacapture/elperHia/.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 ​​": [{" имя ":" готовы», "значение" ложь}, { "имя": "supportedAudioFormats", "значение": [{ "битрейт": 128000, "оцифровка": 8000, "ширина": 0, "высота": 0, "MimeType": "аудио / vnd.wave", "кодеки": "1"}, { "битрейт": 256000, "оцифровка": 16000, "ширина": 0,»высота ": 0," MimeType ":" аудио / vnd.wave " "кодеки": "1"}, { "битрейт": 705600," sampleraт.е ": 44100," ширина ": 0," высота ": 0," MimeType ":" аудио / vnd.wave», "кодеки": "1"}, { "битрейт": 128000, "оцифровки": 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", "кодеки": "1"}, { "битрейт": 256000, "оцифровка": 16000, "ширина": 0, "высота": 0, "MimeType": "audio / vnd.wave", "codecs": "1"}, {"bitrate": 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 и инструкции, которым я следую, говорят о "Property Bag" , я понимаю, что именно здесь вы объявляетесвойства, однако я не знаю, как получить ключи устройства, которые мне нужны для загрузки 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] info: MediaCapture :: ServiceProxy

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

/ usr /пальмовые / рамки / ENYO / 1,0 / рамки / Библиотека / mediacapture / помощник / MediaCaptureProxyHelper.js: 140 [20111017-17: 07: 35.885940] info: MediaCapture :: ServiceProxy

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

/ USR / пальмовое / рамки / ENYO / 1,0 / рамки / Библиотека / mediacapture / хелперы / MediaCaptureProxyHelper.js: 140

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

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

Спасибо.

1 Ответ

0 голосов
/ 22 октября 2011

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

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

...