2,553
社区成员




static int send_rtp_packet(rtpclientparam_info* pinfo, unsigned char *buf,int len)
{
int sfd = 0;
int sendtonum;
struct sockaddr_in s;
if(!pinfo || !buf)
return 1;
if(pinfo->rtpovertcp)
{
unsigned char tcp_pkt[len + 4];
uint16 *intlvd_ch = (uint16 *)&tcp_pkt[2];
tcp_pkt[0] = '$';
tcp_pkt[1] = (unsigned char)(pinfo->dst_videoport);//在这里目标端口号就是Channel id
printf("tcp_pkt[1]=%d,port=%d\n",tcp_pkt[1],pinfo->dst_videoport);
*intlvd_ch = htons((uint16)len);
memcpy(tcp_pkt + 4, buf, len);
sendtonum = send(pinfo->tcpfd, tcp_pkt, len+4, MSG_NOSIGNAL);
}
else
{
s.sin_family = AF_INET;
s.sin_addr.s_addr = pinfo->dstip;
sfd = video_sockethandle;
s.sin_port = htons(pinfo->dst_videoport);
sendtonum = sendto(sfd, buf, len, 0, (struct sockaddr *)&s, sizeof(s));
}
if(sendtonum != len)
return 2;
return 0;
}
void sendRTPOverTCP(unsigned char* packet,
unsigned packetSize,
int socketNum,
unsigned char streamChannelId) {
do {
char const dollar = '$';
if (send(socketNum, &dollar, 1, 0) != 1) break;
if (send(socketNum, (char*)&streamChannelId, 1, 0) != 1) break;
char netPacketSize[2];
netPacketSize[0] = (char) ((packetSize&0xFF00)>>8);
netPacketSize[1] = (char) (packetSize&0xFF);
if (send(socketNum, netPacketSize, 2, 0) != 2) break;
if (send(socketNum, (char*)packet, packetSize, 0) != (int)packetSize) break;
return;
} while (0);
}