官方提供的软件包 gmediarender 好像无法发音,于是使用 gmrender-resurrect
github地址
https://github.com/hzeller/gmrender-resurrect
安装依赖
sudo apt-get install libupnp-dev libgstreamer1.0-dev gstreamer1.0-plugins-base gstreamer1.0-plugins-good gstreamer1.0-plugins-bad gstreamer1.0-plugins-ugly gstreamer1.0-libav
#音频sink
sudo apt install gstreamer1.0-alsa gstreamer1.0-pulseaudio
编译依赖
sudo apt-get install build-essential autoconf automake libtool pkg-config
git clone https://github.com/hzeller/gmrender-resurrect.git
编译
cd gmrender-resurrect
./autogen.sh
./configure
make
安装到系统
sudo make install
测试启动
运行 ./src/gmediarender -f “My Renderer”
防火墙
- 根据 --port 指定端口 监听 ipv4 tcp 默认 49152
- 监听 upnp 1900 组播
sudo iptables -t filter -A INPUT -p tcp --dport 49152 -j ACCEPT
sudo iptables -t filter -A INPUT -p udp --dest 239.255.255.250 --dport 1900 -j ACCEPT
音量
0db 100 *设置为0 100%音量
-6db 85 -6 85%
-10db 75 -10 75%
-20db 50 -20 50%
-40db 25 -40 25%
-60db 0 -60 0% 静音
创建运行用户 需要创建home目录以保存数据
sudo adduser --system --home /var/gmrender gmrender
日志文件
sudo touch /var/log/gmediarender.log
sudo chown gmrender:gmrender /var/log/gmediarender.log
配置选项文件 由init.d加载使用
/etc/default/gmediarender
#基于alsa
DAEMON_USER=“gmrender:audio”
UPNP_DEVICE_NAME="$(hostname)-PLAY"
INITIAL_VOLUME_DB=-40
GS_SINK_PARAM=“alsasink”
#alsa 使用 aplay -L #pulseaudio 使用 pacmd list-sinks|grep name:
ALSA_DEVICE=“sysdefault”
LISTEN_PORT=49152
DAEMON_EXTRA_ARGS="–mime-filter=audio"
对原始 /etc/init.d/gmediarender 经过修改
创建或替换 /etc/init.d/gmediarender
chmod +x /etc/init.d/gmediarender
#!/bin/sh
### BEGIN INIT INFO
# Provides: gmediarender
# Required-Start: $remote_fs $syslog $all
# Required-Stop: $remote_fs $syslog
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: Start GMediaRender at boot time
# Description: Start GMediaRender at boot time.
### END INIT INFO
DESC="gmRender"
DAEMON_USER="nobody:audio"
UPNP_DEVICE_NAME="Raspberry"
INITIAL_VOLUME_DB=-10
LISTEN_PORT=49152
#---------------------------------------
#对于原始版本的gmediarender -I 指定的是ipv4地址 这个与下面的LISTEN 二选一
#LISTEN=`ip -4 route list default|awk -F " " '{print $5}'`; LISTEN=`ip -4 addr |grep $LISTEN|grep inet|awk -F " " '{print $2}'|awk -F "/" '{print $1}'`
#gmediarender-resurrect 的-I 指定的是接口名
LISTEN=`ip -4 route list default|awk -F " " '{print $5}'`
LOG_FILE="/var/log/gmediarender.log"
ALSA_DEVICE="sysdefault"
NAME=gmediarender
#deb包安装路径 ------------------------------------------
#DAEMON=/usr/bin/$NAME
#gmRender-resurrect 编译安装的路径
DAEMON=/usr/local/bin/$NAME
PIDFILE=/var/run/$NAME.pid
DAEMON_EXTRA_ARGS=""
[ -x "$DAEMON" ] || exit 0
[ -r /etc/default/$NAME ] && . /etc/default/$NAME
. /lib/init/vars.sh
. /lib/lsb/init-functions
if [ -n "$ALSA_DEVICE" ] ; then
GS_SINK_PARAM="--gstout-audiosink=alsasink"
GS_DEVICE_PARAM="--gstout-audiodevice=$ALSA_DEVICE"
fi
# A simple stable UUID, based on this systems' first ethernet devices MAC address,
# only using tools readily available to generate.
UPNP_UUID=`ip link show | awk '/ether/ {print "salt:)-" $2}' | head -1 | md5sum | awk '{print $1}'`
case "$1" in
start)
echo "Starting GMediaRender"
start-stop-daemon --start --quiet --exec $DAEMON -c "$DAEMON_USER" --pidfile $PIDFILE -- \
-f "$UPNP_DEVICE_NAME" -d -u "$UPNP_UUID" $GS_SINK_PARAM $GS_DEVICE_PARAM \
--gstout-initial-volume-db=$INITIAL_VOLUME_DB -I "$LISTEN" -p "$LISTEN_PORT" \
--logfile "$LOG_FILE" "$DAEMON_EXTRA_ARGS"
;;
stop)
echo "Stopping GMediaRender"
start-stop-daemon -x $DAEMON -K
;;
*)
echo "Usage: /etc/init.d/gmediarender {start|stop}"
exit 1
;;
esac
服务启动
sudo systemctl start gmediarender.service
前台运行
sudo -H -u gmrender bash -c "gmediarender -I ens3 --port=49152 --friendly-name=DOPLAY --gstout-initial-volume-db=0.0 --gstout-audiodevice=sysdefault --uuid=20b7e477-9f8a-4ba0-9b3c-b2b342dd2f45 --logfile=stdout --mime-filter=audio -d"
Android播放体验
网易云 dlna 只能播放一首 —可以连续播放
qq音乐 可以使用 dlna 但是遇到不支持qplay播放的就会暂停播放 这时需要打开界面 下一首
应用管理 -> QQ音乐 -> 电池->启动管理-> 去掉选中 自动管理
但是碰到收费音乐就会停止 需要手动下一首
电池 或者
自动管启动 选中
关联启动 选中
后台运行 选中
如果/dev/snd被独占了 例如docker --device /dev/snd 宿主的gmediarender 就不能播放声音