This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] CC3200AUDBOOST:检测网络上的两个独立流设备

Guru**** 2378650 points
Other Parts Discussed in Thread: CC3200
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/wireless-connectivity/wi-fi-group/wifi/f/wi-fi-forum/805920/cc3200audboost-detect-two-separate-streaming-devices-on-the-network

器件型号:CC3200AUDBOOST
Thread 中讨论的其他器件:CC3200

尊敬的 Vincent:

我一直在探索 WiFi_AUDIO_APP 源代码。 以下代码片段类似于检测网络中主机(2个流设备)的代码片段。 在本例中、我将有两个流设备。   如果有两个器件配置了音频服务、sl_NetAppDnsGetHostByService 函数是否会返回两个 IP 地址? 此函数位于 network.c 中

void mDNS_Task()
{
int lRetValmDNS;
unsigned int pAddr;
unsigned long usPort;
无符号短整型 ulTextLen = 200;
char cText[201];


//取消注册 mDNS 服务(如果之前完成)
lRetValmDNS = sl_NetAppMDNSUnRegisterService ((signed char *) CC3200_MDNS_NAME、
strlen (CC3200_MDNS_NAME));

while (1)
{
lRetValmDNS = 1;

//读取 mDNS 服务。
while (lRetValmDNS)
{
ulTextLen = 200;
lRetValmDNS = sl_NetAppDnsGetHostByService ((signed char *)\
CC3200_MDNS_NAME、
strlen ((const char *) CC3200_MDNS_NAME)、
SL_AF_iNet、(无符号长整型*)&pAddr、usPort、
ulTextLen、(signed char *)&cText[0]);
}
if (lRetValmDNS = 0 &&(pAddr!= INVALID_CLIENT_ADDRESS)&&\
(pAddr!=g_uiIpAddress)
{
//检测到扬声器-添加客户端
G_UdpSock.Client.sin 系列= AF_iNet;
G_UdpSock.Client.sin_addr.s_addr = htonl (pAddr);
G_UdpSock.Client.sin 端口= htons (usPort);
G_UdpSock.iClientLength = sizeof (g_UdpSock.Client);

G_loopback = 0;

}

map_UtilsDelay (80*1000*100);
}
} 

谢谢  

Shavinda

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Shavinda、

    否、这将仅返回一个具有 MDNS 主机名的 IP 地址。 您需要创建一个列表并通过 GetServiceList()函数循环以获取多个 IP 地址。

    BR、
    Vince
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Vincent:

    感谢您的快速回复。 我在这里的理解是否正确?

    在 wify_audio_app 中、mDNS 广播器是使用服务"CC3200._audio._udp.local"进行广播的扬声器设备。 然后、MIC 侧使用  sl_NetAppDnsGetHostByService 来检测扬声器器件。 是否有理由在扬声器侧进行 mDNS 广播? 我认为这可以在两侧都完成。 根据这一意见,我决定采取以下行动。  

    流设备1将使用端口5050上的服务"CC3200._AUDIO_stream1._udp.local"进行广播。流设备2将使用端口5051上的服务"CC3200._AUDIO_stream2._udp.local"进行广播。  

    #ifndef 多播
    lRetVal = sendto (g_UdpSock.iSockDesc、\
    (char*)(pRecordBuffer->puReadPtr)、packet_size、\
    0、(struct sockaddr*)&(g_UdpSock.Client)、\
    sizeof (g_udpSock.Client);
    if (lRetVal < 0)
    {
    UART_PRINT ("无法发送数据\n\r");
    loop_forever ();
    }
    
    #else//多播 

    我想我可以使用来自每个流媒体设备的 sendto 函数将数据发送出去。 有关服务端口的信息也通过 g_UdpSock.Client 传递给此函数、对吧?

    在接收器端,我将使用 GetServiceList()函数并标识这些特定设备的 IP 地址和服务端口。 我可以使用 Recvfrom 两次来从各自的端口接收每个流。 我可以使用两次接收功能从各个端口读取音频数据。  

    G_iRetVal = Recvfrom (g_UdpSock.iSockDesc、(char*)(speaker_data)、\
    packet_size*16、0、\
    (struct sockaddr *)&(g_UdpSock.Client)、\
    (SlSockklen_t*)&(g_UdpSock.iClientLength); 

    这种理解是否对您有意义?

    谢谢

    Shavinda  

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Shavinda、

    您的想法是有效的。 我们在两个器件上执行 mdns 服务的原因是该演示允许双向音频流。

    BR、

    Vince