iOS UDP套接字“ sendto”无法立即一一发送

时间:2019-05-13 13:44:16

标签: c++ ios udp rtp

我发现iOS套接字“ sendto”界面的行为不同于android或linux内核。当我们称为“ sendto”时,我们同时开始进行wireshark捕获。但是我们无法立即找到捕获数据。我们进行了一项测试,以每40ms间隔连续发送“ sendto” 332字节。结果发现,所有数据包都是在较短的中央时间而不是40MS(或更高)间隔内发送到网络的。我们怀疑ios内核对udp进行了一些更改,也可能会导致音频延迟大约900-1000ms。

我已通过演示版“ sendto” api在iPhone 5s和iPhone 6,iOS 10或11中进行了测试

#include <sys/socket.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <netinet/ip.h>
#include <netinet/tcp.h>
#include <sys/types.h>

int sSock = socket(AF_INET,SOCK_DGRAM,0);


struct sockaddr_in localAddr;
localAddr.sin_family = AF_INET;
    localAddr.sin_port = htons(1001);
    localAddr.sin_addr.s_addr = htonl(INADDR_ANY);
    if(bind(sSock, (struct sockaddr*)&localAddr, sizeof(localAddr)) < 0)
    {
        NSLog(@"bind error");
        return;
    }
    struct sockaddr_in sendAddr;
    sendAddr.sin_family = AF_INET;
    sendAddr.sin_port = htons(21000);
    inet_pton(AF_INET, "114.190.105.220", &sendAddr.sin_addr);
    char sendBuf[332] = {0};


    //unsigned char service_type = 0xe0 | IPTOS_LOWDELAY | IPTOS_RELIABILITY;
    int service_type = 0x10;
    int priority = 6;

    //if(setsockopt(sSock, SOL_SOCKET, SO_PRIORITY, &priority, sizeof(priority))<0)
    if(setsockopt(sSock,IPPROTO_IP,IP_TOS,(void*)(&service_type),sizeof(service_type)) < 0)
    {
        NSLog(@"setsockopt failed1,error[%s]",strerror(errno));
    }
   while(true)
   {
       sendto(sSock, sendBuf, sizeof(sendBuf), 0, (struct sockaddr*)&sendAddr, sizeof(sendAddr));
       time_t timeNow;
       time(&timeNow);
       struct tm tmNow;
       struct timeval tvNow;
       localtime_r(&timeNow,&tmNow);
       gettimeofday(&tvNow, NULL);
       char sTime[256] = {0};
       snprintf(sTime, sizeof(sTime)-1, "%04d%02d%02d %02d%02d%02d.%d",tmNow.tm_year+1900,tmNow.tm_mon,tmNow.tm_mday,tmNow.tm_hour,tmNow.tm_min,tmNow.tm_sec,tvNow.tv_usec/1000);
       NSLog(@"[%s]interval 40ms send",sTime);
       usleep(40*1000);
   }

所有数据包都在短的中心时间内发送到网络,而不是40MS(或更高)的间隔。 所有数据包立即发送,wireshark捕获如下:

不。时间协议

819 41.439392 H264

820 41.439617 H264

821 41.439819 H264

0 个答案:

没有答案