V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
javalaw2010
V2EX  ›  Android

用 tvbox 遇到一个奇怪的问题

  •  1
     
  •   javalaw2010 · 224 天前 · 5817 次点击
    这是一个创建于 224 天前的主题,其中的信息可能已经有所发展或是发生改变。
    导入了“饭太硬”的配置以及 fanmingming ipv6 直播源,手机网络支持 ipv6 。

    测试表现如下:
    1. 在没有开启 clash meta 的情况下,正常播放。
    2. 开启 clash ,并设置 ipv6 和 dns ipv6 的覆写,浏览器访问 ipw.cn ,看到是有 ipv6 的地址的。但是 tvbox 并不能正常播放 ipv6 的源,clash 的日志里看不到任何关于这些源的 log 。
    3. clash 设置同上,直接将 ipv6 源复制进 miui 的系统浏览器,可以正常播放。
    4. 在电脑的 mumu 模拟器上安装 tvbox ,导入相同的配置,在宿主机上开启 clash 的 tun 模式和 ipv6 ,也同样不能播放。

    由于 tvbox 是开源的,源码来自 https://github.com/takagen99/Box ,本着自己动手丰衣足食的原则,于是尝试 clone 下来 debug 了一下,经过一上午艰苦卓绝的单步跟踪,发现最后错误似乎发生在了 native 层,在开启 ijk 的 debug log 后,发现 native 层的播放器对 ipv6 源报了 no route to host 的错。然后我想换个播放器试试,于是按图索骥,发现软件会优先使用配置文件中定义的播放器,于是硬编码使用 exo 播放器,此时可以正常播放了,至此可以初步推断可能是 ijk 的问题。

    不过这份源码似乎修改了原版的 ijk ,并没有提供修改后的源码,只丢了几个 so 文件在那里。鉴于我并非安卓开发,对于 jni/C 开发更是一窍不通,想要修复似乎不是一件容易的事情(谁知道呢,万一我某个环节没做对导致以上的推断全是错的呢),所以想厚着脸皮前来求援,有没有大佬愿意挑战一下(用爱发电)尝试修复,我愿祝您下半年跳槽薪资翻番。
    第 1 条附言  ·  222 天前

    我似乎找到原因了,所以自己来APPEND一下。

    在之前的尝试中,根据各种情况下的表现,我推测是ijk播放器的问题,但其实这是虚假的表象引导我走向了一个误区。

    在浅显地研究了安卓VpnService后发现,安卓的VpnService是基于TUN的,但从API29开始,可以为VPN附加一个HTTP代理,也就是说,如果应用支持系统代理,便会走系统代理,否则便会走TUN。

    此时我灵光一闪:会不是是系统浏览器支持系统代理,而tvbox的ijk不支持系统代理从而走了TUN导致的现象不一致呢?于是我到Clash Meta的设置里,关闭了"为VpnService附加HTTP代理"的选项,然后在系统浏览器输入了IPV6的地址,果然此时浏览器也无法访问该地址了。

    于是我得到了一个新的结论:CMFA的TUN不支持ipv6,至少不支持直接ipv6地址的访问。

    那么我能不能为CMFA添加上ipv6的支持呢,依然本着自己动手丰衣足食的精神,说干就干,clone了CMFA的源码,随后在浅显地了解了Android VpnService的相关API后,我猜测是没有调用addAdress添加ipv6的地址,导致系统认为该TUN不支持ipv6,直接返回了No Route to host错误,于是我找到addAdress调用的地方,硬编码添加了ipv6的参数来验证我的猜测:addAddress(TUN6_GATEWAY, TUN6_SUBNET_PREFIX)

    编译运行一气呵成,打开tvbox验证想法,果然成功了?!

    不过理想很丰满,现实很骨感,在我打开了clash的log之后,重新验证,发现虽然看起来一起正常了,但是clash的log里面依然没有找个这个ipv6的相关日志,这表明也许流量并没有真正进入clash的内核。想要CMFA真正支持ipv6,也许还有很多工作要做。

    后续的话我可能会提个issue给CMFA,毕竟我对安卓开发、梯子APP的开发也确实没什么兴趣,而我花了不少时间在这上面,只是试图去找到一个真相。

    5 条回复    2024-07-15 16:29:07 +08:00
    gunner168
        1
    gunner168  
       224 天前 via iPhone
    mumu 好像不支持 ipv6
    javalaw2010
        2
    javalaw2010  
    OP
       224 天前
    @gunner168 验证了,好像确实如此,mumu 不支持 ipv6 。
    KissingTheFire
        3
    KissingTheFire  
       166 天前 via Android
    @javalaw2010 遇到同样问题,先是 cmfa 观看不了 tvbox 的 ipv6 直播源,换 box4magisk 的 mihomo 内核还是一样,日志一堆 connection refused ,然后搜到这个 https://zhmoegirl.com/posts/e98ecfc2afd5 ,纠结要不要换回 singbox ,但 singbox 又不支持负载均衡。
    iutopia
        4
    iutopia  
       165 天前
    @gunner168 #1 雷神呢?好像雷神模拟器号称支持 ipv6
    KissingTheFire
        5
    KissingTheFire  
       165 天前 via Android
    @javalaw2010 自己折腾解决了,tun 模式的问题,box4magisk 换 tproxy 模式全部正常了。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1024 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 22ms · UTC 19:30 · PVG 03:30 · LAX 11:30 · JFK 14:30
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.