V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
ckk163
V2EX  ›  问与答

想问下开发一款实时房间语音聊天的软件类似 yy,需要花多少钱。运营的话在线 5000 人的话需要多大的带宽,什么配置的服务器

  •  
  •   ckk163 · 2015-08-24 12:17:28 +08:00 · 9504 次点击
    这是一个创建于 3381 天前的主题,其中的信息可能已经有所发展或是发生改变。

    如题
    或许问题很菜 希望可以真诚的解答下疑惑。感谢~~

    65 条回复    2015-08-24 20:33:20 +08:00
    402645707
        1
    402645707  
       2015-08-24 12:40:47 +08:00 via Android
    同时在线 5000 人
    阿里云 10 月杭州大会欢迎你
    loading
        2
    loading  
       2015-08-24 12:43:04 +08:00 via Android
    早上看到知乎一个地方, yy 一个月,要差不多 2 亿块~
    lsylsy2
        3
    lsylsy2  
       2015-08-24 12:45:08 +08:00
    @loading 语音的话大概不用这么多?是因为做了视频直播才带宽暴涨的吧
    jamesfuxk
        4
    jamesfuxk  
       2015-08-24 12:48:47 +08:00
    好像是要不错的带宽才能支持这么多人同时在线语音的哦
    loading
        5
    loading  
       2015-08-24 12:48:51 +08:00 via Android
    @lsylsy2 人多,而且不卡不延时这些要求其实比视频要求更好。因为你看别人玩,和自己玩是不同的,卡几次就换软件,你觉得呢?
    loading
        6
    loading  
       2015-08-24 12:55:30 +08:00 via Android
    loading
        7
    loading  
       2015-08-24 12:58:05 +08:00 via Android
    上面提到的 yy 是 一季度… 2015Q2 , 1.3 亿!
    ckk163
        8
    ckk163  
    OP
       2015-08-24 13:35:42 +08:00
    感谢各位的热心回复,补充下不是 yy 的全部功能就一个房间实时聊天的,原来有个比较老的软件 teamspeak ,只是实现房间 1-20 人然后有很多房间能够实时语音聊天这样的功能。不考虑视频或者语音直播。
    ljbha007
        9
    ljbha007  
       2015-08-24 13:48:42 +08:00
    建议用腾讯的云服务 毕竟是自己老本行:
    http://www.qcloud.com/product/avc.html
    ljbha007
        10
    ljbha007  
       2015-08-24 13:50:11 +08:00
    用这个开发成本很低 但是使用费用大概 5000 人峰值是 15000 一个月
    ss098
        11
    ss098  
       2015-08-24 13:50:42 +08:00 via iPad
    据我感觉在使用 YY 时流量跑的不是太快,约 10 KByte / 秒,有时不到,场景是几个小伙伴时断时续的聊天。

    如果有优化良好的通讯协议,比如 10 KByte / 秒,那么每 MBits 可以支撑约 10 人。可以得出 5000 人至少需要 0.5 GBits 宽带。
    ckk163
        12
    ckk163  
    OP
       2015-08-24 14:04:29 +08:00
    @ljbha007 看了下腾讯的那个 计费简单粗暴呀 而且客户端开发得照腾讯的规则来比较受限制。其实我是想服务端和客户端能自主开发然后买带宽和服务器
    ljbha007
        13
    ljbha007  
       2015-08-24 14:11:35 +08:00
    @ckk163 其实有那个预算自己买服务器和带宽也不成问题
    ljbha007
        14
    ljbha007  
       2015-08-24 14:12:04 +08:00
    @ckk163 最近也在研究这个 感觉用 webrtc+turn 服务器是个可行的方案
    eae29qvc
        15
    eae29qvc  
       2015-08-24 14:12:32 +08:00
    需求简单的话 2 、 3 个月可以搞定
    5000 人大概 2-5MB 下行 50-100MB/s 上行(根据语音质量还有房间人数)
    一台 4 核服务器可以跑 5 万人左右(优化好的话可以更多)
    wy315700
        16
    wy315700  
       2015-08-24 14:16:34 +08:00   ❤️ 1
    @ss098
    不是这么算的,
    假如你发送语音的是 10KB/S ,一个聊天室有 100 人的话,你的语音是要发送给 100 人,假如 100 人同时在说话,那就要发送 100*100 = 10000 份,也就是 100MB/S
    ckk163
        17
    ckk163  
    OP
       2015-08-24 14:18:10 +08:00
    如果可以开发 软件在开房间后 语音的传输是 p2p 式的就好了 ,比如说房间有 5 个人聊天这 5 个的语音流可以不经过服务器而是说话本人只传输到其他人
    ckk163
        18
    ckk163  
    OP
       2015-08-24 14:20:07 +08:00
    @ss098 你这个计算的应该是 yy 使用的人所要用的带宽,不是 yy 客户端和服务端之间的带宽需求吧
    ss098
        19
    ss098  
       2015-08-24 14:22:43 +08:00 via iPad
    @wy315700 是的,是我考虑不周,多谢指出。

    @ckk163 场景就是我在跟几个小伙伴聊天,我实际使用的流量,据此推测服务器流量。
    akira
        20
    akira  
       2015-08-24 14:24:37 +08:00
    软件开发成本还好,后期带宽费用比较贵。

    另外,单台服务器肯定不能满足负荷的。
    ckk163
        21
    ckk163  
    OP
       2015-08-24 14:37:00 +08:00
    关键看能不能开发 p2p 式的 如果可以的话就可以极大压缩客户端与服务端直接的带宽需求,不知道有没有内行人进来指点下
    ckk163
        22
    ckk163  
    OP
       2015-08-24 14:39:44 +08:00
    @eae29qvc 可以给个联系方式 qq 啥的指点下嘛?
    lty1993
        23
    lty1993  
       2015-08-24 14:45:03 +08:00
    @wy315700

    这很明显不对的

    以纯语音 G729 为例,需要消耗 31.2Kbps 的带宽每路,每个用户需要 2 路,一上一下,也就是 62.4Kbps 。

    一个聊天室有 100 个人,就是 62.4Kbps * 100 。

    100 个人 10000 倍什么鬼?你的服务器只转发数据,客户端 Mixing ?你逗我?
    eae29qvc
        24
    eae29qvc  
       2015-08-24 14:49:21 +08:00
    @ckk163 p2p 要考虑的因素太多了,各种穿透,以国内的网络环境很麻烦,举个最简单的例子,一个 50 个人的房间,你要跟 49 个人说话, 2kB 每秒,也就是你需要 49x2=98kB 的上传带宽,国内的带宽大部分是上下行不对等的,标称 4m 的带宽也就 256kb 的上行,根本达不到要求
    eae29qvc
        25
    eae29qvc  
       2015-08-24 14:51:04 +08:00
    @lty1993 事实上就是客户端混合,服务器混合处理不了那么多数据
    lty1993
        26
    lty1993  
       2015-08-24 14:51:58 +08:00
    @eae29qvc 是的,这个场景完全不适合 P2P 。而且再加上 Voice Activity Detection 基本上可以服务器下行可以压缩到很小很小。
    ckk163
        27
    ckk163  
    OP
       2015-08-24 14:54:24 +08:00
    @eae29qvc 是这么计算的吗?我感觉这个解释是一个人说了一句话 50 人房间的话要传输 49 次在同一时间。不可以只传输一次然后有客户端负责协调复制到其他 49 个客户端吗 不知道我这个理解是不是可以实现
    lty1993
        29
    lty1993  
       2015-08-24 14:55:46 +08:00
    @eae29qvc 我这边 FreeSwitch 轻松处理 5000+路的 Conference Call 。。

    G711 双 E5 96G 内存
    eae29qvc
        30
    eae29qvc  
       2015-08-24 14:58:18 +08:00
    @ckk163 同步怎么办,语音实时性要求很高的,按你那么搞一个人说了一句话,下一句话不知道什么时候传过来,然后就各种断断续续的,还有每个人听到的声音的先后顺序都不一样怎么搞
    ckk163
        31
    ckk163  
    OP
       2015-08-24 14:59:30 +08:00
    @lty1993 96G 内存!!!!这是预算为多少路电话会议准备的呀 弄了多少的带宽呀
    eae29qvc
        32
    eae29qvc  
       2015-08-24 15:00:22 +08:00
    @lty1993 需求不一样吧,我这边要大量进行融合,每个房间都要多人同时说话,测了下扛不住
    lty1993
        33
    lty1993  
       2015-08-24 15:09:46 +08:00
    @eae29qvc 话说你跑的什么平台?

    不过我觉得性能实在不够。。。可以上 Cisco 的硬件 UCM ,或者 PCIE 的 Encode/Decode 卡。。。

    4134 Transit 这么贵,省下带宽的钱轻轻松松买硬件设备阿。如果客户端 mixing ,这是指数倍节约带宽阿。
    ckk163
        34
    ckk163  
    OP
       2015-08-24 15:12:59 +08:00
    不知道你们有没研究过 比邻 那个房间聊天是怎么实现的 我感觉他那个好像是 p2p 的
    eae29qvc
        35
    eae29qvc  
       2015-08-24 15:15:50 +08:00
    @lty1993 为了赶需求搞的,就我一个人弄了 3 个月。。现在一共就跑了两台服务器
    你说的我研究下,多谢提醒
    ckk163
        36
    ckk163  
    OP
       2015-08-24 15:19:10 +08:00
    @eae29qvc 不知可否看下你那个 3 个月的项目
    eae29qvc
        37
    eae29qvc  
       2015-08-24 15:20:44 +08:00
    @ckk163 ...那我会被开的
    ckk163
        38
    ckk163  
    OP
       2015-08-24 15:21:41 +08:00
    @eae29qvc 我不是说程序方面的 我是说界面其他可以公开的
    ckk163
        39
    ckk163  
    OP
       2015-08-24 15:23:15 +08:00
    @eae29qvc 主要是想看这个项目的需求是不是跟我想的有多少共同点
    eae29qvc
        40
    eae29qvc  
       2015-08-24 15:25:13 +08:00
    @ckk163 这个还真看不了。。不是独立的程序,是别的程序调用的,需要特定条件才能打开
    wy315700
        41
    wy315700  
       2015-08-24 15:25:58 +08:00
    @lty1993 你每个人发出去的 要发给 100 人,如果 100 人同时说话呢,聊天室不是只能一个人说其他人听,是可以同时说话的
    eae29qvc
        42
    eae29qvc  
       2015-08-24 15:26:31 +08:00
    @ckk163 你可以试下上面我发的那两个开源项目,跟他们差不多
    ckk163
        43
    ckk163  
    OP
       2015-08-24 15:26:43 +08:00
    @eae29qvc 调用的那个程序可以公开吗
    lty1993
        44
    lty1993  
       2015-08-24 15:31:02 +08:00
    @ckk163 我这边跑的 PBX ,并不是个聊天室系统。。。

    理论上来说你需要写个客户端,用 SIP 或者 Skinny 或者 IAX2 作为语音通信, XMPP 作为文字通信,自己写个 REST API 用来给客户创建自己的聊天室。

    然后连接 FreeSwitch/Asterisk 这类软电话交换机交换语音, eJabberd 用来处理文字,自己写个服务器端在用户创建聊天室的时候自动去电话交换机和 eJabberd 创建同 ID 的聊天室,然后把 ID 返回客户端。

    客户端 Join 聊天室,就等于 VOIP 打聊天室的内线号码+XMPP 登陆那个聊天室。
    eae29qvc
        45
    eae29qvc  
       2015-08-24 15:31:52 +08:00
    @ckk163 给你也进不去的,需要账号,你就想象成一个大型同性交友平台就好了。。
    lty1993
        46
    lty1993  
       2015-08-24 15:34:41 +08:00
    @wy315700 对阿,每个人都只有和服务器的一上一下两个 Channel ,所有人都可以同时说话和听到别的所有人说的话阿

    服务器会去把所有人 Uplink 的音频信号 Mix 阿。然后发给每个客户的只是 Mix 后的那一路音频阿。
    ckk163
        47
    ckk163  
    OP
       2015-08-24 15:34:41 +08:00
    @eae29qvc 。。。还同性 好具体~~
    wy315700
        48
    wy315700  
       2015-08-24 15:39:24 +08:00
    @lty1993
    客户端可以定向屏蔽某个人的,比如 100 个人屏蔽的都不一样,服务器是不是要 mix 100 次
    ckk163
        49
    ckk163  
    OP
       2015-08-24 15:57:54 +08:00
    @eae29qvc 你那个项目的带宽需求的计算方法和这个的计算方法接近吗 同样人数的话需求的带宽是不是和这个差不多的 https://support.teamspeakusa.com/index.php?/Knowledgebase/Article/View/7/12/how-much-bandwidth-does-teamspeak-require
    eae29qvc
        50
    eae29qvc  
       2015-08-24 16:05:16 +08:00
    @ckk163 嗯,不过有个最大同时说话人数的限制,要不带宽真的是指数级的,目前限制在 5 个
    lty1993
        51
    lty1993  
       2015-08-24 16:05:26 +08:00
    @wy315700 是的。就算没有定向屏蔽一样需要 MIX 100 次。自己的 Upstream 不会被 Mix 进自己的 Downstream 。

    PCM Mixing 并不需要很多 CPU Cycle ,服务器 Mixing 最大的 CPU 消耗是在这 100 路 Encoding 和 100 路 Decoding 上。

    编解码现成板卡一大堆,你要高兴还可以买块 NETFPGA-SUME , G711 和 PCIE 通信的 Verilog 代码满地都是,基本上可以单卡轻松完成 7000+路 G711 的编码 /解码。
    ljbha007
        52
    ljbha007  
       2015-08-24 16:18:33 +08:00
    @ckk163 p2p 的方案 webrtc 就可以解决
    ljbha007
        53
    ljbha007  
       2015-08-24 16:19:25 +08:00
    @ckk163 但是人多了的话 效果会大打折扣
    ckk163
        54
    ckk163  
    OP
       2015-08-24 16:23:16 +08:00
    @ljbha007 我初步设想房间的人数限制在 9 人
    eae29qvc
        55
    eae29qvc  
       2015-08-24 16:28:03 +08:00
    @ckk163 一个房间 9 个人吗?那我觉得不需要考虑带宽问题了。。
    ckk163
        56
    ckk163  
    OP
       2015-08-24 16:35:46 +08:00
    @eae29qvc 恩 一个房间限制 9 人 然后初期的话限制房间数到 1000
    ckk163
        57
    ckk163  
    OP
       2015-08-24 16:37:22 +08:00
    @eae29qvc 限制到 9 人的话 我按照刚才那个链接里的带宽需求算了下 一般用户的带宽都可以满足 剩下的就是可以不可以以 p2p 的方式来解决这个问题了
    ljbha007
        58
    ljbha007  
       2015-08-24 16:38:31 +08:00
    @ckk163 那完全可以用 webrtc
    eae29qvc
        59
    eae29qvc  
       2015-08-24 16:39:08 +08:00
    @ckk163 9 个人带宽不是问题,服务器一个核都跑不满
    ljbha007
        60
    ljbha007  
       2015-08-24 16:40:08 +08:00
    @ckk163 你试试 google 的 demo

    需要翻墙: https://apprtc.appspot.com/r/987435469
    ckk163
        61
    ckk163  
    OP
       2015-08-24 16:44:28 +08:00
    @ljbha007 看到一个帅哥~~
    ljbha007
        62
    ljbha007  
       2015-08-24 16:48:35 +08:00
    @ckk163 哈哈哈 这个就是 p2p 的线路 视频+语音流量在 10KB/s 左右 光语音大概 1KB
    可以选择走服务器中转 也可以直接连 客户端代码决定的
    ckk163
        63
    ckk163  
    OP
       2015-08-24 16:58:06 +08:00
    发现 V2EX 不能私信呀 临时建了个 qq 群 185797723 进来聊聊呀

    @ljbha007
    @eae29qvc
    @lty1993
    @wy315700
    lcqtdwj
        64
    lcqtdwj  
       2015-08-24 17:14:20 +08:00
    b 站么。。。
    offer
        65
    offer  
       2015-08-24 20:33:20 +08:00
    @ckk163 已经申请加入
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2729 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 28ms · UTC 15:23 · PVG 23:23 · LAX 07:23 · JFK 10:23
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.