linux下使用dlna投屏
删库然后跑路
编辑于 2022年03月15日 21:10

一般来说 安卓设备/windows设备投屏用的是miracast协议,但是这玩意要求网卡支持p2pwifi 但是linux下这玩意的支持貌似很差

于是用python+ffmpeg+dlna搓了个延迟有点大的投屏方案

先装这个dlna库

代码块
Shell
自动换行
复制代码
pip3 install dlna
复制成功

然后

代码块
Shell
自动换行
复制代码
mkdir screencast
mkdir screencast/cgi-bin
cat <<eof>screencast/cgi-bin/screen.flv
#!/bin/bash
echo "Content-Type:video/x-flv"
echo

ffmpeg -f pulse -i  Speeker name here   -f x11grab -i :0  -vcodec h264_nvenc  pipe:.flv
eof
chmod +x screencast/cgi-bin/screen.flv 作者:删库然后跑路 https://www.bilibili.com/read/cv15488839 出处:bilibili
复制成功

写完cgi后 要对这个脚本进行一点修改

将 Speeker name here 替换成在pactl list sinks 中找到的”监视器信源”

如果没有nvidia显卡 或者是要使用其他的硬件加速 把H264_nvenc 替换为其他的 不建议软解 延迟非常高 还卡

需要投屏时

代码块
Shell
自动换行
复制代码
cd screencast
python3 -m http.server --cgi 9999

dlna device (找到你的dlna设备,然后把location后面的url复制下来)
dlna play -d 上一步的url http://你的lan ip(不是localhost):9999/cgi-bin/screen.flv
复制成功

稍等片刻 视频就会出现在电视上了

(个人blog:http://calvinweb.github.io)