Ignore:
Timestamp:
08/26/10 19:37:23 (21 months ago)
Author:
shiretu
Message:

-- android stuff

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/sources/thelib/src/protocols/rtp/connectivity/outboundconnectivity.cpp

    r102 r106  
    8686        _videoPacketsCount = 0; 
    8787        _videoBytesCount = 0; 
     88        _videoFirstRtp = 0; 
    8889 
    8990        _audioDataFd = -1; 
     
    9394        _audioPacketsCount = 0; 
    9495        _audioBytesCount = 0; 
     96        _audioFirstRtp = 0; 
    9597 
    9698        _pOutStream = NULL; 
     
    101103 
    102104        _startupTime = 0; 
    103         WARN("OC created: %p", this); 
    104105} 
    105106 
     
    308309 
    309310bool OutboundConnectivity::FeedVideoDataUDP(msghdr &message) { 
     311        //      uint32_t packetRtp = ntohlp((uint8_t *) message.msg_iov[0].iov_base + 4); 
     312        //      if ((((uint8_t *) message.msg_iov[0].iov_base)[1] >> 7) != 0) { 
     313        //              //              FINEST("packetRtp: %d (%08x) %02x%02x%02x%02x %.2f %c", 
     314        //              //                              packetRtp, 
     315        //              //                              packetRtp, 
     316        //              //                              ((uint8_t *) message.msg_iov[0].iov_base)[4], 
     317        //              //                              ((uint8_t *) message.msg_iov[0].iov_base)[5], 
     318        //              //                              ((uint8_t *) message.msg_iov[0].iov_base)[6], 
     319        //              //                              ((uint8_t *) message.msg_iov[0].iov_base)[7], 
     320        //              //                              (double) packetRtp / 90000.0, 
     321        //              //                              ((((uint8_t *) message.msg_iov[0].iov_base)[1] >> 7) != 0) ? '*' : ' '); 
     322        //              if (____last == packetRtp) { 
     323        //                      WARN("Skip packet"); 
     324        //                      return true; 
     325        //              } 
     326        //              ____last = packetRtp; 
     327        //      } 
    310328        RTP_SEND_MESSAGE(_videoDataFd, _udpVideoDataClients, message); 
    311329        _videoPacketsCount++; 
     
    313331        //uint16_t seq = ntohsp(((uint8_t *) message.msg_iov[0].iov_base) + 2); 
    314332        //FINEST("seq: %d", seq); 
    315         if (((_videoPacketsCount % 300) == 0) || _videoPacketsCount == 1) { 
     333        if (((_videoPacketsCount % 300) == 0) || _videoPacketsCount <= 2) { 
    316334                uint8_t buff[28]; 
    317                 CreateRTCPPacket(buff, 
     335                if (CreateRTCPPacket(buff, 
    318336                                (uint8_t *) message.msg_iov[0].iov_base, 
    319337                                _pOutStream->SSRC(), 
     
    321339                                _videoPacketsCount, 
    322340                                _videoBytesCount, 
    323                                 false); 
    324                 _message.msg_iov[0].iov_base = buff; 
    325                 _message.msg_iov[0].iov_len = 28; 
    326  
    327                 RTP_SEND_MESSAGE(_videoRTCPFd, _udpVideoRTCPClients, _message); 
     341                                false)) { 
     342                        _message.msg_iov[0].iov_base = buff; 
     343                        _message.msg_iov[0].iov_len = 28; 
     344 
     345                        RTP_SEND_MESSAGE(_videoRTCPFd, _udpVideoRTCPClients, _message); 
     346                } 
    328347        } 
    329348        return true; 
     
    341360        //uint16_t seq = ntohsp(((uint8_t *) message.msg_iov[0].iov_base) + 2); 
    342361        //FINEST("seq: %d", seq); 
    343         if (((_audioPacketsCount % 300) == 0) || (_audioPacketsCount == 1)) { 
     362        if (((_audioPacketsCount % 300) == 0) || (_audioPacketsCount <= 2)) { 
    344363                uint8_t buff[28]; 
    345                 CreateRTCPPacket(buff, 
     364                if (CreateRTCPPacket(buff, 
    346365                                (uint8_t *) message.msg_iov[0].iov_base, 
    347366                                _pOutStream->SSRC(), 
     
    349368                                _audioPacketsCount, 
    350369                                _audioBytesCount, 
    351                                 true); 
    352                 _message.msg_iov[0].iov_base = buff; 
    353                 _message.msg_iov[0].iov_len = 28; 
    354  
    355                 RTP_SEND_MESSAGE(_audioRTCPFd, _udpAudioRTCPClients, _message); 
     370                                true)) { 
     371                        _message.msg_iov[0].iov_base = buff; 
     372                        _message.msg_iov[0].iov_len = 28; 
     373 
     374                        RTP_SEND_MESSAGE(_audioRTCPFd, _udpAudioRTCPClients, _message); 
     375                } 
    356376        } 
    357377        return true; 
     
    404424        put_htonl(pDest + 4, ssrc); //SSRC 
    405425 
    406         FINEST("-----%s-----", isAudio ? "AUDIO" : "VIDEO"); 
    407  
    408426        //5. setup the startup time 
    409427        if (_startupTime == 0) { 
    410428                GETCLOCKS(_startupTime); 
    411429        } 
    412         FINEST("_startupTime: %.2f", _startupTime); 
     430 
     431        if (isAudio) { 
     432                if (_audioFirstRtp == 0) { 
     433                        _audioFirstRtp = ntohlp(pSrc + 4); 
     434                        return false; 
     435                } 
     436        } else { 
     437                if (_videoFirstRtp == 0) { 
     438                        _videoFirstRtp = ntohlp(pSrc + 4); 
     439                        return false; 
     440                } 
     441        } 
     442 
     443        uint32_t &firstRtp = isAudio ? _audioFirstRtp : _videoFirstRtp; 
    413444 
    414445        //6. Get the current time 
    415446        double currentTime; 
    416447        GETCLOCKS(currentTime); 
    417         FINEST("currentTime: %.2f", currentTime); 
    418448 
    419449        //7. NTP 
     
    423453 
    424454        //6. RTP 
    425         //FINEST("rate: %d", rate); 
    426         double rtpDouble = ((currentTime - _startupTime) / (double) CLOCKS_PER_SEC) * rate; 
    427         //FINEST("rtpDouble: %.2f", rtpDouble); 
    428         uint32_t rtp = (uint32_t) rtpDouble; 
    429         //FINEST("rtp: %d", rtp); 
    430         //uint32_t packetRtp = ntohlp(pSrc + 4); 
    431         //FINEST("packetRtp: %d", packetRtp); 
    432         //FINEST("diff: %.0f", (double) packetRtp - (double) rtp); 
     455        double rtpDouble = ((currentTime - _startupTime) / (double) CLOCKS_PER_SECOND) * rate; 
     456        uint32_t rtp = (uint32_t) rtpDouble + firstRtp; 
    433457        put_htonl(pDest + 16, rtp); 
    434         //memcpy(pDest + 16, pSrc + 4, 4); 
    435458 
    436459        //7. sender's packet count 
     
    440463        put_htonl(pDest + 24, bytesCount); 
    441464 
     465        FINEST("-----%s-----", isAudio ? "AUDIO" : "VIDEO"); 
     466        FINEST("_startupTime: %.2f", _startupTime); 
     467        FINEST("currentTime: %.2f", currentTime); 
     468        FINEST("currentTime - _startupTime: %.2f (%.4f)", 
     469                        currentTime - _startupTime, 
     470                        (currentTime - _startupTime) / (double) CLOCKS_PER_SECOND); 
     471        FINEST("rate: %d", rate); 
     472        FINEST("rtpDouble: %.2f", rtpDouble); 
     473        FINEST("firstRtp: %d", firstRtp); 
     474        FINEST("rtp: %d", rtp); 
     475        uint32_t packetRtp = ntohlp(pSrc + 4); 
     476        FINEST("packetRtp: %d", packetRtp); 
     477        FINEST("diff: %d; (%.4f s)", packetRtp - rtp, ((double) packetRtp - rtp) / (double) rate); 
     478        FINEST("---------------"); 
     479 
    442480        return true; 
    443481} 
Note: See TracChangeset for help on using the changeset viewer.