关于 https:/developer.sony.comdevelopcameras。 我只能找到DSC-HX60的远程API。
事实上,该表显示了所有支持Camera Remote API的摄像机,以及您可以在每台摄像机上使用API的哪些功能。如果你有一台相机在列表中,你只需要检查你的相机支持哪些API功能,然后就可以开始开发了。
所以我在研究这些apis,以便(ab)将我的HX50V相机作为一个网络摄像头。最后,对我来说,可用的远程控制的数量太有限了,但这似乎是一个合适的地方来分享我所发现的。
下面的内容是基于PC的连接,而不是智能手机,并且也适用于其他索尼型号。所有这些都记录在 索尼SDK 但我希望能把话说得更简洁一些。
在ThibaudM的配置中,有一个已知的索尼相机api urls的列表,在提到的。延时摄影-索尼 项目,但对于通用的解决方案,你需要先做这个。如果你对通用方案不感兴趣,并且已经知道你的相机api URL,就跳到3.。
索尼SDK说,你需要做一个SSDP M-Search发现请求来找出你的相机的api。开发者指南的第10页)。这是一个特定形式的UDP广播,返回UPnP设备。下面是一个随时可以运行的powershell脚本(修改后的代码来自于 此处)
#Use unused port or it will fail
$LocalEndPoint = New-Object System.Net.IPEndPoint([ipaddress]::Any,$Port)
$MulticastEndPoint = New-Object System.Net.IPEndPoint([ipaddress]::Parse("239.255.255.250"),1900)
$UDPSocket = New-Object System.Net.Sockets.Socket([System.Net.Sockets.AddressFamily]::InterNetwork,[System.Net.Sockets.SocketType]::Dgram,[System.Net.Sockets.ProtocolType]::Udp)
$UDPSocket.SetSocketOption([System.Net.Sockets.SocketOptionLevel]::Socket, [System.Net.Sockets.SocketOptionName]::ReuseAddress,$true)
$UDPSocket.Bind($LocalEndPoint)
$UDPSocket.SetSocketOption([System.Net.Sockets.SocketOptionLevel]::IP,[System.Net.Sockets.SocketOptionName]::AddMembership, (New-Object System.Net.Sockets.MulticastOption($MulticastEndPoint.Address, [ipaddress]::Any)))
$UDPSocket.SetSocketOption([System.Net.Sockets.SocketOptionLevel]::IP, [System.Net.Sockets.SocketOptionName]::MulticastTimeToLive, 2)
$UDPSocket.SetSocketOption([System.Net.Sockets.SocketOptionLevel]::IP, [System.Net.Sockets.SocketOptionName]::MulticastLoopback, $true)
#Write-Host "UDP-Socket setup done...`r`n"
#All SSDP Search
$SearchString = @"
M-SEARCH * HTTP/1.1
HOST:239.255.255.250:1900
MAN:"ssdp:discover"
ST:urn:schemas-sony-com:service:ScalarWebAPI:1
MX:3
"@
#^ 2 enters are important! leave in place.
$UDPSocket.SendTo([System.Text.Encoding]::UTF8.GetBytes($SearchString), [System.Net.Sockets.SocketFlags]::None, $MulticastEndPoint) | Out-Null
#Write-Host "M-Search sent...`r`n"
[byte[]]$RecieveBuffer = New-Object byte[] 64000
[int]$RecieveBytes = 0
$Response_RAW = ""
$Timer = [System.Diagnostics.Stopwatch]::StartNew()
$Delay = $True
while($Delay){
#15 Second delay so it does not run forever
if($Timer.Elapsed.TotalSeconds -ge 5){Remove-Variable Timer; $Delay = $false}
if($UDPSocket.Available -gt 0){
$RecieveBytes = $UDPSocket.Receive($RecieveBuffer, [System.Net.Sockets.SocketFlags]::None)
if($RecieveBytes -gt 0){
$Text = "$([System.Text.Encoding]::UTF8.GetString($RecieveBuffer, 0, $RecieveBytes))"
$Response_RAW += $Text
}
}
}
$UDPSocket.Close()
$Response_RAW
这将会输出类似这样的东西。
HTTP/1.1 200 OK
CACHE-CONTROL: max-age=1800
EXT:
LOCATION: http://10.0.0.1:1900/scalarwebapi_dd.xml
SERVER: FedoraCore/2 UPnP/1.0 MINT-X/1.8.1
ST: urn:schemas-sony-com:service:ScalarWebAPI:1
USN: uuid:00000000-0005-0010-8000-abcdabcdabcd::urn:schemas-sony-com:service:ScalarWebAPI:1
LOCATION是有趣的部分
或者,如果你能在C#环境下使用,并且感觉很幸运,可以用这个oneliner代替。
//ATT: this needs a project reference to COM library *UPnP 1.0 Type Library (Control Point)*
Console.WriteLine((new UPNPLib.UPnPDeviceFinder().FindByType("urn:schemas-sony-com:service:ScalarWebAPI:1", 0).OfType<UPnPDevice>().FirstOrDefault() as UPNPLib.IUPnPDeviceDocumentAccess)?.GetDocumentURL() ?? "nothing found");
(如果其中任何一个都没有结果,请替换为 "LOCATION") urn:schemas-sony-com:service:ScalarWebAPI:1
与 ssdp:all
并在返回的列表中找到你的设备信息)
所有这些探测只是给你一个网址,看起来像这样。http:/10.0.0.1:1900scalarwebapi_dd.xml。这不是API的网址! (尚未)
你可以在浏览器中打开它,应该可以看到这样的内容。
<?xml version="1.0" encoding="utf-8"?>
<root xmlns="urn:schemas-upnp-org:device-1-0">
<specVersion>
<major>1</major>
<minor>0</minor>
</specVersion>
<device>
<deviceType>urn:schemas-upnp-org:device:Basic:1</deviceType>
<friendlyName>DSC-HX50V</friendlyName>
<manufacturer>Sony Corporation</manufacturer>
<manufacturerURL>http://www.sony.com/</manufacturerURL>
<modelDescription>SonyRemoteCamera</modelDescription>
<modelName>SonyImagingDevice</modelName>
<modelURL>http://www.sony.net/</modelURL>
<serialNumber/>
<UDN>uuid:00000000-0005-0010-8000-784b8705bcbc</UDN>
<serviceList>
<service>
<serviceType>urn:schemas-sony-com:service:ScalarWebAPI:1</serviceType>
<serviceId>urn:schemas-sony-com:serviceId:ScalarWebAPI</serviceId>
<SCPDURL/>
<controlURL/>
<eventSubURL/>
</service>
</serviceList>
<av:X_ScalarWebAPI_DeviceInfo xmlns:av="urn:schemas-sony-com:av">
<av:X_ScalarWebAPI_Version>1.0</av:X_ScalarWebAPI_Version>
<av:X_ScalarWebAPI_ServiceList>
<av:X_ScalarWebAPI_Service>
<av:X_ScalarWebAPI_ServiceType>camera</av:X_ScalarWebAPI_ServiceType>
<av:X_ScalarWebAPI_ActionList_URL>http://10.0.0.1:10000/sony</av:X_ScalarWebAPI_ActionList_URL>
<av:X_ScalarWebAPI_AccessType/>
</av:X_ScalarWebAPI_Service>
</av:X_ScalarWebAPI_ServiceList>
</av:X_ScalarWebAPI_DeviceInfo>
</device>
</root>
API的网址在这里。<av:X_ScalarWebAPI_ActionList_URL>http://10.0.0.1:10000/sony</av:X_ScalarWebAPI_ActionList_URL>
这在索尼SDK开发指南的 "步骤3. 调用API。"的索尼SDK开发指南。
注意!对于DSC-HX50V来说,这个文档是不正确的。摄像机的端点不是 http://10.0.0.1:10000/sony/camera
不过 http://10.0.0.1:10000/camera
.另一个我觉得响应的终端,但不能从这里得到任何有用的东西是。http://10.0.0.1:10000/guide
http://10.0.0.1:10000/sony
似乎只返回空的响应。
现在,我们终于有了一个API url,我们可以通过调用以下方法来查询你的索尼相机api的功能 getAvailableApiList
(对于 /camera
端点)和 getMethodTypes
(更详细,对其他端点也适用)。这在 Sony_CameraRemoteAPIbeta_API-Reference_v2.40.pdf。 第251-254页,该书也被列入《联合国宪章》。索尼SDK
举个例子。以我的HX50V为例,我发送了一个HTTP POST请求(使用PostMan)到: http:/10.0.0.1:10000camera。
POST正文。
{
"version":"1.0",
"id":1234,
"method":"getAvailableApiList",
"params":[]
}
{
"id": 1235,
"result": [
[
"getMethodTypes",
"getAvailableApiList",
"setShootMode",
"getShootMode",
"getSupportedShootMode",
"getAvailableShootMode",
"setFlashMode",
"getFlashMode",
"getSupportedFlashMode",
"getAvailableFlashMode",
"setSelfTimer",
"getSelfTimer",
"getSupportedSelfTimer",
"getAvailableSelfTimer",
"startLiveview",
"stopLiveview",
"actTakePicture",
"startMovieRec",
"stopMovieRec",
"actZoom",
"getApplicationInfo",
"getVersions",
"receiveEvent"
]
]
}
看了这个列表,原来HX50V的LiveView是固定的,设置为惨不忍睹的640x480 px。我想把这台摄像机变成网络摄像机的尝试就这样结束了。
其他相机确实支持 "Liveview尺寸 "api。这一切都在索尼API参考资料的第11页的一个巨大的表格中--除了HX50V没有被列出。
时间捕捉还是有可能的,但由于某些难以理解的原因,当通过Wifi连接时,USB充电被禁用,所以如果没有一些额外的电池,它将不可能让相机连续几天。
不管怎么说,希望对想搞清楚索尼Apis的人有所帮助。