I版本和J版本打給rtsp音視訊幀打時間戳公式
阿新 • • 發佈:2019-01-31
status_t ARTPConnection::parseRTCP(StreamInfo *s, const sp &buffer) {
if (s->mNumRTCPPacketsReceived++ == 0) {
如果收到的是第一個rtcp包會給MyHandler傳送一個訊息,用於改變一些變數的狀態
sp notify = s->mNotifyMsg->dup();
notify->setInt32("first-rtcp", true);
notify->post();
}
const uint8_t *data = buffer->data();
size_t size = buffer->size();
while (size > 0) {
if (size < 8) {
// Too short to be a valid RTCP header
return -1;
}
if ((data[0] >> 6) != 2) {
// Unsupported version.
return -1;
}
size_t headerLength = 4 * (data[2] << 8 | data[3]) + 4;
if (size < headerLength) {
// Only received a partial packet?
return -1;
}
switch (data[1]) {
case 200:
{
parseSR(s, data, headerLength); 如果是SR型別的包
break;
}
case 203:
{
parseBYE(s, data, headerLength);
break;
}
default:
{
ALOGW("Unknown RTCP packet type %u of size %d",
(unsigned)data[1], headerLength);
break;
}
}
data += headerLength;
size -= headerLength;
}
return OK;
}