如何使用HP触摸板上的webOS上的命令行拍照?

时间:2011-09-22 04:45:32

标签: webos touchpad

在webos上,我运行openssh并想使用命令行脚本拍照。

我怀疑这将包括一些luna-send命令,或者gst-launch

但我对这些文档没有任何好运。

webos没有任何预期的捕获工具,但我可以访问/ dev / video0设备。

编辑:我注意到触摸板安装了ffmpeg实用程序,但它无法识别video4linux2格式

到目前为止,我正在使用以下代码尝试Gopherkhan的建议;

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 个答案:

答案 0 :(得分:2)

所以用luna-send做这件事有点棘手,技术上也不支持。

你可能想要点击MediaCapture库,可以在设备上找到它:

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

要将其包含在您的enyo应用中,请在您的depends.js中删除以下内容:

"$enyo-lib/mediacapture/"

涉及三个主要步骤。

  1. 初始化组件
  2. 捕捉图像
  3. 卸载设备。
  4. 以下是一个示例:

    声明场景中的组件

    {
                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);
    

    在您的onInitialized回调中

    使用属性包找到可用的设备数量。通常,描述是“相机/摄像机”,“前麦克风”和“面向用户的相机”

    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]}'
    

    这将使用端口号la:

    返回捕获服务的位置
    {"returnValue":true, "location":"palm://com.palm.mediad.MediaCaptureV3_7839/"}
    

    由于这是订阅,请不要终止请求。只需打开一个新的终端。

    <强> 2。打开一个新终端。使用步骤1中返回的“location”作为新服务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,并在这里提供args)

    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}
    

    如果通话正确完成。

    您应该听到快门单击,图像将显示在照片卷中的照片应用程序中。

答案 1 :(得分:0)

使用跨平台工具可能有一些好处的替代方案是使用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标签。我将继续用这种替代方法更新这个答案。