static void rtp_recv_thread(void *arg) { LCD_PrintString2Terminal ("Start rcv thread\n", LCD_TERMINAL_NoNL,COLOR_RED, COLOR_YELLOW); #define STREAM_PORT 2421 #define STREAM_ADDRESS "237.0.0.0" int sock; struct sockaddr_in in_addr; /* Structure used for bind() */ struct sockaddr_in src_addr; /* Used to receive (addr,port) of sender */ int src_addr_len; /* Length of src_addr */ struct ip_mreq mreq; unsigned char buffer[32]; LWIP_UNUSED_ARG(arg); /* create new socket */ if ((sock = socket(AF_INET, SOCK_DGRAM, 0)) < 0){ LCD_PrintString2Terminal ("unable to create socket\n", LCD_TERMINAL_NoNL,COLOR_RED, COLOR_YELLOW); vTaskDelete(NULL); } LCD_PrintString2Terminal ("socket created\n", LCD_TERMINAL_NoNL,COLOR_RED, COLOR_YELLOW); memset(&in_addr, 0, sizeof(in_addr)); /* Zero out structure */ /* prepare local address */ in_addr.sin_family=AF_INET; in_addr.sin_addr.s_addr= htonl(INADDR_ANY); in_addr.sin_port=htons(STREAM_PORT); /* bind to local address */ if (bind(sock, (struct sockaddr *)&in_addr, sizeof(in_addr))){ LCD_PrintString2Terminal ("unable to bind\n", LCD_TERMINAL_NoNL,COLOR_RED, COLOR_YELLOW); vTaskDelete(NULL); } LCD_PrintString2Terminal ("bind success\n", LCD_TERMINAL_NoNL,COLOR_RED, COLOR_YELLOW); // prepare multicast "ip_mreq" struct mreq.imr_multiaddr.s_addr = inet_addr(STREAM_ADDRESS); mreq.imr_interface.s_addr = htonl(INADDR_ANY); //join multicast group if (setsockopt(sock, IPPROTO_IP, IP_ADD_MEMBERSHIP,(char *) &mreq, sizeof(mreq))== -1) { LCD_PrintString2Terminal ("cant join mcast\n", LCD_TERMINAL_NoNL,COLOR_RED, COLOR_YELLOW); //EXITS HERE~ vTaskDelete(NULL); } LCD_PrintString2Terminal ("mcast join success\n", LCD_TERMINAL_NoNL,COLOR_RED, COLOR_YELLOW); /* receive RTP packets */ while(1) { //Endless loop } } } |