Linux下DIY DLAN投屏方案
導讀 | 我用 Python + FFmpeg + DLNA 完成了一個在 下的投屏方案。這個方案的不足是延遲有點大。 |
一般來說,安卓裝置和 Windows 裝置投屏使用的是 miracast 協議,但是該協議要求網路卡支援 p2pwifi,而 Linux 下大多數網路卡驅動不支援 p2pwifi。
於是我用 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區域網 IP>:9999/cgi-bin/screen.flv
請相應替換其中的和 <區域網 IP> 引數,此處我替換後的 是:
dlna play -d http://192.168.3.118:1528/ http://192.168.3.117:9999/cgi-bin/screen.flv
然後在你的電視上設定接受投屏,各種電視裝置設定投屏方式不同,請參照具體裝置說明。
稍等片刻,影片就會出現在電視上了。投屏效果如下:
作者簡介:
calvinlin:一個普通的深圳初中生。
原文來自:
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69955379/viewspace-2882724/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 投屏工具
- 會議室無線投屏模式:一對多投屏與多對一投屏模式
- 投屏協議協議
- 康佳電視怎麼投屏?手機電腦都能投的投屏教程
- 攻略:蘋果手機投屏電腦 iPhone映象投屏怎麼操作蘋果iPhone
- 蘋果iPhone手機怎麼投屏到電腦AirPlay映象投屏蘋果iPhoneAI
- 小米投屏神器怎麼用 小米投屏神器連線電腦方法
- windows7系統下使用愛奇藝投屏功能的方法Windows
- 蘋果手機投屏到電視機?一鍵秒投屏的操作教程蘋果
- 蘋果手機怎麼投屏不了,蘋果手機怎麼投屏電腦蘋果
- 什麼軟體可以投屏電腦?最好的手機投屏軟體
- 蘋果手機怎麼無線投屏?最好用的手機投屏教程分享!蘋果
- 蘋果手機怎麼投屏到電腦,手機投屏電腦的方法蘋果
- iPhone手機怎麼投屏到電腦,手機投屏電腦的方法iPhone
- 多屏互動和投屏該如何區別
- 純OC實現iOS DLNA投屏功能瞭解一下iOS
- AirServer for Mac(iPhone投屏到mac)AIServerMaciPhone
- win10怎麼使用投屏功能_win10投屏功能的使用步驟Win10
- win10電腦如何使用投屏_windows10自帶的投屏如何使用Win10Windows
- windows 10如何投屏電視機_windows10投屏電視機在哪設定Windows
- Linux下FrameBuffer直接寫屏(轉)Linux
- win10 如何投屏電視_Win10電腦怎麼投屏到電視Win10
- Mac映象投屏神器:JustStream Pro for MacMac
- Serviio Pro for Mac - DLNA投屏軟體Mac
- Squirrels AirParrot 映象投屏軟體UIAI
- MacOS蘋果系統投屏工具—AirServerMac蘋果AIServer
- 投屏成功後,手機橫屏切豎屏小窗畫面向右偏移
- 海爾電視怎麼投屏?這個手機投屏電視的操作你值得試試
- OPPO手機如何投屏到電視上?這份投屏指南沒收藏就血虧了
- DLNA協議上的基於cling框架的android投屏方案協議框架Android
- 手機怎麼投屏到電腦win10 安卓手機怎樣投屏到電腦Win10安卓
- 華為Mate20 Pro無線投屏怎麼用?Mate20 Pro無線投屏使用教程
- 好用的Mac投屏軟體——duet for MacMac
- 投屏沒聲音?我有解決方法!
- 電腦投屏軟體哪個好?
- win10怎麼投屏到電視機上 win10投屏到電視機的方法Win10
- win10專業版怎麼投屏到電視 win10投屏到電視的方法Win10
- 初識Linux核心-DIY核心模組Linux