Cách cài đặt trình kết xuất phương tiện DLNA


7

Tôi muốn sử dụng pi mâm xôi của mình media rendererđể tôi có thể chọn danh sách phát trên đó control pointđể phát nhạc từ media server. Tôi đã tìm thấy một số câu hỏi gmediarendernhưng không có câu trả lời trực tiếp làm thế nào để cài đặt nó. Làm thế nào tôi có thể làm điều đó một cách dễ dàng?

Câu trả lời:


7

Đã thử nghiệm trên Raspberry Pi 4B với
Raspbian Buster With Desktop 2020/02/13 được cập nhật vào ngày 2020-04-18.
Raspbian Buster Lite 2020/02/13 được cập nhật vào ngày 2020 / 03-26.
Cập nhật được thực hiện với sudo apt update && sudo apt full-upgrade && sudo reboot.

Với raspi, bạn nên kết nối với mạng cục bộ và với đầu ra âm thanh của bạn (tai nghe, bộ khuếch đại, v.v.). Trước tiên, bạn có thể kiểm tra đầu ra âm thanh của mình với tệp âm thanh nhỏ work.wav này . Tất nhiên bạn có thể thực hiện bất kỳ kiểm tra đầu ra âm thanh khác.

pi ~$ sudo apt install alsa-utils
pi ~$ aplay working.wav

Nếu bạn nghe rằng nó hoạt động thì hãy cài đặt gmediarendervới các plugin cần thiết:

pi ~$ sudo apt install gstreamer1.0-alsa gstreamer1.0-plugins-base gstreamer1.0-plugins-good gstreamer1.0-plugins-ugly gstreamer1.0-plugins-bad gstreamer1.0-gl gmediarender

Chạy thử nghiệm: hãy chắc chắn rằng bạn là thành viên của nhóm âm thanhvideo . Bạn có thể hủy bài kiểm tra với Ctrl+ C.

pi ~$ /usr/bin/gmediarender --friendly-name Test --uuid 42 --gstout-initial-volume-db -20 --logfile /dev/stdout

Trên điểm kiểm soát của bạn (bubbleUPNP hoặc đại loại như thế này), bạn nên tìm một trình kết xuất có tên Test. Chọn nó và phát nhạc từ máy chủ phương tiện của bạn nếu bạn có. Điều này hoạt động trên Raspbian Buster Light nhưng trên Raspbian Buster With Desktop , đầu ra gỡ lỗi trên màn hình cho thấy mọi thứ nên làm, nhưng không có âm thanh để nghe. Có vẻ như phiên bản Desktop cài đặt thêm một số thư viện bổ sung gây nhầm lẫn cho gmediarender nên sử dụng đầu ra nào. Tôi đã phải nối --gstout-audiosink alsasinkvào cuộc gọi thử nghiệm được hiển thị ở trên.

Tôi cũng tìm thấy một cảnh báo khó hiểu:

** (gmediarender:4222): CRITICAL **: 11:38:55.673: file gstdtlsagent.c: line 192 (gst_dtls_agent_init): should not be reached
** (gmediarender:4222): CRITICAL **: 11:38:55.673: gst_dtls_agent_set_property: assertion 'self->priv->ssl_context' failed

Với một số googling tôi thấy rằng nó không quan trọng (3) và bạn có thể triệt tiêu nó bằng cách đặt một chuỗi trống thành OPENSSL_CONF = "" . Vì vậy, một cuộc gọi thử nghiệm hoàn chỉnh trên bản cài đặt Buster Desktop của tôi trông như thế này:

OPENSSL_CONF="" /usr/bin/gmediarender --friendly-name Test --uuid 42 --gstout-initial-volume-db -20 --logfile /dev/stdout --gstout-audiosink alsasink

