写了个 把手机作为电脑扬声器 的 app,成功上架 google play - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
爱意满满的作品展示区。
sduoduo233
V2EX    分享创造

写了个 把手机作为电脑扬声器 的 app,成功上架 google play

  •  1
     
  •   sduoduo233 2025 年 11 月 25 日 2435 次点击
    这是一个创建于 52 天前的主题,其中的信息可能已经有所发展或是发生改变。

    下载

    https://play.google.com/store/apps/details?id=cc.viaaudio

    https://www.viaaudio.cc/

    功能

    唯一的功能是把电脑的音频推流到手机。感觉这个需求很小众,不太好推广

    还有一个副功能是可以做到一个电脑同时连两个蓝牙耳机:PC 端直接连第一个蓝牙耳机,用 ViaAudio 把音频串流到手机,然后用手机连第二个蓝牙耳机。

    pKlfOQAkjB0DqEyMKjnBKd7m7l2I3brl.webp 2cotz0KockmT5IMfmn4bzMKfcflv1ZJc.webp

    起源

    一年前我注册了 google play 开发者,想上传一个自己写的 VPN 应用。但是正好赶上 google play 政策更新,新政策禁止个人开发者上架 VPN 应用,只能用公司账户上架。我没有公司账户,所以只能放弃。

    一个月多前收到 goolge play 邮件,说如果我账户再不发布任何 app 就要被关闭了。为了不浪费注册花的 $25 ,加上当时临时需要扬声器,就写了这个 把手机作为电脑扬声器 的 app 。

    如何找 tester

    nodeseek.com 发帖找的,大家很热情,很快就攒够 12 个人了
    我当时发的帖子 https://www.nodeseek.com/post-484194-1

    技术实现

    桌面端是用 c 写的。UI 用的 clay + sokol。用 clay 是因为之前看了一个 youtube 视频 感觉很有意思,就借着这次机会尝试一下。另外一个原因是 clay 和 sokol 都是 c header only 的,所以不用折腾 cmake / makefile 之类的构建系统,直接 gcc main.c 就能编译。声卡录音用的是 miniaudio,这个也是 c header only ,只下载 .h 文件就能用。

    音频推流我尝试过用 rtmp ,但发现延迟很高。最终决定手搓推流,用 miniaudio 录音以后,转成 PCM 格式,直接用 udp 发给 app 。app 进行 udp 乱序重组。udp 丢包就直接不管了,同局域网下丢包率应该不高。现在延迟能做到和蓝牙耳机差不多(个人凭感觉得出的结论,没有认真测试过)

    30 条回复    2025-12-02 14:13:48 +08:00
    wu67
        1
    wu67  
       2025 年 11 月 25 日
    确实挺小众, 早些年还有 upnp 方案, 在同一局域网的手机和电脑之间互相作为输出设备
    win11
        2
    win11  
       2025 年 11 月 25 日 via Android
    玩过类似的工具,但是将移动端设备作为 pc 的麦克风、摄像头,键盘鼠标…
    liuzimin
        3
    liuzimin  
       2025 年 11 月 25 日 via Android
    我用的是 AudioRelay
    sduoduo233
        4
    sduoduo233  
    OP
       2025 年 11 月 25 日 via Android   1
    @liuzimin audiorelay 有广告,所以就自己写了一个
    koa
        5
    koa  
       2025 年 11 月 25 日
    “说如果我账户再不发布任何 app 就要被关闭了” Google Play 开发者账号还有这个规定?
    sduoduo233
        6
    sduoduo233  
    OP
       2025 年 11 月 25 日
    @koa 有这个规定的

    Donkor
        7
    Donkor  
       2025 年 11 月 25 日
    确实好小众,目标群体是哪一些
    livib
        8
    livib  
       2025 年 11 月 25 日
    似乎在某些特殊场景下确实可能会有用,但我似乎没有
    andykuen959595
        9
    andykuen959595  
       2025 年 11 月 25 日
    必须 Win11 啊
    greatlion
        10
    greatlion  
       2025 年 11 月 25 日
    好棒 还没想到对我有啥用。。。
    sduoduo233
        11
    sduoduo233  
    OP
       2025 年 11 月 25 日 via Android
    @andykuen959595 win10 应该也可以,只不过手头没有 win10 电脑,没测试过。
    Routeros
        12
    Routeros  
       2025 年 11 月 25 日
    挺不错的,能不能接加一个功能:设置电脑是否同时播放音频。 目前听到了两个声音。
    nekoneko
        13
    nekoneko  
       2025 年 11 月 25 日
    zerotier 公司, 家, 手机 组网
    公司电脑在机房, 所以没有扬声器,
    那么我用公司电脑 mstsc 家里电脑的时候, 可以用这个来接收音频?

    但是试了一下不太行.
    nekoneko
        14
    nekoneko  
       2025 年 11 月 25 日
    @nekoneko 断开手机的蓝牙耳机后, 可以用扬声器播放声音...
    nekoneko
        15
    nekoneko  
       2025 年 11 月 25 日
    @nekoneko #14 重启 app 后, 用蓝牙耳机也可以了
    xi4oyu
        16
    xi4oyu  
       2025 年 11 月 25 日
    我也写过这样的工具,当时台式机没音响就想到这个需求,当时是在电脑上启动一个 python web 服务负责录音,然后手机打开网站用 js 回放的,写得非常粗糙
    sduoduo233
        17
    sduoduo233  
    OP
       2025 年 11 月 25 日 via Android
    @Routeros

    Linux 上可以用 `pactl load-module module-null-sink sink_name="virtual_speaker" sink_properties=device.description="virtual_speaker"` 创建一个虚拟扬声器,把系统默认输出改成这个虚拟的,然后在 viaaudio 里选虚拟扬声器

    Windows 上应该也可以用虚拟扬声器 比如这个 https://vb-audio.com/Cable/index.htm
    Lyet813
        18
    Lyet813  
       2025 年 11 月 25 日 via Android
    我现在正常用 AudioRelay ,缺点是每次电脑重启后无法自动连接,op 有做这个功能吗?
    craftsmanship
        19
    craftsmanship  
       2025 年 11 月 25 日 via Android
    牛哇 用 C 写 UI
    achong
        20
    achong  
       2025 年 11 月 25 日
    有 mac 版吗,电脑链接两个蓝牙耳机有点需求
    HeyWeGo
        21
    HeyWeGo  
       2025 年 11 月 25 日
    sduoduo233
        22
    sduoduo233  
    OP
       2025 年 11 月 25 日 via Android
    @Lyet813 开机自启不太好做。viaaudio 现在是绿色软件,只有一个 exe ,不用安装。用户要是把 exe 移走了自启就失效了。
    sduoduo233
        23
    sduoduo233  
    OP
       2025 年 11 月 25 日 via Android
    @achong 已经做出来了 过几天发
    sduoduo233
        24
    sduoduo233  
    OP
       2025 年 11 月 25 日 via Android
    @Lyet813 下个版本可以考虑做一个安装版的
    HeyWeGo
        25
    HeyWeGo  
       2025 年 11 月 25 日
    刚刚看了下,最低 windows 11? 需要用到某些新特性吗?
    sduoduo233
        26
    sduoduo233  
    OP
       2025 年 11 月 25 日 via Android
    @HeyWeGo 最低 win11 是因为我没有 win10 ,所以不知道 win10 能不能用 如果老哥有 win10 帮忙测试一下,能用的话我就把这个要求删了
    leomikezee
        27
    leomikezee  
       2025 年 11 月 29 日
    有做 ios 版的打算吗
    sduoduo233
        28
    sduoduo233  
    OP
       2025 年 11 月 29 日 via Android
    @leomikezee 我没有 macbook iphone ,暂时没有打算
    Ccf
        29
    Ccf  
       2025 年 11 月 30 日
    mark,在办公室可以用
    koa
        30
    koa  
       2025 年 12 月 2 日
    @sduoduo233 学习了,不过我有一个开发者账户已经好几个月了,也没上传过应用,一直是正常的。
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2724 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 64ms UTC 14:42 PVG 22:42 LAX 06:42 JFK 09:42
    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