V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
爱意满满的作品展示区。
molika
V2EX  ›  分享创造

开源,肝爆了! 基于 WebRTC 端到端的桌面共享/文本传输/文字传输已经都达到了可用状态!撒花~

  •  4
     
  •   molika · 12 天前 · 8036 次点击

    没想到拖了这么久,当初顶的小目标终于实现了! 文件传输/桌面共享 已经都支持了!!!! 撒花~ 撒花~ 撒花~

    项目起因是因为要经常传一些文件到 win 服务,下载网盘啥的好麻烦,又要登录又要先下载客户端,也想了解下 webrtc 技术。摸着需求就开始过河了!!

    终于这个上个周末把 UI 一些状态 桌面共享 文件传输 ack 都加上了。

    项目后端 Go 前端是 react nextjs GO server 只作为信令转发,p2p 建立后传数据文本/共享桌面/文件都不会经过服务器,安全!隐私!

    开源地址 https://github.com/MatrixSeven/file-transfer-go

    体验地址 https://transfer.52python.cn/

    AjGeuSn rKFhPYK

    备注:

    本项目和 server 不提供降级服务,p2p 建立失败,则无法传输任何数据。 p2p 的建立成功与否 取决于你的 nat 网络模型。

    下面是 AI 提供的 nat 场景 ,大家可以参考:

    NAT 类型主要分为以下四种,根据其对外部连接的限制程度不同,影响打洞的成功率:全锥形 NAT ( Full Cone NAT ) 特点:内部主机的 IP 和端口映射到固定的公网 IP 和端口,任何外部主机都可以通过该公网地址访问内部主机。 打洞友好程度:最高,易于穿透。

    地址限制锥形 NAT ( Restricted Cone NAT ) 特点:只有内部主机主动向外部主机发送过数据包的外部 IP ,才能通过 NAT 的公网 IP 和端口访问内部主机。 打洞友好程度:较高,但需要先建立通信。

    端口限制锥形 NAT ( Port Restricted Cone NAT ) 特点:进一步限制,只有内部主机主动向外部主机的特定 IP 和端口发送过数据包,外部主机才能从相同的 IP 和端口访问内部主机。 打洞友好程度:中等,需要精确的端口匹配。

    对称 NAT ( Symmetric NAT ) 特点:每次与不同外部主机通信时,NAT 分配的公网端口都不同,映射关系严格依赖于目标 IP 和端口。 打洞友好程度:最低,穿透难度最大。

    第 1 条附言  ·  12 天前
    佬们,服务器上不会有任何设备信息。 所以没法通过设备默认取匹配建立链接,只能通过取件码。如果有特殊需求项目是 MIT ,大家 fork 走随便改,随便用。

    这个项目的初心就是 即开即用,传输文件/共享桌面/同步文字 。

    因为自己高频用这种东西,了解相关技术后也想自己造一造,搞一个 UI/功能符合自己操作习惯的工具。原则就是直观,直接,不拖泥带水,开门即是主题,传输文件 or 文字 or 共享桌面。

    最后 尽管现在达到了能用的状态,但是依旧还有很多小问题,大家可以提 issue 来反馈 或者 发表建议,也可以 PR 合并一些自己想要的功能和 fix ,都欢迎哈。

    近期计划:
    1.docker 镜像发布
    2.桌面共享开启语音通道开关,增加实用性
    3.用户自定义 stun/turn 服务配置
    4.增加类似于 RTT 的机制,最大化利用带宽
    101 条回复    2025-08-28 20:46:45 +08:00
    1  2  
    blankmiss
        1
    blankmiss  
       12 天前
    如果是公司局域网呢 是不是可以直接打通
    zhhbstudio
        2
    zhhbstudio  
       12 天前
    先 star 一个
    molika
        3
    molika  
    OP
       12 天前
    @blankmiss 是的 发现是局域网 ,直接就内网传输了。
    molika
        4
    molika  
    OP
       12 天前
    @zhhbstudio 感谢老哥的鼓励嘿嘿
    yuanxing008
        5
    yuanxing008  
       12 天前
    op 解决了传统 RTC 打洞服务和信令服务在企业防火墙中被拦截的问题吗?
    XhivaW
        6
    XhivaW  
       12 天前
    先 star 一个+1
    回头试试 看能不能战胜奇安信
    sssxyd
        7
    sssxyd  
       12 天前
    star 一个,桌面共享还是蛮有用的
    yh7gdiaYW
        8
    yh7gdiaYW  
       12 天前
    试了下手机向 PC 传文件很好用,已 star 。提个建议,取件码用 6 位数字太简单了
    andyskaura
        9
    andyskaura  
       12 天前
    有个类似的,大家伙儿可以体验一下 https://explorer.kuraa.cc/#/
    vfs
        10
    vfs  
       12 天前
    诚信请教: 国内打洞成功的概率有多大?
    capric
        11
    capric  
       12 天前
    nice job ,也有很多类似的大热产品可供参考:
    https://send-anywhere.com/
    https://github.com/localsend/localsend
    capric
        12
    capric  
       12 天前
    @vfs 我们前些年做视频会议的布点数据来看,40%-50%左右
    molika
        13
    molika  
    OP
       12 天前
    @yuanxing008 p2p 被封啥,是没法建立链接的
    molika
        14
    molika  
    OP
       12 天前
    @sssxyd 是的 临时共享一下桌面 分享一些东西 还是很好的。 后面可以考虑开分享左面的时候,语音通道也同步传输起来。这样可能更实用一些。
    molika
        15
    molika  
    OP
       12 天前
    @yh7gdiaYW 的确 后面更新成字母+数字。看着也舒服一些
    molika
        16
    molika  
    OP
       12 天前
    @vfs 说实话 这个我真的不是很清楚。
    molika
        17
    molika  
    OP
       12 天前
    @capric flutter 点赞!!
    woshi233
        18
    woshi233  
       12 天前
    试了下感觉不错,已 Star✨
    deepseek
        19
    deepseek  
       12 天前
    一直不成功,是局域网内的 2pc 主机
    molika
        20
    molika  
    OP
       12 天前
    @deepseek 看一下防火墙 和 是否禁止了 UDP
    molika
        21
    molika  
    OP
       12 天前
    @woshi233 感谢鼓励
    NessajCN
        22
    NessajCN  
       12 天前
    我也写过,甚至也是用的 webrtc
    但最后还是用回 kde connect
    molika
        23
    molika  
    OP
       12 天前
    @deepseek chrome://webrtc-internals/ 看一下 webrtc 状态
    molika
        24
    molika  
    OP
       12 天前
    @NessajCN kde connect 挺好的 没必要自己写。
    yangggg
        25
    yangggg  
       12 天前
    别的不说,这界面是真漂亮
    zhoublackcat
        26
    zhoublackcat  
       12 天前
    能不能固定配对设备呢,每次输入取件码,比较麻烦
    vfs
        27
    vfs  
       12 天前
    @capric 感谢分享,这个成功率挺不错。
    kehuai
        28
    kehuai  
       12 天前
    有啥快捷键么,全屏了,没法退出了-
    下一步是不是做成远控了 哈哈哈
    wangtian2020
        29
    wangtian2020  
       12 天前
    网页版 rustdesk
    vfs
        30
    vfs  
       12 天前
    @molika 那正好你可以在你的服务端统计一下这个概率。 多问一句: 有没有局域网环境做优化?(我个人)在局域网中的互传文件还用的挺多。
    wsseo
        31
    wsseo  
       12 天前
    纯内网无法用吧?开始的信令怎么交互?
    Rorysky
        32
    Rorysky  
       12 天前
    太厉害了,项目难度高
    yuanxing008
        33
    yuanxing008  
       12 天前
    @molika 之前在前司做视频会议的产品的时候,是通过企业防火墙预授权指定打洞端口来建连的,没想到这么多年过去了 RTC 的弊端还是没有得到改善
    fffq
        34
    fffq  
       12 天前
    一个人搞的?
    superychen
        35
    superychen  
       12 天前
    win11 上 vmware 虚拟机 ubuntu24.04 ,nat 模式网络,在虚拟机上运行程序,开启桌面共享,win11 访问,无法建立连接
    Vintingb
        36
    Vintingb  
       12 天前
    提个建议,stun 服务器可以用户自行输入
    molika
        37
    molika  
    OP
       12 天前
    @yangggg 原则就是直观,直接,不拖泥带水,开门即是主题,传输文件 or 文字 or 共享桌面。
    molika
        38
    molika  
    OP
       12 天前
    @Vintingb 这个在 TODO 计划了。
    molika
        39
    molika  
    OP
       12 天前
    @fffq 是的
    molika
        40
    molika  
    OP
       12 天前
    @wsseo 没办法用。
    molika
        41
    molika  
    OP
       12 天前
    @superychen 可以 chrome://webrtc-internals 看一下
    molika
        42
    molika  
    OP
       12 天前
    @yuanxing008 感觉这个难以改善
    molika
        43
    molika  
    OP
       12 天前
    @zhoublackcat 服务器没有任何存储逻辑,做不到这些
    molika
        44
    molika  
    OP
       12 天前
    @kehuai f11 试一试?
    molika
        45
    molika  
    OP
       12 天前
    @Rorysky 状态有点多。其他还好
    molika
        46
    molika  
    OP
       12 天前
    @vfs 服务器上没有记录任何数据 而且我这个临时 demo 的数据量也不够。
    molika
        47
    molika  
    OP
       12 天前
    @wangtian2020 rustdesk 难道 100% 我的难度 0.001%
    a852695
        48
    a852695  
       12 天前
    和 CuteHttpFileServer/chfs 功能有点像,不过好像 chfs 并不是 P2P ,是一个 HTTP Server 服务器,平时会用这个软件的 webda 功能,映射到本地 PC 的网络磁盘,存取文件会非常方便。

    http://iscute.cn/chfs

    如果软件能带上 webdav 就更方便通用了
    wsseo
        49
    wsseo  
       12 天前
    信令服务器是什么,stun 服务器是什么
    dufzh
        50
    dufzh  
       12 天前
    牛啊,STAR 学习一下
    midraos
        51
    midraos  
       12 天前
    局域网内大概率无法连接,偶尔能连接成功
    thomaspaine
        52
    thomaspaine  
       12 天前
    局域网支持组播吗?
    Eddiegaao
        53
    Eddiegaao  
       12 天前
    不懂技术,单纯用户角度来说,传输速度有点慢...
    96
        54
    96  
       12 天前
    太棒了,这样的聚合服务真的很需要,还可以自己部署。给个⭐
    rcj6056
        55
    rcj6056  
       12 天前
    好奇你是怎么添加的图片在这个帖子里面的 ~
    surbomfla
        56
    surbomfla  
       12 天前
    已 star ,共享桌面支持 远程操控吗?
    tavimori
        57
    tavimori  
       12 天前
    企业内网用应该还是需要企业内网的 STUN 服务器吧。
    Jasonfly
        58
    Jasonfly  
       12 天前
    先 star 一下,晚上试试
    molika
        59
    molika  
    OP
       12 天前
    @wsseo 信令服务器是 是 用来交换 ICE 打洞数据的。 也是就是这个开源程序的 server UI 上的 ws 链接的服务器。STUN 服务器的主要作用是帮助位于 NAT 网络(网络地址转换)后面的设备发现其公共 IP 地址和端口号,以便在设备之间建立直接的 P2P 通信。
    molika
        60
    molika  
    OP
       12 天前
    @Eddiegaao 取决于你的两个设备带宽。 后面引入 RTT 会进一步优化传输速度
    molika
        61
    molika  
    OP
       12 天前
    @surbomfla 不支持。
    molika
        62
    molika  
    OP
       12 天前
    @96 感谢佬
    molika
        63
    molika  
    OP
       12 天前
    @rcj6056 v2 有教程。你搜索一下
    molika
        64
    molika  
    OP
       12 天前
    @tavimori 对的。
    molika
        65
    molika  
    OP
       12 天前
    @thomaspaine 不支持
    kevin249
        66
    kevin249  
       12 天前
    先 star 后再用
    ahjsrhj
        67
    ahjsrhj  
       12 天前
    感谢分享, 很好用
    提个意见, 取件码可否屏蔽掉 O 和 0
    第一次出现很容易搞混不知道是哪个
    SnowHall
        68
    SnowHall  
       12 天前
    可以的,就喜欢这样开箱即用的产品,必须 star ,很棒!
    InDom
        69
    InDom  
       12 天前
    东西很棒, 是我一直想要的东西!感谢.

    给几个非专业意见, 楼主可以自行判断需求是否合理且可实现.

    可以先创建房间, 后选择文件, 比如我通过 https://transfer.52python.cn/#{roomId} 打开, 就默认是这个房间.

    或者打开页面就创建一个临时房间, 手机扫码就直接进入房间.

    如果两个(或多个)设备都打开了同一个 roomId 则相互显示对方的设备名. 我可以直接拖拽文件到对应的设备后两个设备直接联通发送文件(或文本). 有文件投递给自己时直接弹窗要求保存即可.

    页面效果可以参考 https://drop.fydeos.com/ 不过他们是局域网发现, 和楼主实现的功能还不一样.

    也许还可以把他们这个局域网自动发现也搞出来(后话).
    vfxx
        70
    vfxx  
       12 天前
    很好的产品, 同运营商打洞成功
    Raw778
        71
    Raw778  
       12 天前
    局域网传文件,如果中途中断了,就无法重连了。
    yufeng0681
        72
    yufeng0681  
       12 天前
    做成个集群项目,走商业流程呢?
    1 、 服务器大家都可以建立, 注册到你定义的网络 [等做大了,可以考虑做有门槛的服务器网络]
    2 、作为服务器,提供的是信令服务,建立 P2P 打动成功 [让各种情况下的终端机都能 P2P 连接,包括 IPV6]
    3 、服务器辅助建立数据通道成功收取一次费用(比如 2 分钱一次)
    4 、终端机做成 SDK 和业务代码(当例子用),让第三方参考开发点对点类的应用:
    4.1 、视频通话
    4.2 、远程协助
    4.3 、私家数字花园
    5 、 你就赚管理系统的费用,服务器提供者赚建立数据通道的费用,消费者支付点对点应用的钱,第三方应用开发赚消费者的钱 [这块可以先开发成扣费模式, 给消费者 10 块钱的信用抵扣钱,用于发展真正有需求的用户,有黏性的用户]
    kfpenn
        73
    kfpenn  
       12 天前
    前端时间也做过 p2p ,用的 libp2p ,网络环境太复杂了,打洞是个问题
    deplives
        74
    deplives  
       12 天前
    佬,是不是太强了
    Lemonadeccc
        75
    Lemonadeccc  
       12 天前
    做 webrtc 的很少,你很厉害
    honkew
        76
    honkew  
       12 天前
    我也做了一个
    https://record.rw2.cc/
    zhangk23
        77
    zhangk23  
       11 天前
    lizhenda
        78
    lizhenda  
       11 天前
    做的很好,试用了下很方便!
    peerless
        79
    peerless  
       11 天前
    谢谢分享
    MYDB
        80
    MYDB  
       11 天前 via iPhone
    可惜我是一刀切禁用了浏览器的 udp
    hexiaowu1993
        81
    hexiaowu1993  
       11 天前
    大佬,真的强!
    Bo0
        82
    Bo0  
       11 天前
    已 star
    可能是网络问题,RTC 始终未连接。小白会一脸懵,建议加解决引导。
    另外不知道是否支持非局域网,手机关了 WiFi ,也是 RTC 未连接。
    molika
        83
    molika  
    OP
       11 天前
    @ahjsrhj 的确是
    molika
        84
    molika  
    OP
       11 天前
    @SnowHall 感谢支持
    molika
        85
    molika  
    OP
       11 天前
    @InDom 恩德,后面看情况扩展功能,没想那么多 自己需求 也想了解一下 就开干了。
    molika
        86
    molika  
    OP
       11 天前
    @Raw778 已知问题,后续看看怎么 fix 这种情况
    molika
        87
    molika  
    OP
       11 天前
    @yufeng0681 感谢您的建议, 说实话 自己的小需求,顺带学习一下 没想这么多,直接就开始干了,么想到大家对这个东西热度竟然这么高。
    molika
        88
    molika  
    OP
       11 天前
    @kfpenn 太复杂 不可控因素太多
    molika
        89
    molika  
    OP
       11 天前
    哇偶 不错 这个房间里面互相打洞吗
    molika
        90
    molika  
    OP
       11 天前
    @Bo0 支持非局域网,但是受限于所处网络环境 NAT 模型 防火墙之类的。 主要看是否能打洞成功
    molika
        91
    molika  
    OP
       10 天前
    @Livid 站长老哥,我这个帖子咋突然变成推广了?辛苦忙看一下。
    Livid
        92
    Livid  
    MOD
    PRO
       10 天前
    @molika 不是我移动的。

    但是你的这个主题我现在会从 /go/promotions 移动到 /go/create 并赠送置顶。
    molika
        93
    molika  
    OP
       10 天前
    @Livid 谢谢老哥。 虽然没理解为啥会自动移动,但是还是感谢老哥的及时回复和处理,点赞!!
    Livid
        94
    Livid  
    MOD
    PRO
       10 天前
    @molika 除了我之外,这里还有好几位管理员有移动权限。

    每个人的判断不一样也不可能一样。
    molika
        95
    molika  
    OP
       10 天前
    @Livid 晓得了,感谢解答。
    iamtsm
        96
    iamtsm  
       10 天前
    @honkew
    @molika
    大佬们都很强,刷到了这个帖子就把我之前做的也拿出来亮亮相,https://github.com/tl-open-source/tl-rtc-file 😁
    molika
        97
    molika  
    OP
       10 天前
    @iamtsm 你这才是真大佬! 点赞
    hongchends1
        98
    hongchends1  
       10 天前
    666
    honkew
        99
    honkew  
       10 天前
    @iamtsm 这个强👍
    wenyifancc
        100
    wenyifancc  
       9 天前
    期待支持配置 turn 服务来兼容跨网转发的场景
    1  2  
    关于   ·   帮助文档   ·   自助推广系统   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2706 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 32ms · UTC 12:51 · PVG 20:51 · LAX 05:51 · JFK 08:51
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.