11 个版本 (3 个稳定版本)
2.0.0 | 2023 年 9 月 16 日 |
---|---|
1.1.1 |
|
1.0.0 | 2020 年 12 月 23 日 |
0.1.7 | 2020 年 11 月 11 日 |
0.1.5 | 2020 年 4 月 27 日 |
#1154 in 网络编程
30,067 每月下载量
在 5 个 Crates 中使用 (4 个直接使用)
52KB
1K SLoC
rupnp
一个异步库,用于查找 UPnP 控制点,对其执行操作并读取其服务描述。UPnP 代表 通用插头和插座
,广泛用于路由器、支持 WiFi 的扬声器和媒体服务器。
规范: http://rupnp.org/specs/arch/UPnP-arch-DeviceArchitecture-v2.0.pdf
示例用法
以下代码搜索具有 RenderingControl
服务的设备,并打印它们的名称及其当前音量。
use futures::prelude::*;
use std::time::Duration;
use rupnp::ssdp::{SearchTarget, URN};
const RENDERING_CONTROL: URN = URN::service("schemas-upnp-org", "RenderingControl", 1);
#[tokio::main]
async fn main() -> Result<(), rupnp::Error> {
let search_target = SearchTarget::URN(RENDERING_CONTROL);
let devices = rupnp::discover(&search_target, Duration::from_secs(3)).await?;
pin_utils::pin_mut!(devices);
while let Some(device) = devices.try_next().await? {
let service = device
.find_service(&RENDERING_CONTROL)
.expect("searched for RenderingControl, got something else");
let args = "<InstanceID>0</InstanceID><Channel>Master</Channel>";
let response = service.action(device.url(), "GetVolume", args).await?;
let volume = response.get("CurrentVolume").unwrap();
println!("'{}' is at volume {}", device.friendly_name(), volume);
}
Ok(())
}
许可证
许可协议为以下之一
- Apache 许可协议,版本 2.0 (LICENSE-APACHE 或 https://apache.ac.cn/licenses/LICENSE-2.0)
- MIT 许可证 (LICENSE-MIT 或 http://opensource.org/licenses/MIT)
由您选择。
贡献
请在任何拉取请求之前使用 rustfmt。
除非您明确声明,否则根据 Apache-2.0 许可证定义的,您提交的任何有意提交以包含在作品中的贡献,将根据上述条款双许可,不附加任何额外条款或条件。
依赖关系
~5–13MB
~148K SLoC