- Timestamp:
- 08/26/10 19:37:23 (21 months ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/sources/thelib/src/protocols/rtp/connectivity/outboundconnectivity.cpp
r102 r106 86 86 _videoPacketsCount = 0; 87 87 _videoBytesCount = 0; 88 _videoFirstRtp = 0; 88 89 89 90 _audioDataFd = -1; … … 93 94 _audioPacketsCount = 0; 94 95 _audioBytesCount = 0; 96 _audioFirstRtp = 0; 95 97 96 98 _pOutStream = NULL; … … 101 103 102 104 _startupTime = 0; 103 WARN("OC created: %p", this);104 105 } 105 106 … … 308 309 309 310 bool 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 // } 310 328 RTP_SEND_MESSAGE(_videoDataFd, _udpVideoDataClients, message); 311 329 _videoPacketsCount++; … … 313 331 //uint16_t seq = ntohsp(((uint8_t *) message.msg_iov[0].iov_base) + 2); 314 332 //FINEST("seq: %d", seq); 315 if (((_videoPacketsCount % 300) == 0) || _videoPacketsCount == 1) {333 if (((_videoPacketsCount % 300) == 0) || _videoPacketsCount <= 2) { 316 334 uint8_t buff[28]; 317 CreateRTCPPacket(buff,335 if (CreateRTCPPacket(buff, 318 336 (uint8_t *) message.msg_iov[0].iov_base, 319 337 _pOutStream->SSRC(), … … 321 339 _videoPacketsCount, 322 340 _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 } 328 347 } 329 348 return true; … … 341 360 //uint16_t seq = ntohsp(((uint8_t *) message.msg_iov[0].iov_base) + 2); 342 361 //FINEST("seq: %d", seq); 343 if (((_audioPacketsCount % 300) == 0) || (_audioPacketsCount == 1)) {362 if (((_audioPacketsCount % 300) == 0) || (_audioPacketsCount <= 2)) { 344 363 uint8_t buff[28]; 345 CreateRTCPPacket(buff,364 if (CreateRTCPPacket(buff, 346 365 (uint8_t *) message.msg_iov[0].iov_base, 347 366 _pOutStream->SSRC(), … … 349 368 _audioPacketsCount, 350 369 _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 } 356 376 } 357 377 return true; … … 404 424 put_htonl(pDest + 4, ssrc); //SSRC 405 425 406 FINEST("-----%s-----", isAudio ? "AUDIO" : "VIDEO");407 408 426 //5. setup the startup time 409 427 if (_startupTime == 0) { 410 428 GETCLOCKS(_startupTime); 411 429 } 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; 413 444 414 445 //6. Get the current time 415 446 double currentTime; 416 447 GETCLOCKS(currentTime); 417 FINEST("currentTime: %.2f", currentTime);418 448 419 449 //7. NTP … … 423 453 424 454 //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; 433 457 put_htonl(pDest + 16, rtp); 434 //memcpy(pDest + 16, pSrc + 4, 4);435 458 436 459 //7. sender's packet count … … 440 463 put_htonl(pDest + 24, bytesCount); 441 464 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 442 480 return true; 443 481 }
Note: See TracChangeset
for help on using the changeset viewer.
