Discover dlna palyer devices and cast media to play. 选择局域网的DLNA设备,播放本地音乐或视频文件,可以播放m3u歌单列表。
Project description
DLNAPlay
扫描局域网中的DLNA设备,并按名称匹配,将本地音乐或视频投送到设备上进行播放。 Github源码地址:sffzh/dlnaPlay
特点:
- 可以按列表播放媒体文件,或者指定多个文件按序或随机播放;
- 扫描局域网设备后保存临时文件,下次可以快速开始投放;
- 局域网设备扫描时,采用异步扫描机制,只要发现指定设备立即开始投放,无须等待扫描达到超时时长。
依赖说明
本程序中控制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,停止播放。
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file dlnaplay-1.0.8.tar.gz.
File metadata
- Download URL: dlnaplay-1.0.8.tar.gz
- Upload date:
- Size: 55.8 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
66dda353be0030d0d9bdb150feb48a7c98abdc0f39a077db40ac97368647e00b
|
|
| MD5 |
fa7e6fa11b668c78f0748115ec59c195
|
|
| BLAKE2b-256 |
b149c518cbdf0f67eac31038f27c1a16387b83557c8d029d0d395f8e35db887b
|
Provenance
The following attestation bundles were made for dlnaplay-1.0.8.tar.gz:
Publisher:
publish.yml on sffzh/dlnaPlay
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
dlnaplay-1.0.8.tar.gz -
Subject digest:
66dda353be0030d0d9bdb150feb48a7c98abdc0f39a077db40ac97368647e00b - Sigstore transparency entry: 814272094
- Sigstore integration time:
-
Permalink:
sffzh/dlnaPlay@de7d65653e0d0b169e47bb51a12223504c6a9c52 -
Branch / Tag:
refs/tags/v1.0.8 - Owner: https://github.com/sffzh
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@de7d65653e0d0b169e47bb51a12223504c6a9c52 -
Trigger Event:
push
-
Statement type:
File details
Details for the file dlnaplay-1.0.8-py3-none-any.whl.
File metadata
- Download URL: dlnaplay-1.0.8-py3-none-any.whl
- Upload date:
- Size: 34.2 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
c1f8eeb79e4e2400997ab26e4e5083e3ab8c21a78c6a04ef9dcb3c6d79d5d5b0
|
|
| MD5 |
bd9d949a2d84304a87fb55f9cdfac5ac
|
|
| BLAKE2b-256 |
74987ecc6ac7ebe0b803bcd135dec60f6fad91c79e30fd954387d6a19444c143
|
Provenance
The following attestation bundles were made for dlnaplay-1.0.8-py3-none-any.whl:
Publisher:
publish.yml on sffzh/dlnaPlay
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
dlnaplay-1.0.8-py3-none-any.whl -
Subject digest:
c1f8eeb79e4e2400997ab26e4e5083e3ab8c21a78c6a04ef9dcb3c6d79d5d5b0 - Sigstore transparency entry: 814272097
- Sigstore integration time:
-
Permalink:
sffzh/dlnaPlay@de7d65653e0d0b169e47bb51a12223504c6a9c52 -
Branch / Tag:
refs/tags/v1.0.8 - Owner: https://github.com/sffzh
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@de7d65653e0d0b169e47bb51a12223504c6a9c52 -
Trigger Event:
push
-
Statement type: