You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过本地IP串流MacOS桌面?FFmpeg/Python等方案求助

解决MacBook桌面共享(网页端查看)的问题

一、修复你当前的FFmpeg命令问题

你之前的命令导致浏览器空白,主要是这几个原因:

  • Mac的avfoundation设备编号错误:0一般对应摄像头,屏幕采集通常是1或更高编号
  • 直接用MP4 HTTP流在浏览器兼容性极差,改用WebM或HLS格式更靠谱
  • 仅绑定localhost的话,局域网其他设备无法访问,要改成0.0.0.0

步骤1:确认屏幕设备编号

先运行这条命令查看所有avfoundation设备:

ffmpeg -f avfoundation -list_devices true -i ""

输出里会看到类似[AVFoundation indev @ 0x12345678] [0] FaceTime HD Camera(摄像头),[1] Capture screen 0(主屏幕)的内容,记下屏幕对应的编号(比如1)。

步骤2:改用WebM格式推流(浏览器直接支持)

把<屏幕编号>换成你查到的数字(比如1),运行这条命令:

ffmpeg -f avfoundation -framerate 15 -i "<屏幕编号>" -listen 1 -f webm -vcodec libvpx -preset ultrafast -tune zerolatency "http://0.0.0.0:8000/stream"

然后在浏览器访问http://你的Mac本地IP:8000/stream,就能看到屏幕流了。

步骤3:更低延迟的HLS方案

HLS需要生成m3u8索引和分片文件,先建临时目录:

mkdir -p /tmp/hls

再运行推流命令:

ffmpeg -f avfoundation -framerate 20 -i "<屏幕编号>" -c:v libx264 -preset ultrafast -tune zerolatency -f hls -hls_time 1 -hls_list_size 3 -hls_flags delete_segments /tmp/hls/stream.m3u8

最后用Python启动HTTP服务提供文件:

cd /tmp/hls && python3 -m http.server 8000

浏览器访问http://你的Mac本地IP:8000/stream.m3u8即可查看。

二、用Flask搭建带鼠标显示的网页端远程桌面

如果需要更灵活的控制(比如显示鼠标),可以用Flask+屏幕截图库实现:

1. 安装依赖

pip install flask mss pillow

mss是高效的跨平台屏幕截图库,比pyautogui性能更好。

2. 编写Flask脚本(app.py)

from flask import Flask, Response
import mss
from PIL import Image, ImageDraw

app = Flask(__name__)

def generate_frames():
    with mss.mss() as sct:
        monitor = sct.monitors[1]  # 1对应主屏幕,多屏幕可修改编号
        while True:
            # 截取屏幕
            img = sct.grab(monitor)
            # 转换为PIL图像格式
            frame = Image.frombytes('RGB', img.size, img.bgra, 'raw', 'BGRX')
            # 绘制鼠标位置(需额外安装pynput,注释掉则不显示)
            # from pynput.mouse import Controller
            # mouse = Controller()
            # x, y = mouse.position
            # draw = ImageDraw.Draw(frame)
            # draw.circle((x, y), 5, fill='red', width=2)
            # 转为JPEG字节流
            buffer = []
            frame.save(buffer, format='JPEG', quality=50)
            yield (b'--frame\r\n'
                   b'Content-Type: image/jpeg\r\n\r\n' + b''.join(buffer) + b'\r\n')

@app.route('/')
def index():
    return '''
    <html>
        <head>
            <title>Mac桌面共享</title>
        </head>
        <body>
            <h1>远程桌面</h1>
            <img src="/video_feed" width="100%">
        </body>
    </html>
    '''

@app.route('/video_feed')
def video_feed():
    return Response(generate_frames(),
                    mimetype='multipart/x-mixed-replace; boundary=frame')

if __name__ == '__main__':
    app.run(host='0.0.0.0', port=8000, debug=False)

3. 运行脚本并访问

python3 app.py

浏览器访问http://你的Mac本地IP:8000,就能看到实时桌面。如果需要显示鼠标,安装pynput(pip install pynput)并取消脚本中的注释即可。

注意事项

  • Mac需要授权屏幕录制权限:系统偏好设置→安全性与隐私→隐私→屏幕录制,勾选运行命令的程序(终端、IDE等),否则无法采集屏幕。
  • 局域网访问需确保Mac和其他设备在同一WiFi下,且Mac防火墙允许8000端口的入站连接。

内容的提问来源于stack exchange,提问作者Akella Niranjan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 08:55:12