【问题标题】:TCP Socket Communication for Audio Data - Multiple Server to Multiple Client音频数据的 TCP 套接字通信 - 多服务器到多客户端
【发布时间】:2013-10-21 07:48:18
【问题描述】:

我是套接字编程的新手,对它的工作原理不太了解,这是用例,我正在开发一个 iPhone 应用程序,用户可以在其中流式传输来自另一台 iPhone 设备的实时音频(简而言之,多播)

到目前为止我做了什么:

我在服务器上打开了一个端口,它一直在监听来自客户端的传入数据。在 iOS 端,我实现了读取服务器上接收到的数据包并进行相应处理的方法(我使用了 GCDAsyncSocket)

我需要帮助的地方:

上述用例非常适合 2 个用户,一个将音频数据发送到服务器,另一个读取该数据以播放音频。但实际上并不总是有一个用户发起音频数据,他们可能超过 100 多个,现在当他们都向服务器发送不同的音频数据时,我如何为每个人只接收数据的听众过滤数据,我克服这个问题,在每个数据包上添加一个令牌,例如

unique_token:<ffdefa09 fedead3...... //Audio Data

但是这个过程太慢了,因为每个客户端都在监听所有的数据包,并且只处理具有分配给它们的令牌的数据包。

无论如何,我们可以建立一个点对点连接,通过该连接,源设备成为服务器,只向其侦听器发送数据,而不打扰其他任何人?

【问题讨论】:

    标签: iphone ios sockets audio-streaming


    【解决方案1】:

    在开始将音频数据传输到服务器之前,您不能添加类似轻协议之类的东西吗?

    iPhone -> server [Request: Start Stream Audio]
    server -> iPhone [OK: TCP Port:4444]
    // iphone sending audio packets to port 4444
    
    
    iPhone2 -> server [Request: Start Stream Audio]
    server -> iPhone2 [OK: TCP Port:4445]
    

    然后服务器可以使用 TCP 端口 ID 而不是数据包 ID 过滤所有音频通道(或者我可能误解了你的问题)

    顺便说一句,由于提供商防火墙,我认为您无法在蜂窝网络上使用 iPhone 进行任何“真正的”P2P

    【讨论】:

      【解决方案2】:

      对于发送音频数据的每一端,您创建一个套接字并接收音频数据,对于接收音频数据的每一端,您创建一个套接字并发送音频数据。 P2P 的工作量很大,因为很多设备都在公共地址后面。

      【讨论】:

        【解决方案3】:

        您需要将命令数据与流/音频数据分开。

        首先你需要 iphone 告诉服务器他们想要什么,

        • iphone 1:“我想用 id 1 流式传输这些数据”
        • iphone 2:“我想收听 id 1 的流”

        这样服务器就可以告诉 iphone 连接到哪里来获取它需要的数据,正如 HaneTV 建议的端口号

        【讨论】:

          猜你喜欢
          • 2012-09-17
          • 2012-08-30
          • 2012-11-02
          • 1970-01-01
          • 2016-05-16
          • 2013-03-24
          • 2017-08-23
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多