3

在 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
4

2 回答 2

2

因此,使用 luna-sends 执行此操作有点棘手,并且在技术上不受支持。

您可能会想要访问 MediaCapture 库,可以在此处的设备上找到该库:

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

要将它包含在您的 enyo 应用程序中,请在您的 depends.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);

在您的 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]}'

这将返回带有端口号的捕获服务的位置,例如:

{"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}

如果呼叫正确完成。

您应该会听到一声快门声,并且图像将显示在“照片”应用程序的“照片卷”中。

于 2011-09-22T05:03:50.577 回答
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 选项卡。在继续进行时,我将使用此替代方法更新此答案。

于 2011-09-23T08:24:04.000 回答