良许Linux教程网 干货合集 通过DLNA在Linux中投屏

通过DLNA在Linux中投屏

DLNA投屏是一个非常高效实用的功能,也是众多高端家用播放器必备功能之一。

简而言之,便是把手机或平板电脑(同时支持苹果与安卓)中的界面,比如在线视频、音乐软件,直接通过播放器投射在电视机大屏幕上。

u=1831371028,2974075627&fm=26&gp=0

于是我用 Python + FFmpeg + DLNA 完成了一个在 Linux 下的投屏方案。这个方案的不足是延迟有点大。

设置

下面是如何实现。

先装这个 DLNA 库:

pip3 install dlna

然后用 pactl 查找 “监视器信源”(中文输出) 或 “Monitor Source”(英文输出):

pactl list sinks

示例输出:

Sink #0
 State: RUNNING
 Name: alsa_output.pci-0000_05_00.6.HiFi__hw_Generic_1__sink
 Description: Family 17h (Models 10h-1fh) HD Audio Controller Speaker + Headphones
 Driver: module-alsa-card.c
 Sample Specification: s16le 2ch 44100Hz
 Channel Map: front-left,front-right
 Owner Module: 9
 Mute: no
 Volume: front-left: 53814 /  82% / -5.14 dB,   front-right: 53814 /  82% / -5.14 dB
         balance 0.00
 Base Volume: 65536 / 100% / 0.00 dB
 Monitor Source: alsa_output.pci-0000_05_00.6.HiFi__hw_Generic_1__sink.monitor
 Latency: 16676 usec, configured 16000 us...

然后创建一个 CGI 脚本 screen.flv。首先。建立放置该脚本的目录:

mkdir screencast
mkdir screencast/cgi-bin

然后通过 cat 来直接创建该脚本:

cat screencast/cgi-bin/screen.flv
#!/bin/bash
echo "Content-Type:video/x-flv"
echo

ffmpeg -f pulse -i    -f x11grab -i :0  -vcodec h264_nvenc  pipe:.flv
eof

请用上面获得的监视器信源替换文件中的

并为它设置可执行权限:

chmod +x screencast/cgi-bin/screen.flv

注意:如果没有 Nvidia 显卡,或者要使用其他的硬件加速,请把编码方案 h264_nvenc 替换为相应的编码方案。不建议采用软解方式,延迟非常高。

投屏

需要投屏时,首先启动本地 Web 服务器:

cd screencast
python3 -m http.server --cgi 9999&

然后,找到你的 DLNA 设备,然后把 location 后面的 URL 复制下来:

dlna device

示例输出:

=> Device 1:
{
   "location""http://192.168.3.118:1528/",
   "host""192.168.3.118",
   "friendly_name""Kodi",
...

找到你的 Linux 电脑的局域网 IP 地址:

ip addr

示例输出:

3: wlp2s0:  mtu 1500 qdisc noqueue state UP group default qlen 1000
   link/ether 74:4c:a1:82:2e:3f brd ff:ff:ff:ff:ff:ff
   inet 192.168.3.117/24 brd 192.168.3.255 scope global dynamic noprefixroute wlp2s0
      valid_lft 58283sec preferred_lft 58283sec
   inet6 240e:3b3:2ee3:9530:d005:e492:6243:9/128 scope global dynamic noprefixroute
      valid_lft 6738sec preferred_lft 3138sec
   inet6 240e:3b3:2ee3:9539:f289:6043:c56a:4e7b/64 scope global dynamic noprefixroute
      valid_lft 7189sec preferred_lft 3589sec
   inet6 240e:3b3:2ee3:9539:3714:eaf0:c549:b8c9/64 scope global dynamic mngtmpaddr noprefixroute
      valid_lft 7188sec preferred_lft 3588sec
   inet6 fe80::c746:2540:ab7b:20aa/64 scope link
      valid_lft forever preferred_lft forever
   inet6 fe80::3543:2637:e0fc:3630/64 scope link noprefixroute
      valid_lft forever preferred_lft forever

启动投屏的命令如下:

dlna play -d  http://:9999/cgi-bin/screen.flv

请相应替换其中的 参数,此处我替换后的命令是:

dlna play -d http://192.168.3.118:1528/ http://192.168.3.117:9999/cgi-bin/screen.flv

然后在你的电视上设置接受投屏,各种电视设备设置投屏方式不同,请参照具体设备说明。

稍等片刻,视频就会出现在电视上了。投屏效果如下:

img

以上就是良许教程网为各位朋友分享的Linu系统相关内容。想要了解更多Linux相关知识记得关注公众号“良许Linux”,或扫描下方二维码进行关注,更多干货等着你 !

img
本文由 良许Linux教程网 发布,可自由转载、引用,但需署名作者且注明文章出处。如转载至微信公众号,请在文末添加作者公众号二维码。
良许

作者: 良许

良许,世界500强企业Linux开发工程师,公众号【良许Linux】的作者,全网拥有超30W粉丝。个人标签:创业者,CSDN学院讲师,副业达人,流量玩家,摄影爱好者。
上一篇
下一篇

发表评论

联系我们

联系我们

公众号:良许Linux

在线咨询: QQ交谈

邮箱: yychuyu@163.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

关注微博
返回顶部