Как сделать снимок с помощью командной строки на webOS на сенсорной панели HP? - PullRequest
3 голосов
/ 22 сентября 2011

на webos, я запустил openssh и хотел бы сделать снимок, используя скрипт командной строки.

Я подозреваю, что это будет включать некоторую команду luna-send или, альтернативно, gst-launch

Но мне не повезло с документами.

У webos нет ожидаемых инструментов захвата, но я могу получить доступ к устройству / dev / video0.

Редактировать: я заметил, что на тачпаде установлена ​​утилита ffmpeg, но он не распознает формат video4linux2

До сих пор я пробую предложения Гоферхана со следующим кодом:

luna-send -n 1 palm://com.palm.mediad.MediaCapture/startImageCapture \
'{"path":"/media/internal/foo1.png","options":[{"quality" \
:100,"flash":2,'reviewDuration':0,'exifData':{}}]}'

но это просто висит там, ничего не делая, через некоторое время говорит это;

{"serviceName":"com.palm.mediad.MediaCapture","returnValue":false,"errorCode":-1 \
  ,"errorText":"com.palm.mediad.MediaCapture is not running."} \
(process:8534): LunaService-CRITICAL **: AppId msg type: 17

Ответы [ 2 ]

2 голосов
/ 22 сентября 2011

Таким образом, сделать это с помощью luna-send довольно сложно и технически не поддерживается.

Возможно, вы захотите воспользоваться библиотекой MediaCapture, которую можно найти на устройстве здесь:

/usr/palm/frameworks/enyo/0.10/framework/lib/mediacapture

Чтобы включить его в ваше приложение enyo, добавьте в файл depen.js следующее:

"$enyo-lib/mediacapture/"

Есть три основных этапа.

  1. Инициализация компонента
  2. Захват изображения
  3. Разгрузка устройства.

Вот пример:

Объявление компонента в вашей сцене

{
            kind: "enyo.MediaCapture", name:"mediaCaptureObj", 
            onLoaded:"_setUpLoadedState", onInitialized:"_setUpInitializedState", 
            onImageCaptureStart:"_onImageCaptureStart", onImageCaptureComplete:"_onImageCaptureComplete",
         onAutoFocusComplete:"_onAutoFocusComplete", onError:"_handleError",
            onElapsedTime:"_onElapsedTime", onVuData:"_onVuDataChange", onDuration:"_onDuration"
}

Вызовите метод инициализации :

this.$.mediaCaptureObj.initialize(this.$.ViewPort);

В вашем инициализированном обратном вызове

Используйте сумку свойств, чтобы определить количество доступных устройств. Обычно описаниями являются «Камера / видеокамера», «Передний микрофон» и «Камера, обращенная к пользователю»

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.$.mediaCaptureObj.load(keyString, formatObj);
}

Сфотографируйте .

var obj = {"exifData":"{\"make\": \"Palm\", \"model\": \"Pre3\", \"datetime\": \"2011:05:19 10:39:18\", \"orientation\": 1, \"geotag\": {}}","quality":90,"flash":"FLASH_ON"};

this.$.mediaCaptureObj.startImageCapture("", obj);

Выгрузить устройство :

this.$.mediaCaptureObj.unload();

Чтобы сделать это со старыми платформами JS, смотрите: https://developer.palm.com/content/api/reference/javascript-libraries/media-capture.html

Теперь вы можете сделать что-то похожее с luna-send, но опять же, я не думаю, что это технически поддерживается. У вас могут возникнуть проблемы с запуском / поддержкой службы захвата мультимедиа и т. Д. НО , если вы хотите попробовать, вы можете сделать что-то вроде:

1. получить экземпляр медиа-сервера --- это возвращает номер экземпляра порта

luna-send -a your.app.id -i palm://com.palm.mediad/service/captureV3 '{"args":["subscribe":true]}'

Это вернет местоположение службы захвата с номером порта, например:

{"returnValue":true, "location":"palm://com.palm.mediad.MediaCaptureV3_7839/"}

Поскольку это подписка, не отменяйте запрос. Просто откройте новый терминал.

2. Откройте новый терминал . Используйте «местоположение», возвращенное на шаге 1, в качестве нового URI службы:

luna-send -a your.app.id -i palm://com.palm.mediad.MediaCaptureV3_7839/load '{"args":["video:1", {"videoCaptureFormat":{"bitrate":2000000,"samplerate":44100,"width":640,"height":480,"mimetype":"video/mp4","codecs":"h264,mp4a.40"},"imageCaptureFormat":{"bitrate":0,"samplerate":1700888,"width":640,"height":480,"mimetype":"image/jpeg","codecs":"jpeg"},"deviceUri":"video:1"}]}'

Вы должны увидеть:

{"returnValue":true}

, если звонок завершен правильно. Вы можете безопасно ctrl + c из этого вызова.

3. Сфотографируйте. (вы можете нажать ctrl + c из последнего вызова и просто поставить аргументы здесь)

luna-send -a your.app.id -i palm://com.palm.mediad.MediaCaptureV3_7839/startImageCapture '{"args":["", {"exifData":"{\"orientation\": 1, \"make\": \"HP\", \"model\": \"TouchPad\", \"datetime\": \"2011:09:22 15:34:36\", \"geotag\": {}}","quality":90,"flash":"FLASH_DISABLED","orientation":"faceup"}]}'

Опять вы должны увидеть:

{"returnValue":true}

, если звонок завершен правильно.

Вы должны услышать щелчок затвора, и изображение отобразится в приложении "Фотографии" в вашем Фотопленке.

0 голосов
/ 23 сентября 2011

Альтернативой, которая может быть полезна при использовании кроссплатформенных инструментов, является использование конвейера gst-launch. До сих пор мне удалось запустить веб-камеру с помощью командной строки;

gst-launch camsrc .src ! video/x-raw-yuv,width=320,height=240,framerate=30/1 ! palmvideoencoder ! avimux name=mux ! filesink location=test1.avi alsasrc ! palmaudioencoder

, но не снимать ни одного изображения;

   gst-launch -v camsrc .src_still take-picture=1 flash-ctrl=2 ! fakesink dump=true

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

...