做了一个 iOS 全局屏幕翻译 App,基于 ReplayKit + PiP 技术 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
爱意满满的作品展示区。
Maxwin
V2EX    分享创造

做了一个 iOS 全局屏幕翻译 App,基于 ReplayKit + PiP 技术

  •  
  •   Maxwin 3 月 24 日 812 次点击

    各位好,最近做了一个 iOS App ,功能是全局屏幕实时翻译。简单来说就是:开启录屏 → OCR 识别屏幕文字 → 翻译 → 以画中画悬浮窗显示结果。任何 App 里都能用,不需要 root 、不需要辅助功能权限。

    核心技术栈

    • ReplayKit Broadcast Extension 捕获屏幕帧
    • Vision framework OCR 文字识别
    • Apple Translation framework 离线翻译
    • AVPictureInPictureVideoCallViewController 画中画悬浮窗
    • 纯 SwiftUI,零第三方依赖

    工作流程

    屏幕录制 (ReplayKit) → 帧捕获 (CMSampleBuffer) → PiP 区域检测 & 排除 → OCR 区域图像存入 App Group 容器 → Darwin Notification 通知主 App → OCR (Vision) → 文本拼接 → 翻译 (Translation) → 文本排版引擎 → PiP 覆盖层更新 

    为什么做这个

    市面上的翻译 App 要么只能翻译截图,要么需要复制粘贴文字。我想要的是:打开任何 App (游戏、Twitter 、网页),屏幕上的外语直接变中文,实时更新。

    技术上最大的挑战是 PiP 自检测画中画窗口本身也在屏幕上,OCR 不能把自己显示的翻译结果再识别一遍。这个问题花了不少时间,后面单独写一篇讲。

    目前支持的语言

    源语言:英、日、韩、法、德、西、葡(巴西)、俄、泰、越 目标语言:简中、繁中、英、日、韩、法、德、西

    完全离线运行,翻译资源首次使用时下载,之后不需要网络。

    App Store 搜 TransPeek 就能找到,免费有 30 分钟体验额度。有什么问题欢迎交流。

    7 条回复    2026-03-29 09:27:08 +08:00
    McGrady222
        1
    McGrady222  
       3 月 24 日
    不错的想法
    Maxwin
        2
    Maxwin  
    OP
       3 月 24 日
    @McGrady222 已经上线初始版本了 :)
    337136897
        3
    337136897  
       3 月 25 日
    刚试了,这个翻译的画中画窗口自己会消失的,并且不能全屏识别啥的,要移动哪,再往上一点才是翻译的区域。 不太好用
    aero99
        4
    aero99  
       3 月 25 日
    有点意思,我是通过快捷指令,截图发送给 AI 来处理的
    Maxwin
        5
    Maxwin  
    OP
       3 月 27 日
    @337136897 是有全屏数据的,但是 PiP 窗口太小了,所以就做成了当前的交互。翻译窗口消失 1.3.0 修复了一个 bug 。
    Maxwin
        6
    Maxwin  
    OP
       3 月 27 日
    @aero99 这种方式需要切换 app 吗
    aero99
        7
    aero99  
       3 月 29 日
    @Maxwin #6 不需要的,出发点是苹果商店 APP 里面软件介绍有些是英文不允许复制或长按弹出菜单翻译
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     1274 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 42ms UTC 23:48 PVG 07:48 LAX 16:48 JFK 19:48
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86