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

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

  •  4
     
  •   molika · 3 天前 · 6768 次点击

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

    项目起因是因为要经常传一些文件到 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 条附言  ·  3 天前
    佬们,服务器上不会有任何设备信息。 所以没法通过设备默认取匹配建立链接,只能通过取件码。如果有特殊需求项目是 MIT ,大家 fork 走随便改,随便用。

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

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

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

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

    http://iscute.cn/chfs

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

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

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

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

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

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

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

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

    每个人的判断不一样也不可能一样。
    molika
        95
    molika  
    OP
       1 天前
    @Livid 晓得了,感谢解答。
    iamtsm
        96
    iamtsm  
       23 小时 36 分钟前
    @honkew
    @molika
    大佬们都很强,刷到了这个帖子就把我之前做的也拿出来亮亮相,https://github.com/tl-open-source/tl-rtc-file 😁
    molika
        97
    molika  
    OP
       23 小时 4 分钟前
    @iamtsm 你这才是真大佬! 点赞
    hongchends1
        98
    hongchends1  
       21 小时 10 分钟前
    666
    honkew
        99
    honkew  
       19 小时 16 分钟前
    @iamtsm 这个强👍
    关于   ·   帮助文档   ·   自助推广系统   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5167 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 28ms · UTC 05:57 · PVG 13:57 · LAX 22:57 · JFK 01:57
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.