当前位置: 首页 > 科技观察

Linux下如何使用DLNA投屏

时间:2023-03-12 20:11:40 科技观察

编者按:本文是Linux中国公开投稿计划接受的第一篇投稿,投稿作者是一名初中生,点个赞吧!一般来说,Android设备和Windows设备都使用miracast协议,但是这个协议需要网卡支持p2pwifi,而Linux下的大部分网卡驱动都不支持p2pwifi。于是我使用Python+FFmpeg+DLNA完成了一个Linux下的投屏解决方案。这种方案的缺点是延迟有点大。这是如何做的。首先安装这个DLNA库:pip3installdlna然后使用pactl找到“MonitorSource”(中文输出)或“MonitorSource”(英文输出):pactllistsinks示例输出:Sink#0状态:RUNNING名称:alsa_output.pci-0000_05_00.6.HiFi__hw_Generic_1__sink描述:Family17h(型号10h-1fh)HD音频控制器扬声器+耳机驱动程序:module-alsa-card.c样本规范:s16le2ch44100Hz频道映射:右前所有者模块:9静音:无音量:左前:53814/82%/-5.14dB,右前:53814/82%/-5.14dB平衡0.00基本音量:65536/100%/0.00dB监听源:alsa_output.pci-0000_05_00.6。HiFi__hw_Generic_1__sink.monitorLatency:16676usec,configured16000us...然后创建一个CGI脚本screen.flv。第一的。创建放置脚本的目录:mkdirscreencastmkdirscreencast/cgi-bin然后直接通过cat创建脚本:cat<screencast/cgi-bin/screen.flv#!/bin/bashecho"Content-Type:video/x-flv"echoffmpeg-fpulse-i-fx11grab-i:0-vcodech264_nvencpipe:.flveof请将文件中的<替换为上面获取的监听源>。并为其设置可执行权限:chmod+xscreencast/cgi-bin/screen.flv注意:如果您没有Nvidia显卡,或者想使用其他硬件加速,请将编码方案h264_nvenc替换成对应的编码方案。不建议使用软解的方式,延迟很高。当你需要投屏时,首先启动本地网络服务器:cdscreencastpython3-mhttp.server--cgi9999&然后,找到你的DLNA设备,复制location后的URL:dlnadevicesampleoutput:=>Device1:{"location":"http://192.168.3.118:1528/","host":"192.168.3.118","friendly_name":"Kodi",...找到你Linux电脑的局域网IP地址:ipaddr例子输出:3:wlp2s0:mtu1500qdiscnoqueuestateUPgroupdefaultqlen1000link/ether74:4c:a1:82:2e:3fbrdff:ff:ff:ff:ff:ffinet192.168.3.117/24brd192.168.3.255scopeglobaldynamicnoprefixroutewlp2s0valid_lft58283secpreferred_lft58283secinet6240e:3b3:2ee3:9530:d005:e492:6243:9/128scopeglobaldynamicnoprefixroutevalid_lft6738secpreferred_lft3138secinet6240e:3b3:2ee3:9539:f289:6043:c56a:4e7b/64范围全局动态noprefixroutevalid_lft7189secpreferred_lft3589secinet6240e:3b3:2ee3:9539:3714:eaf0:c549:b8c9/64范围全局动态icmngtmpaddrnoprefixroutevalid_lft7188secpreferred_lft3588secinet6fe80::c746:2540:ab7b:20aa/64范围链接valid_lftforeverpreferred_lftforeverforeverinet6fe80::3543:2637:e0fc:3630/64范围链接noprefixroutevalid_lftforeverpreferred_dlnaplay-dhttp://:9999/cgi-bin/screen.flv请相应的替换参数,这个我替换的命令是:dlnaplay-dhttp://192.168.3.118:1528/http://192.168.3.117:9999/cgi-bin/screen.flv然后在电视上设置接受投屏,不同的电视设备投屏设置不同,具体请参考设备说明和稍等片刻,视频就会出现在电视上。投影效果如下:作者简介:calvinlin:深圳一名普通的初中生。