本篇 ShengYu 要介紹使用 Python Flask 螢幕分享的作法,完成後就可以將你的桌面螢幕利用網頁的方式串流影像出去,其它使用者只需要一個瀏覽器就可以看你的螢幕分享(電腦或手機或平板)。
在之前的文章中曾經介紹過 Python Flask 的網頁開發、攝影機串流以及螢幕截圖,今天來點不一樣的,來作個螢幕分享的功能吧!
本篇所使用到的 Python 模組有
- Flask
- pyscreenshot (Linux)
- PIL ImageGrab (Windows and macOS)
顯示圖片的 Flask 網頁
基於之前的 Flask 系列文章介紹,可以透過下列的程式碼簡單的建立一個網頁並顯示一張圖片,
1 | <html> |
之前介紹過 Flask 使用 template 的方式了,這邊就直接使用吧!
1 | import flask |
但是這次我不只單純顯示一張圖片就好,我要顯示一連串圖片,
Flask 顯示串流影像
在攝影機串流這篇介紹到可以將一張張影像串流出去,
boundary=--jpgboundary
指出後續的連續資料塊以 --jpgboundary
作為各單位資料區塊邊界
你也可以改用boundary=frame
之後連續資料塊以 --frame
作為各單位資料區塊邊界
這邊我在 Ubuntu 系統下使用 pyscreenshot 來擷取螢幕的畫面,Windows 與 macOS 系統直接使用 PIL ImageGrab 即可
轉 bytes 方式有兩種,一種是先 seek(0) 再 read() 可以讀取 bytes 資料
1 | img_buffer = BytesIO() |
另一種是直接 getvalue(),就不用 seek
1 | img_buffer = BytesIO() |
Ubuntu 遇到 IMageGrab 錯誤訊息的解決方法
在 Ubuntu 下執行時如果遇到 ImageGrab is macOS and Windows only
的錯誤訊息時,代表 ImageGrab 這個模組只支援 OS X 跟 Windows,
在 Linux 平台下可以用 pyscreenshot 模組來取代 ImageGrab,
把原本的
1 | from PIL import ImageGrab |
替換成
1 | import pyscreenshot as ImageGrab |
這樣就可以了。
以上的完整原始碼放在我的 github 上。
其它參考
https://stackoverflow.com/questions/43520757/imagegrab-alternative-in-linux