2015-04-01 52 views
4

我已經問過關於索尼相機API的SO以前的問題,我得到了一些幫助,但我仍然有問題。我找到了以下庫https://github.com/kazyx/kz-remote-api,有人使用Sony Camera API,但我必須對其進行更改才能使用WPF應用程序,因爲它已針對Windows應用商店進行了優化。索尼相機API與C#

我現在正在採取一切手段,但我不確定是否需要將Camera API文件附加到我的解決方案,以及如果我在哪裏可以找到確切的文件,因爲我下載的API文件只有一個適用於Android和iOS的文件無法幫助我。

+0

我現在能夠發現和我的索尼A6000,我可以從它接收XML文檔,但我的相機不斷顯示「連接...」和我的JSON請求不斷拋出異常。 – GANDA1F 2015-04-07 06:16:20

回答

3

我終於得到了自己的工作,並試圖以這樣的方式使它容易理解。如果有人想要我的索尼圖書館,請讓我知道,因爲我也嘗試了Kazyx圖書館,這對我沒有任何作用。

我的代碼如下。

private string cameraURL; 

    private bool recModeActive; 

    public void ControlCamera(string cameraResp) 
    { 
     cameraURL = string.Format("{0}/{1}", GetCameraURL(cameraResp), GetActionType(cameraResp)); 
    } 

    private string CameraRequest(string cameraUrl, string cameraRequest) 
    { 
     Uri urlURI = new Uri(cameraURL); 

     HttpWebRequest cameraReq = (HttpWebRequest)WebRequest.Create(cameraURL); 
     cameraReq.Method = "POST"; 
     cameraReq.AllowWriteStreamBuffering = false; 
     cameraReq.ContentType = "application/json; charset=utf-8"; 
     cameraReq.Accept = "Accept-application/json"; 
     cameraReq.ContentLength = cameraRequest.Length; 
     using (var cameraWrite = new StreamWriter(cameraReq.GetRequestStream())) 
     { 
      cameraWrite.Write(cameraRequest); 
     } 
     var cameraResp = (HttpWebResponse)cameraReq.GetResponse(); 
     Stream cameraStream = cameraResp.GetResponseStream(); 
     StreamReader cameraRead = new StreamReader(cameraStream); 
     string readCamera = cameraRead.ReadToEnd(); 

     return readCamera; 
    } 

    public string GetCameraURL(string cameraResp) 
    { 
     string[] cameraXML = cameraResp.Split('\n'); 
     string cameraURL = ""; 
     foreach (string cameraString in cameraXML) 
     { 
      string getCameraURL = ""; 
      if (cameraString.Contains("<av:X_ScalarWebAPI_ActionList_URL>")) 
      { 
       getCameraURL = cameraString.Substring(cameraString.IndexOf('>') + 1); 
       cameraURL = getCameraURL.Substring(0, getCameraURL.IndexOf('<')); 
      } 
     } 
     return cameraURL; 
    } 

    public string GetActionType(string cameraResp) 
    { 
     string[] cameraXML = cameraResp.Split('\n'); 
     string actionType = ""; 
     foreach (string cameraString in cameraXML) 
     { 
      string getType = ""; 
      if (cameraString.Contains("<av:X_ScalarWebAPI_ServiceType>")) 
      { 
       getType = cameraString.Substring(cameraString.IndexOf('>') + 1); 
       actionType = getType.Substring(0, getType.IndexOf('<')); 
       if (actionType == "camera") 
       { 
        break; 
       } 
      } 
     } 
     return actionType; 
    } 

    public string StartRecMode() 
    { 
     string startRecMode = JsonConvert.SerializeObject(new Camera.CameraSetup 
     { 
      method = "startRecMode", 
      @params = new List<string> { }, 
      id = 1, 
      version = "1.0" 
     }); 

     recModeActive = true; 

     return CameraRequest(cameraURL, startRecMode); 
    } 

    public string TriggerCamera() 
    { 
     string _triggerCamera = JsonConvert.SerializeObject(new Camera.StillCapture 
     { 
      method = "actTakePicture", 
      @params = new List<string> { }, 
      id = 1, 
      version = "1.0" 
     }); 

     return CameraRequest(cameraURL, _triggerCamera); 
    } 

    public string EchoRequest() 
    { 
     string _echoRequest = JsonConvert.SerializeObject(new Camera.TestCameraComm 
     { 
      method = "getEvent", 
      @params = new List<bool> { true }, 
      id = 1, 
      version = "1.0" 
     }); 

     return CameraRequest(cameraURL, _echoRequest); 
    } 

    public string StopRecMode() 
    { 
     string stopRecMode = JsonConvert.SerializeObject(new Camera.CameraSetup 
     { 
      method = "stopRecMode", 
      @params = new List<string> { }, 
      id = 1, 
      version = "1.0" 
     }); 

     recModeActive = false; 

     return CameraRequest(cameraURL, stopRecMode); 
    } 

    public string SetImageQuality() 
    { 
     string qualityReq = JsonConvert.SerializeObject(new Camera.CameraSetup 
     { 
      method = "setStillSize", 
      @params = new List<string> { "4:3", "20M"}, 
      id = 1, 
      version = "1.0" 
     }); 

     recModeActive = false; 

     return CameraRequest(cameraURL, qualityReq); 
    }` 
+0

也許你可以在github上分享? – 2015-09-03 05:40:43

+0

這裏是我創建項目的解決方案的鏈接。那裏還有一些其他的項目,但他們沒有完成,沒有經過測試。專注於SonyCameraControl和SonyCameraCommunication。 https://github.com/RudolphKalp/SonyCamera/tree/master/SonyCameraControl – GANDA1F 2015-10-12 07:18:48

+1

您能否回答我的一個簡單問題...索尼相機是否需要手動進入API模式,或者一直是您的wifi連接設置它?想知道之前,我買了一個修補。 – Torchify 2016-01-27 16:20:10