0%

linux下使用dlna投屏

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

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

先装这个dlna库

1
pip3 install dlna

然后

1
2
3
4
5
6
7
8
9
10
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

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

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

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

需要投屏时

1
2
3
4
5
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

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