SuperAPI AI 工具集

dlna

通用与其它

查看项目

更新于 10-16 05:30

技能介绍

用途

dlna 用于控制本地网络中的 DLNA/UPnP MediaRenderer 设备,例如智能电视、支持 DLNA 的音箱或回音壁、以及其他 UPnP MediaRenderer 设备。它可以帮助你在命令行或 Python 代码中完成设备发现与媒体播放控制。

主要能力

  • 发现设备:扫描本地网络中的 DLNA 设备。
  • 播放媒体:将媒体 URL 推送到指定设备或默认设备上播放。
  • 停止播放:停止设备上的播放。
  • 查询状态:获取设备当前的播放状态。
  • 配置默认设备:设置、查看或清除默认设备,设置后播放无需重复指定设备名。

命令一览

命令 说明
discover 扫描 DLNA 设备
play <url> [device] 在设备上播放媒体 URL
stop [device] 停止播放
status [device] 获取播放状态
config 显示配置
config --device <name> 设置默认设备
config --unset-device 清除默认设备

使用方式

快速开始示例:

# Discover devices
uv run dlna discover

# Set default device (optional but convenient)
uv run dlna config --device "HT-Z9F"

# Play with default device (no need to specify device name)
uv run dlna play "http://example.com/video.mp4"

# Or play with specific device
uv run dlna play "http://example.com/video.mp4" "Living Room TV"

停止播放:

uv run dlna stop

配置默认设备保存在技能目录下的 .dlna/config.json:

# Set default device
uv run dlna config --device "HT-Z9F"

# Show current config
uv run dlna config

# Clear default device
uv run dlna config --unset-device

播放本地文件

DLNA 设备只能播放 URL,不能播放本地文件路径。要播放本地文件,需要先通过 HTTP 服务把文件提供为 URL。

建议使用后台任务启动 HTTP 服务器,这样可以:

  • 避免僵尸进程:会话结束时服务器自动终止;
  • 资源管理清晰:服务器生命周期与会话绑定;
  • 避免端口冲突:完成后服务器停止,释放端口。

示例步骤:

  1. 在后台启动 HTTP 服务器(后台运行,会话结束时自动停止)。
  2. 获取本机 IP:
import socket
def get_ip():
    s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
    s.connect(("8.8.8.8", 80))
    ip = s.getsockname()[0]
    s.close()
    return ip
  1. 构造 URL 并播放:
url = f"http://{get_ip()}:8000/video.mp4"
# uv run dlna play url

Python API

import asyncio
from dlna import discover_devices, find_device, play_url, set_default_device

async def main():
    # Set default device
    set_default_device("Living Room TV")

    # Find device (uses default if no name provided)
    device = await find_device()  # Uses default
    if device:
        # Play remote URL
        await play_url(device, "http://example.com/video.mp4")

asyncio.run(main())

支持的设备

  • 智能电视(Sony、Samsung、LG 等)
  • 支持 DLNA 的回音壁与音箱
  • 任何 UPnP MediaRenderer 设备

限制

  • DLNA 设备只能播放 URL,不能直接播放本地文件路径,播放本地文件需自行搭建 HTTP 服务。
  • 关于收费、价格、平台支持范围等更多信息,暂未提供。