Nếu nó hoạt động thì hãy định cấu hình /etc/default/gmediarender, đặt UPNP_DEVICE_NAME và INITIAL_VOLUME_DB nếu bạn muốn. Đừng sử dụng các ký tự "đặc biệt" như umlaut hoặc như vậy. Khởi động sẽ thoát với một thông báo lỗi. Có vẻ như gmediarender vẫn không hiểu UTF-8 :-(

Nếu bạn có nhiều hơn một raspi với gmediarender đang chạy trên mạng của mình, bạn nên cung cấp cho mỗi UUID khác nhau. Các điểm kiểm soát sau đó có thể phân biệt trình kết xuất phương tiện khác nhau trong các tin nhắn upnp. Nối một cái gì đó như thế này vào /etc/default/gmediarender:

DAEMON_EXTRA_ARGS="--uuid f4f7681c-3056-11e8-86bd-87a6e4e2c42d"

Bạn có thể nhận UUID mới với chương trình uuid(cài đặt với sudo apt install uuid).

Nếu bạn chỉ có một giao diện trên RasPi thì bạn đã hoàn tất cài đặt. Chỉ cần bắt đầu gmediarender như dịch vụ:

pi ~$ sudo systemctl enable gmediarender.service
pi ~$ sudo systemctl start gmediarender.service



Tôi gặp vấn đề là tôi sử dụng gmediarender trên RasPi với kết nối mạng có dây và với một điểm truy cập để tôi có hai giao diện với một địa chỉ IP. Gmediarender liên kết với một trong số họ và tất nhiên là sai. Bạn phải chỉ định địa chỉ IP của giao diện /etc/default/gmediarendernên được sử dụng. Nhưng giao diện của tôi được cấu hình bởi DHCP để địa chỉ IP có thể thay đổi theo thời gian. Để giải quyết vấn đề này, tôi đã tạo một tập lệnh bash nhỏ lấy địa chỉ IP hiện tại từ giao diện và ghi nó vào /etc/default/gmediarender. Đây là kịch bản:

rpi ~$ cat /usr/local/sbin/gmediarender-setip.sh
#!/bin/bash
# This script binds gmediarender to an interface given in "$1".
# Gmediarender needs the ip address of the interface. The current ip address
# is taken from the interface and set in /etc/default/gmediarender.

if [ $# -eq 0 ]; then
    echo 'no interface name given'
    exit 1
fi
IPADDR="0.0.0.0"
IPADDR=$(/sbin/ip -4 -br addr show $1 | /bin/grep -Po "\\d+\\.\\d+\\.\\d+\\.\\d+")
CMD="s/\(DAEMON_EXTRA_ARGS=.*--ip-address=*\)[^ \"]*/\1$IPADDR/"
/bin/sed -i "$CMD" /etc/default/gmediarender

Đừng quên đặt quyền và chỉ thực hiện quyền cho root:

rpi ~$ sudo chown root:root /usr/sbin/gmediarender-setip.sh
rpi ~$ sudo chmod 754 /usr/sbin/gmediarender-setip.sh

Sau đó thực thi tập lệnh này ngay trước khi bắt đầu gmediarender bằng cách mở rộng dịch vụ của nó với:

rpi ~$ sudo systemctl edit gmediarender.service

Trong trình chỉnh sửa trống, chèn các câu lệnh này bằng tên giao diện của riêng bạn, lưu chúng và thoát khỏi trình soạn thảo:

[Service]
ExecStartPre=/usr/local/sbin/gmediarender-setip.sh eth0

Trong /etc/default/gmediarenderbộ ít nhất

DAEMON_EXTRA_ARGS="--ip-address=0.0.0.0"
# or e.g.
DAEMON_EXTRA_ARGS="--uuid f4f7681c-3056-11e8-86bd-87a6e4e2c42d --ip-address=0.0.0.0"

Nếu không, tập lệnh sẽ không tìm thấy địa chỉ IP được thay đổi. Sau đó bắt đầu gmediarender như dịch vụ:

pi ~$ sudo systemctl enable gmediarender.service
pi ~$ sudo systemctl start gmediarender.service


tài liệu tham khảo:
[1] https://github.com/hzeller/gmrender-resurrect
[2] https://joachim-wilke.de/blog/2016/07/10/UPNP-Renderer-auf-dem-Raspberry-Pi /
[3] https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/issues/811#note_117235

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.