RTP包使用TCP发送的有关问题

RTP包使用TCP发送的问题
最近做了一个rtsp的小型视频服务器,用UDP进行发送的时候可以在VLC上看到完整的视频,但是通过TCP进行发送的时候只能看到一幅图像,然后过十几秒钟VLC就自动断掉了,抓包可以看到数据已经成功发送。两种发送方式的RTP包的打包方式和内容都是一样的,不同的地方主要是rtsp会话交互发送的信息还有通过TCP方式发送的RTP包前面再加四个字节的头,加四个字节头以及数据发送的代码如下:
C/C++ code

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;
}



希望高手帮忙找一下问题,不胜感激啊


------解决方案--------------------
不懂,帮顶了。
------解决方案--------------------
唉..流媒体这东东老精细了,最近我也在学习,一头雾水T-T。不过在Live源码中对于使用tcp发送rtp信息有下面这一段代码,不知道你有没有看过,我发给你,希望能够给你帮助,然后我也继续等高手:
C/C++ code

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);
}