索尼远程摄像头API QX 10,响应代码错误:403

时间:2015-03-02 18:55:40

标签: android sony-camera-api

我正在尝试添加对Sony远程摄像头API的支持以打开相机项目(https://github.com/almalence/OpenCamera

首先,我下载示例应用程序并尝试将其集成到Open camera。所以,我可以搜索设备,甚至可以启动Liveview。但我想更多地控制相机参数。所以,我实现了一些方法,以获取有关相机参数的信息。例如,要获得可用的曝光补偿,请执行以下操作:

public JSONObject getAvailableExposureCompensation() throws IOException {
    String service = "camera";
    try {
        JSONObject requestJson =
                new JSONObject().put("method", "getAvailableExposureCompensation") //
                        .put("params", new JSONArray()).put("id", id()) //
                        .put("version", "1.0");
        String url = findActionListUrl(service) + "/" + service;

        log("Request:  " + requestJson.toString());
        String responseJson = SimpleHttpClient.httpPost(url, requestJson.toString());
        log("Response: " + responseJson);
        return new JSONObject(responseJson);
    } catch (JSONException e) {
        throw new IOException(e);
    }
}

它只是修改了示例应用程序中另一个方法的副本。

当我连接到Sony qx 10并尝试获取有关曝光补偿的信息时,我得到一个例外:

03-03 00:25:31.098: W/SimpleHttpClient(32662): httpPost: Response Code Error: 403: http://10.0.0.1:10000/sony/camera
03-03 00:25:31.098: W/SimpleHttpClient(32662): httpPost: IOException: Response Error:403
03-03 00:25:31.098: W/System.err(32662): java.io.IOException: Response Error:403
03-03 00:25:31.098: W/System.err(32662):    at com.almalence.sony.cameraremote.utils.SimpleHttpClient.httpPost(SimpleHttpClient.java:180)
03-03 00:25:31.098: W/System.err(32662):    at com.almalence.sony.cameraremote.utils.SimpleHttpClient.httpPost(SimpleHttpClient.java:135)
03-03 00:25:31.098: W/System.err(32662):    at com.almalence.sony.cameraremote.SimpleRemoteApi.getAvailableWhiteBalance(SimpleRemoteApi.java:414)
03-03 00:25:31.098: W/System.err(32662):    at com.almalence.opencam.cameracontroller.SonyRemoteCamera.getSupportedWhiteBalance(SonyRemoteCamera.java:825)
03-03 00:25:31.098: W/System.err(32662):    at com.almalence.opencam.cameracontroller.SonyRemoteCamera.initRemoteCameraFeatures(SonyRemoteCamera.java:667)
03-03 00:25:31.098: W/System.err(32662):    at com.almalence.opencam.cameracontroller.SonyRemoteCamera$3.run(SonyRemoteCamera.java:274)
  

403 Forbidden

其他请求也有相同的结果,例如:getAvailableWhiteBalance,getAvailableFocusMode,getAvailableIsoSpeedRate,getAvailableStillSize ...

但另一方面,索尼的PlayMemories应用程序具有曝光补偿控制和不同的白平衡模式。

我错过了什么?或PlayMemories应用程序有一些黑客,以克服这个问题?

  

编辑:

我在尝试期间发现的内容:

  1. qx10(以及其他一些设备)不支持getAvailableLiveviewSize。但是,如果我需要有关Liveview大小的信息该怎么办?有没有其他方法来衡量预览图像?
  2. getAvailableStillSize,getAvailableExposureCompensation,getAvailableWhiteBalance,getAvailableFocusMode,getAvailableIsoSpeedRate - 此方法声明为qx10支持,设备说,它们甚至可用。但是请求他们以403错误响应。为什么?可能有一些特殊的请求顺序,或者我应该更改"版本"请求领域?现在我使用1.0版本,作为文档中的示例。
  3. Sony PlayMemories可以控制曝光和白平衡。所以,至少这两个参数应该适用于我的qx10设备。或者它使用其他一些API,不适用于第三方开发人员?
  4.   

    编辑2:

    所以,我可以获得可用的尺寸:

    03-10 13:22:50.820: D/SimpleRemoteApi(4418): Request:  {"method":"getAvailableStillSize","params":[],"id":10,"version":"1.0"}
    03-10 13:22:50.826: D/SimpleRemoteApi(4418): Response: {"id":7,"result":[{"aspect":"4:3","size":"18M"},[{"aspect":"4:3","size":"18M"},{"aspect":"4:3","size":"5M"},{"aspect":"16:9","size":"13M"},{"aspect":"16:9","size":"2M"}]]}
    

    但是当我试图获得可用的曝光补偿时:

    03-10 13:22:50.830: D/SimpleRemoteApi(4418): Request:  {"method":"getAvailableExposureCompensation","params":[],"id":11,"version":"1.0"}
    03-10 13:22:51.012: D/SimpleRemoteApi(4418): Response: {"error":[1,""],"id":11}
    

    根据文档,错误代码1很常见。所以,没有任何关于问题的细节。同样的错误有getISOmodes和getWBModes请求。

1 个答案:

答案 0 :(得分:1)

QX10不支持您尝试呼叫的某些API。请参阅"每个兼容相机支持的API组"在Camera Remote API SDK附带的API参考PDF中。

关于编辑2: 最有可能发生这种情况,因为您的模式设置为智能或高级自动。尝试使用setExposureMode API更改为Program Auto,Aperture或Shutter,然后再次尝试调用getAvailableExposureCompensation。

此外,客户端应用程序可以使用“getAvailableApiList”API或“getEvent”API获取可用API列表,应用程序可以提前确认哪些API可用。