2015-04-01 46 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