Skip to main content

DLNAPlay

扫描局域网中的DLNA设备,并按名称匹配,将本地音乐或视频投送到设备上进行播放。 Github源码地址:sffzh/dlnaPlay

特点:

  1. 可以按列表播放媒体文件,或者指定多个文件按序或随机播放;
  2. 扫描局域网设备后保存临时文件,下次可以快速开始投放;
  3. 局域网设备扫描时,采用异步扫描机制,只要发现指定设备立即开始投放,无须等待扫描达到超时时长。

依赖说明

本程序中控制upnp设备的功能(查看设备信息、播放、暂停、调节音量等)依赖于项目flyte/upnpclient

Install

pip install dlnaPlay

特殊情况:Termux 等无法安装 lxml4 的环境

在Termux中安装失败,提示是 lxml:4.9.4 依赖编译安装失败。 这是因为upnpclient要求依赖lxml版本低于5.0.0。 解决办法如下:

# 更新系统软件:
pkg update
pkg upgrade
# 先安装高版本lxml:
pkg install build-essential libxml2 libxslt
pip install lxml # 或者用pip install lxml==6.0.2 指定版本号
# 安装`upnpclient`的其他依赖
pip install requests python-dateutil six ifaddr
# 安装`dlnaPlay`的其他依赖
pip install argparse twisted
# 不检查依赖直接安装 upnpclient
pip install upnpclient==1.0.3 --no-deps
# 不检查依赖直接安装 dlnaPlay
pip install dlnaPlay --no-deps

Usage

use dlnaPlay -h to show all param options

dlnaPlay -h

使用示例

列出可用设备

dlnaPlay -w list_devices

-w 参数表示 watch,用来查看设备状态而不进行控制操作。后续再详细说明。

-w list_devices会在扫描局域网的upnp设备后列出支持DLNA投放的设备。扫描时长达到定义的超时时间后会结束程序。 超时时间秒数可用参数 -t 设置,默认为5秒。

注意,网络扫描的结果具有不确定性。如果扫描没有发现设备,可增加超时时间再试一次。 通常情况下家用局域网的设备能在5秒内被扫描到,如果超过20秒没发现设备,则需要检查设备自身的网络问题。 将扫描时间增加到30秒以上通常是没有任何意义的。

播放m3u歌单列表到指定设备

假设我的局域网中有一台支持DLNA播放的音箱,其upnp名称为SUPER Sound X9-9527

dlnaPlay -d "X9-9527" -f ~/music/playlist/favorite.m3u -s -v 30 -M 15

说明: -d 指定设备名称,只需要包含在完整名称中的一小段即可。会采用第一个扫描到可匹配上名称的设备。 设备名称为其upnp描述文件中的“frendly_name”字段的值。 -f 指定m3u歌单文件。文件内容为纯文本,每行对应一个歌曲文件。可使用当对路径或绝对路径。相对路径为媒体文件相对m3u文件的路径。媒体文件支持mp3、flac、ogg、m4a、mp4等常见格式,视频或音乐均可。视频投屏需要设备支持。 -s 小写s,表示 shuffle随机播放, 会对歌曲随机排序后播放。 -v 小写,设置播放音量。 -M 大写,设置播放歌曲数量。注意如果设置了-s随机播放,会先打乱顺序再截取曲目数量,因此不用担心歌单尾部的歌曲无法随机播放到。

设备名称选择名称中的一小段即可,但需要自行确保不会匹配到多个不同设备。如果多个设备都能匹配到,将会自动选择首个被扫描到的设备。

指定媒体文件进行播放

使用-m参数可直接指定媒体文件。可以多次使用此参数以选择多个文件。文件路径无效会自动跳过。

dlnaPlay -d "-TV" -m "../videos/Love Harder(part 1).mp4" -m "../videos/Love Harder(part 2).mp4" -v 30

停止播放

对于命令行执行的播放任务,使用Ctrl+C或杀死进程的方式结束命令,会在命令行退出前发送信号使DLNA播放设备停止播放。

但如果使用kill -9强制结束任务,则程序会强行中断,DLNA设备不会收到停止播放信号,会继续播放,直到所有缓存数据播放完。(通常在数秒钟时间,缓存较大的设备可能可以直接播放完一整首歌。

如果使用此程序播放多首歌曲,中途直接操作DLNA播放设备停止播放,则程序会在少许延迟后自动开始播放下一首。这是因为程序是通过轮询设备状态,以设备停止播放来判断一首歌放完、该放下一首了的。

如果命令行在后台运行,想要停止播放,有以下两种方法:

  • 一、直接ps查看进程,然后杀死进程。

  • 二、使用程序指定设备名称停止播放,命令类似:

    dlnaPlay -d X9-9527 -S
    

    -d X9-9527 指定需要停止播放的设备,-S为大写字母,表示Stop,停止播放。

Metadata

Release files for dlnaPlay 1.0.8

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for dlnaPlay 1.0.8
File Size Uploaded
dlnaplay-1.0.8.tar.gz 55.8 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for dlnaPlay 1.0.8
File Interpreter ABI Platform
dlnaplay-1.0.8-py3-none-any.whl Python 3 none any Details

Total release size: 90.1 kB

Release files / dlnaplay-1.0.8.tar.gz

Download URL dlnaplay-1.0.8.tar.gz
Size 55.8 kB
Tags Source
SHA-256 checksum
How to use checksums
66dda353be0030d0d9bdb150feb48a7c98abdc0f39a077db40ac97368647e00b
BLAKE2b-256 checksum
How to use checksums
b149c518cbdf0f67eac31038f27c1a16387b83557c8d029d0d395f8e35db887b
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.7

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Jan 12, 2026.

Transparency log

Release files / dlnaplay-1.0.8-py3-none-any.whl

Download URL dlnaplay-1.0.8-py3-none-any.whl
Size 34.2 kB
Tags Python 3
SHA-256 checksum
How to use checksums
c1f8eeb79e4e2400997ab26e4e5083e3ab8c21a78c6a04ef9dcb3c6d79d5d5b0
BLAKE2b-256 checksum
How to use checksums
74987ecc6ac7ebe0b803bcd135dec60f6fad91c79e30fd954387d6a19444c143
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.7

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Jan 12, 2026.

Transparency log

Release history Release notifications | RSS feed

This release

1.0.8 This release

2 release files

1.0.7

2 release files

1.0.6

2 release files

1.0.5

2 release files

1.0.4

2 release files

1.0.3

2 release files

1.0.2

2 release files

1.0.1

2 release files

1.0.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page