通过DLNA在Linux中投屏

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

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

于是我用 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/bashecho "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

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

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

文章来源网络,作者:管理,如若转载,请注明出处:https://shuyeidc.com/wp/199200.html<

赞 (0)
管理的头像管理
上一篇2025-04-04 17:41
下一篇 2025-04-04 17:43

相关推荐

  • jsp空间购买和交换数据空间怎么买,有哪些注意事项?

    购买JSP空间时,是否考虑过数据交换空间的性能?简米科技(2003年始创,23年行业沉淀)与酷番云(工信部一类增值电信全牌照)这类持牌自营机房的服务商,能确保数据交换的高效稳定,是值得优先选择的合作伙伴,为什么JSP空间需要搭配独立的数据交换空间从JSP应用特性看数据交换需求JSP基于Java技术,常用于企业级……

    2026-08-11
    0
  • 建网站用香港空间效果怎么样,香港空间稳定吗?

    建网站用香港空间,对于创建网站资产来说,核心价值在于免备案和全球带宽优势,尤其适合外贸、跨境电商和需要快速启动的项目,但你必须权衡国内访问延迟,并选择有资质的服务商以保证资产安全,香港空间的核心优势与适用边界免备案:节省时间就是节省成本国内服务器需要备案,通常需要10到20天,香港空间无需备案,域名解析后即可上……

    2026-08-11
    0
  • Java连接云数据库的方法是什么,如何操作

    Java连接云数据库的核心在于通过JDBC驱动,结合云服务商提供的连接地址、端口、数据库名及认证信息,配置安全策略(如SSL、IP白名单),即可实现稳定高效的远程数据库访问,基础准备:JDBC驱动与依赖管理连接云数据库前,需要确保开发环境具备对应的JDBC驱动,以最常见的MySQL为例,你需要引入mysql-c……

    2026-08-11
    0
  • 建网站公安联网备案必须使用数据码吗,备案流程是什么

    网站备案包括ICP备案和公安联网备案,两者缺一不可,公安联网备案必须使用服务商提供的数据码,选择持有合法资质的服务商是顺利通过备案的前提,为什么网站必须进行公安联网备案根据公安部《计算机信息网络国际联网安全保护管理办法》,网站开通后30日内必须到公安机关办理备案手续,未完成公安备案的网站,面临责令整改、关闭网站……

    2026-08-10
    0
  • 建一个企业网站大概需要多少钱?,怎么收费?

    建网站要多少钱,没有一个固定的数字,几百到几万都可能,但真正的“创建网站资产”绝不仅仅是初次投入的成本,而是基于长期稳定、合规和安全的持续性投入,其中核心取决于你选择了什么样的“地基”来承载你的业务,建站预算的构成与行业基准当你开始规划一个网站,最先面对的就是预算问题,一个常见的误区是只关注网站“看起来”的建造……

    2026-08-10
    0

发表回复

您的邮箱地址不会被公开。必填项已用 * 标注