dlna

📁 xiaotianfotos/skills 📅 6 days ago
4
总安装量
4
周安装量
#48405
全站排名
安装命令
npx skills add https://github.com/xiaotianfotos/skills --skill dlna

Agent 安装分布

gemini-cli 4
github-copilot 4
codex 4
kimi-cli 4
cursor 4
amp 4

Skill 文档

DLNA – Media Device Control

Control DLNA/UPnP MediaRenderer devices on your local network.

Quick Start

# 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"

# Stop playback
uv run dlna stop

Commands

Command Description
discover Scan for DLNA devices
play <url> [device] Play media URL on device
stop [device] Stop playback
status [device] Get playback status
config Show configuration
config --device <name> Set default device
config --unset-device Clear default device

Configuration

Default device is saved in .dlna/config.json inside the skill directory.

# 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

Playing Local Files

DLNA devices can only play URLs, not local file paths. To play local files, you need to serve them via HTTP.

IMPORTANT: Use Background Task for HTTP Server

Always use a background task (Bash with run_in_background) to start the HTTP server. This ensures:

  1. No zombie processes: When Claude Code session ends, the server is automatically terminated
  2. Clean resource management: Server lifecycle is tied to the session
  3. No port conflicts: Server stops when done, freeing the port

Example: Play Local File

# Step 1: Start HTTP server in background
# This runs in background and auto-stops when session ends

# Step 2: Get your local 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

# Step 3: Construct URL and play
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())

Supported Devices

  • Smart TVs (Sony, Samsung, LG, etc.)
  • Soundbars and speakers with DLNA support
  • Any UPnP MediaRenderer device