本开发包是卡菲单反无线取景控制器的SDK,可通过WIFI来无线控制单反相机拍摄和传输照片。支持以下功能:
卡菲单反无线取景控制器目前在摄影、新闻、医学、军事、科研等多个行业领域都有应用,欢迎广大开发者通过这个SDK开发出更多更好的解决方案。
本 SDK 使用 REST API 提供服务,iOS, Android, Windows, Mac OS 和 Linux 都可以使用
本 SDK 适用相机列表如下:
卡菲单反无线取景控制器和单反相机
卡菲使用 REST 协议向客户端提供服务。可以使用任何支持REST协议的开发库来开发卡菲 APP。
卡菲通过 Socket.IO 来发送事件。客户端需要安装支持 Socket.IO 的开发库来接收事件。
您可以使用以下开发库。SIOSocket v0.2.2
Download: https://github.com/Quobject/SocketIoClientDotNetSIOSocket v0.2.2
Download: https://github.com/MegaBits/SIOSocketSocket.IO-client Java v0.3.1
Download: https://github.com/socketio/socket.io-client-java卡菲单反无线取景控制器的默认IP为192.168.9.67或192.168.1.67.
GET takepic/true
触发相机拍摄一张照片
返回 http status code 200 means OK, 500 means failed
当照片文件生成时,服务端会向客户端发送一次 file_add 事件,事件参数为文件路径。客户端可以通过此路径下载文件或缩略图。
POST /tether/start
params: none
进入接收模式。当手动按相机快门拍摄时,服务端会向客户端发送一次 file_add 事件,事件参数为文件路径。客户端可以通过此路径下载文件或缩略图。
当一张照片从相机中删除时,将会发送一次 file_remove 事件,但没有参数。客户端需要重新读取文件列表一次以刷新文件列表。
POST /tether/stop
停止相机监控.
GET /files/$start/$count
It will list the images in the SD card.
Params:
$start
: 从第几张照片开始,数据类型 integer
$count
: 计划读取照片张数. 数据类型 Integer
如果调用成功,会返回如下格式的数组:
[ Storage001/DCIM/xxxx1.jpg,
Storage001/DCIM/xxxx2.jpg
...
]
需要注意的是申请张数不一定和返回张数相等。返回张数可能小于申请的张数。
状态代码: if execution is successful, the http status code will be 200 OK
Otherwise, it will return 500.
GET /raw/$filepath
从相机中下载原始文件到客户端。
$filepath
是根据list命令中返回的照片路径.传入时需要进行url编码。编码格式如下:
%2Fstorage001%2FDCIM%2Fxxxx1.jpg
文件大小在返回的 hearder 中可以取到,Content-Length:xxxx
返回: 成功返回 状态代码 200 OK,否则返回状态代码 500.
GET /thumbnail/$filepath
从相机中下载原始文件到客户端。
$filepath
是根据list
命令中返回的照片路径.传入时需要进行url编码。编码格式如下:
storage001%2FDCIM%2Fxxxx1.jpg
文件大小在返回的hearder中可以取到,Content-Length:xxxx
返回: 成功返回 状态代码 200 OK,否则返回状态代码500.
GET /image/$filepath
从相机中下载预览图主要用于预览 Raw 文件。预览图格式为 JPEG
$filepath
是根据list命令中返回的照片路径.传入时需要进行url编码。编码格式如下:
storage001%2FDCIM%2Fxxxx1.jpg
返回: 成功返回 状态代码 200 OK,否则返回状态代码500.
状态代码: if execution is successful, the http status code will be 200 OK
Otherwise, it will return 500.
GET /capturemovie
启动实时取景视频流。调用这个API,会创建一个TCP服务器,端口为890.客户端可以通过SOCKET端口,读取视频流。视频流格式为MJPEG.
返回: 成功返回 状态代码 200 OK,否则返回状态代码500.
GET /stopcapturemovie
关闭视频流 返回: 成功返回 状态代码 200 OK,否则返回状态代码500.
GET /config
返回相机所有配置参数信息,包括光圈,ISO,快门速度和曝光模式。
返回结果示例:
Canon 7D
Nikon D5100
PUT /setconfigvalue
参数:
{name:foo, value:foo}
配置名称和值可以在
getconfig
命令返回的结果中查找。佳能和尼康的不同相机在配置名称和值上有所区别。
返回: 成功返回 状态代码 200 OK,否则返回状态代码500.
GET /info
返回: {version:xxxx, serial:xxxx}
GET /iwlist
获取 CamFi 附近的WiFi 列表,并返回如下格式的数组:
[{
"associated" : false;
"mac" : "aa:12:12:7a:93:2f";
"signal" : "-72.00";
"ssid" : "xxxxxxxxx";
}, ...]
GET /networkmode
获取 CamFi 当前的网络模式信息,并返回如下格式的信息:
{
"ap_encryption" : "";
"ap_ssid" : "xxxxxxxxx";
"mode" : "sta";
"sta_encryption" : "psk2";
"sta_ssid" : "xxxxxxxxx";
}
mode : sta 表示当前 CamFi 为 Bridge Mode, mode : ap 表示当前 CamFi 为 AP mode。 sta_encryption 表示桥接路由的密码加密模式
POST /networkmode
可以把 CamFi 设置为 AP 模式或者 Bridge 模式。
Params:
AP Mode: { "mode":"ap" | "sta" }
Bridge Mode: { "mode":"sta", "router_ssid":foo, "password":foo, "encryption":psk | psk2 | ... }
mode : sta 表示将把 CamFi 设为 Bridge Mode, mode : ap 表示将把 CamFi 为 AP mode。
sta_encryption 表示桥接路由的密码加密模式
返回: 成功返回 状态代码 200 OK,否则返回状态代码 500。
示例( Windows ):
Quobject.SocketIoClientDotNet.Client.IO.Options options = new IO.Options();
options.ForceNew = true;
options.Multiplex = true;
socket = IO.Socket(InteractionApis.BaseUriString + ":8080", options);
示例(Windows):
socket.On("file_added", new Action<object>((filename) =>
{
try
{
this.Dispatcher.Invoke(new Action(() =>
{
string name = filename.ToString();
if (page != null)
{
page.FileAdded(name);
}
}));
}
catch { }
}));
camera_add
相机连接成功
camera_remove
相机断掉
liveshow_error
实时取景发送错误
file_added
新照片创建
timelaspe_error
定时拍照错误
http://cam-fi.com/sdk/camfidemo.zip
http://cam-fi.com/sdk/CamFiDemo_android.zip