Как сделать снимок с помощью командной строки на webOS на сенсорной панели HP?
На 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 ответа
Так что сделать это с помощью luna-send немного сложно и технически не поддерживается.
Возможно, вы захотите воспользоваться библиотекой MediaCapture, которую можно найти на устройстве здесь:
/usr/palm/frameworks/enyo/0.10/framework/lib/mediacapture
Чтобы включить его в ваше приложение enyo, добавьте в файл depen.js следующее:
"$enyo-lib/mediacapture/"
Есть три основных этапа.
- Инициализация компонента
- Захват изображения
- Разгрузка устройства.
Вот пример:
Объявите компонент в вашей сцене
{
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}
если звонок завершен правильно.
Вы должны услышать щелчок затвора, и изображение появится в приложении "Фотографии" в вашем Фотопленке.
Альтернативой, которая может быть полезна при использовании кроссплатформенных инструментов, является использование конвейера 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. Я буду обновлять этот ответ с этим альтернативным методом, как я продолжаю.