#upnp #dlna #stream #audio-video #networking #command-line

bin+lib crab-dlna

最小化的UPnP/DLNA媒体流传输器

4 个版本

0.2.1 2023年10月31日
0.2.0 2023年8月20日
0.1.1 2023年7月18日
0.1.0 2022年5月13日

#106 in 视频

Download history 1/week @ 2024-03-08 1/week @ 2024-03-15 21/week @ 2024-03-29 6/week @ 2024-04-05

每月72次下载

MIT/Apache

34KB
602

crab-dlna

CICD Version info

crab-dlna 是一个最小化的UPnP/DLNA媒体流传输器,既可以作为独立的CLI(命令行界面)应用程序,也可以作为Rust库。

它可以让你在电视(或任何其他DLNA兼容设备)上播放本地的视频文件。

功能

  • 搜索本地网络中可用的DLNA设备
  • 音频流传输
  • 视频流传输,支持字幕

安装

在GitHub仓库的发行版中,我们提供了crab-dlna的预编译二进制文件的存档,适用于 LinuxWindowsmacOS

cargo

通过cargo安装是通过安装 crab-dlna crate 来完成的

# If required, update Rust on the stable channel
rustup update stable

cargo install crab-dlna

# Alternatively, --locked may be required due to how cargo install works
cargo install crab-dlna --locked

用法(CLI)

您可以通过运行以下命令列出所有CLI命令

crab-dlna --help

列表

扫描兼容设备并列出可用的设备

crab-dlna list

如果您的设备未列出,您可能需要增加搜索超时时间

crab-dlna -t 20 list

播放

播放视频,如果可用则自动加载字幕,选择随机设备

crab-dlna play That.Movie.mkv

播放视频,通过查询指定设备(播放前扫描设备)

crab-dlna play That.Movie.mkv -q "osmc"

播放视频,通过其确切位置指定设备(不扫描,更快)

crab-dlna play That.Movie.mkv -d "http://192.168.1.13:1082/"

用法(库)

crab-dlnatokio 添加到您的依赖中

[dependencies] 
tokio = { version = "1", features = ["full"] }
crab-dlna = "0.2"

示例:发现并列出设备

crab-dlna 提供了一个函数,用于在网络中查找设备列表。

use crab_dlna::Render;

#[tokio::main]
async fn main() {
    let discover_timeout_secs = 5;
    let renders_discovered = Render::discover(discover_timeout_secs).await.unwrap();
    for render in renders_discovered {
        println!("{}", render);
    }
}

示例:在设备中播放视频

我们可以通过查询字符串指定DLNA设备渲染,然后在其中播放特定的视频,自动检测字幕文件。

use std::path::PathBuf;
use crab_dlna::{
    Render,
    RenderSpec,
    MediaStreamingServer,
    STREAMING_PORT_DEFAULT,
    get_local_ip,
    infer_subtitle_from_video,
    Error,
    play,
};

#[tokio::main]
async fn main() -> Result<(), Error> {
    let discover_timeout_secs = 5;
    let render_spec = RenderSpec::Query(discover_timeout_secs, "Kodi".to_string());
    let render = Render::new(render_spec).await?;
    let host_ip = get_local_ip().await?;
    let host_port = STREAMING_PORT_DEFAULT;
    let video_path = PathBuf::from("/home/crab/Videos/my_video.mp4");
    let inferred_subtitle_path = infer_subtitle_from_video(&video_path);
    let media_streaming_server = MediaStreamingServer::new(
        &video_path,
        &inferred_subtitle_path,
        &host_ip,
        &host_port,
    )?;
    play(render, media_streaming_server).await
}

您可以访问完整的 文档 来查看有关库的更多详细信息。

许可

版权(c)2022 Gabriel Magno。

crab-dlna 可根据您选择,在MIT许可证或Apache许可证2.0的条款下提供。

请参阅LICENSE-APACHELICENSE-MIT文件以了解许可详情。

依赖项

~16–31MB
~454K SLoC