⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 sdpmdgen.cpp

📁 linux下的一款播放器
💻 CPP
📖 第 1 页 / 共 4 页
字号:
                    // don't use if 0 ( XXXJC we used to assert if the                     // prop was not present).                    if (0 != propValue)                    {                        duration = propValue;                        bDurationFound = TRUE;                    }                }                else if(strcasecmp(pPropName, "RTPPayloadType") == 0)                {                    rtpPayloadType = propValue;                    bRtpPayloadTypeFound = TRUE;                }                else if(strcasecmp(pPropName, "SamplesPerSecond") == 0)                {                    samplesPerSecond = propValue;                    bSamplesPerSecondFound = TRUE;                }                else if(strcasecmp(pPropName, "Channels") == 0)                {                    nChannels = propValue;                    bChannelsFound = TRUE;                }                else if(strcasecmp(pPropName, "MulticastTTL") == 0)                {                    connTTL = propValue;                    bFoundTTL = TRUE;                }                else if(strcasecmp(pPropName, "MulticastRange") == 0)                {                    connRange = propValue;                    bFoundRange = TRUE;                }                else if(strcasecmp(pPropName, "Port") == 0)                {                    port = propValue;                }                else if(strcasecmp(pPropName, "ptime") == 0)                {                    ptime = propValue;                    bPtimeFound = TRUE;                }                   else if(strcasecmp(pPropName, "AvgBitRate") == 0)                {                    avgBitRate = propValue;                                        // we need this in kbps                    avgBitRate = (UINT32)((double)avgBitRate / 1000.0 + 0.5);                    bFoundAvgBitRate = TRUE;                    // add it to attribute as well.                             bAddToHeader = TRUE;                    }                else if(strcasecmp(pPropName, "RtcpRRRate") == 0)                {                    bFoundRTCPRR = TRUE;                    ulRTCPRR = propValue;                }                else if(strcasecmp(pPropName, "RtcpRSRate") == 0)                {                    bFoundRTCPSR = TRUE;                    ulRTCPSR = propValue;                }                else if(strcasecmp(pPropName, "PreDecBufSize") == 0)                {                    bFoundPreDecBufSize = TRUE;                    ulPreDecBufSize = propValue;                }                else if(strcasecmp(pPropName, "InitPreDecBufPeriod") == 0)                {                    bFoundPreDecBufPeriod = TRUE;                    ulPreDecBufPeriod = propValue;                }                else if(strcasecmp(pPropName, "InitPostDecBufPeriod") == 0)                {                    bFoundPostDecBufPeriod = TRUE;                    ulPostDecBufPeriod = propValue;                }                else if(strcasecmp(pPropName, "DecByteRate") == 0)                {                    bFoundDecByteRate = TRUE;                    ulDecByteRate = propValue;                }                else                {                    bAddToHeader = TRUE;                                    }                        if (bAddToHeader)                {                    NEW_FAST_TEMP_STR(pszAttBuf, 4096, strlen(pPropName) + 64);                    SafeSprintf(pszAttBuf, 4096, "a=%s:integer;%d%s", pPropName,                                                             propValue, pszEOL);                    streamAttributes += pszAttBuf;                    DELETE_FAST_TEMP_STR(pszAttBuf);                }                                /* make sure to reset SdpFileType header */                if (strncasecmp(pPropName, "SdpFileType", 11) == 0)                {                    pValueArray[i]->SetPropertyULONG32(pPropName, NONE_SDP);                }                rc = pValueArray[i]->GetNextPropertyULONG32(pPropName,                    propValue);            }            rc = pValueArray[i]->GetFirstPropertyBuffer(pPropName, pPropBuffer);            while(rc == HXR_OK)            {                INT32 dataSize = pPropBuffer->GetSize();                NEW_FAST_TEMP_STR(pszAttBuf, 4096, dataSize * 2 +                                                   strlen(pPropName) + 64);                NEW_FAST_TEMP_STR(pszPropString, 4096, dataSize * 2 + 64);                (void)BinTo64((const BYTE*)pPropBuffer->GetBuffer(),                    dataSize, pszPropString);                SafeSprintf(pszAttBuf, 4096, "a=%s:buffer;\"%s\"%s", pPropName,                                                       pszPropString, pszEOL);                streamAttributes += pszAttBuf;                DELETE_FAST_TEMP_STR(pszPropString);                DELETE_FAST_TEMP_STR(pszAttBuf);                HX_RELEASE(pPropBuffer);                rc = pValueArray[i]->GetNextPropertyBuffer(pPropName,                    pPropBuffer);            }            rc = pValueArray[i]->GetFirstPropertyCString(pPropName,                pPropBuffer);            while(rc == HXR_OK)            {                char* pString = (char*) pPropBuffer->GetBuffer();                char* pszData=NULL;                BOOL bDeleteString = FALSE;                int len = pPropBuffer->GetSize();                bAddToHeader = FALSE;                if(strcasecmp(pPropName, "MimeType") == 0)                {                    pszMimeType = EscapeBuffer(pString, pPropBuffer->GetSize());                    pszMimeLast = strchr(pszMimeType, '/');                    if(pszMimeLast)                    {                        int MFLen = pszMimeLast-pszMimeType;                        pszMimeLast++;                        pszMimeFirst = new char [ MFLen+1 ];                        ulMimeFirstBufLen = MFLen + 1;                        memcpy(pszMimeFirst, pszMimeType, MFLen); /* Flawfinder: ignore */                        pszMimeFirst[MFLen] = '\0';                    }                    else                    {                        // mimetype is not in the right format...                    }                }                else if(strcasecmp(pPropName, "MulticastAddress") == 0)                {                    pszConnAddr = EscapeBuffer(pString, pPropBuffer->GetSize());                }                else if(strcasecmp(pPropName, "Control") == 0)                {                    if (pControlStringBuff)                    {                        HX_RELEASE(pControlStringBuff);                        pControlStringBuff = pPropBuffer;                        pControlStringBuff->AddRef();                     }                }                else if(strcasecmp(pPropName, "PayloadParameters") == 0)                {                    pszFmtp = EscapeBuffer(pString, pPropBuffer->GetSize());                }                               else if(strcasecmp(pPropName, "SDPData") == 0)                {                    pszSDPData = new char [ len + 1 ];                    memcpy(pszSDPData, (const char*)pPropBuffer->GetBuffer(), len); /* Flawfinder: ignore */                    pszSDPData[len] = '\0';		    RemoveASLine(pszSDPData, len);                }                else if(strcasecmp(pPropName, "Information") == 0)                {                    // "i="                    HX_ASSERT(!pszInfo);                    pszInfo = EscapeBuffer(pString, pPropBuffer->GetSize());                }                else                {                    pszData = EscapeBuffer(pString, pPropBuffer->GetSize());                    bDeleteString = TRUE;                    bAddToHeader = TRUE;                                }                                if(bAddToHeader)                {                    NEW_FAST_TEMP_STR(pszAttBuf, 4096, strlen(pszData) +                                                       strlen(pPropName) + 64);                    SafeSprintf(pszAttBuf, 4096,"a=%s:string;\"%s\"%s", pPropName,                                                               pszData, pszEOL);                    streamAttributes += pszAttBuf;                    DELETE_FAST_TEMP_STR(pszAttBuf);                }                if (bDeleteString)                {                    HX_VECTOR_DELETE(pszData);                }                HX_RELEASE(pPropBuffer);                rc = pValueArray[i]->GetNextPropertyCString(pPropName,                                                            pPropBuffer);            }            if(!bRtpPayloadTypeFound)            {                ulPayloadType = RTP_PAYLOAD_RTSP;            }            else            {                ulPayloadType = rtpPayloadType;            }            if (bUseOldSdp)            {                   // our old sdpplin expects m= to have either "audio",                 // "video", or "data", and anything else would be BAD!                if (strcmp(pszMimeFirst, "audio") && strcmp(pszMimeFirst, "video"))                {                    SafeStrCpy(pszMimeFirst, "data", ulMimeFirstBufLen);                }            }            else if (!pszMimeFirst)            {                pszMimeFirst = new char [ 5 ];                strcpy(pszMimeFirst, "data"); /* Flawfinder: ignore */            }            // m=            NEW_FAST_TEMP_STR(pszTmpString, 256, strlen(pszMimeFirst) + 128);            SafeSprintf(pszTmpString, 256, "m=%s %d RTP/AVP %d%s",                 pszMimeFirst, port, ulPayloadType, pszEOL);            mDesc += pszTmpString;            DELETE_FAST_TEMP_STR(pszTmpString);            // i=             if (pszInfo)            {                NEW_FAST_TEMP_STR(pszTmpStr, 256, strlen(pszInfo) + 64);                SafeSprintf(pszTmpStr, 256,"i=%s%s", pszInfo, pszEOL);                mDesc += pszTmpStr;                DELETE_FAST_TEMP_STR(pszTmpStr);                HX_VECTOR_DELETE(pszInfo);                pszInfo = NULL;            }            /* Format the connection line only if MulticastAddress and              * MulticastTTL exist in the stream header             */            if (pszConnAddr && strlen(pszConnAddr) && bFoundTTL)            {                NEW_FAST_TEMP_STR(pszTmpString, 256, strlen(pszConnAddr) + 128);                if (bFoundRange)                {                    SafeSprintf(pszTmpString, 256,"c=IN IP4 %s/%d/%d%s",                         pszConnAddr, connTTL, connRange, pszEOL);                }                else                {                    SafeSprintf(pszTmpString, 256,"c=IN IP4 %s/%d%s",                         pszConnAddr, connTTL, pszEOL);                }                mDesc += pszTmpString;                DELETE_FAST_TEMP_STR(pszTmpString);            }            // b=            if (bFoundAvgBitRate)            {                SafeSprintf(psz256, 256,"b=AS:%u%s", avgBitRate, pszEOL);                 mDesc += psz256;                bFoundAvgBitRate = FALSE;            }            if (bFoundRTCPRR)            {                SafeSprintf(psz256, 256,"b=RR:%u%s", ulRTCPRR, pszEOL);                 mDesc += psz256;                bFoundRTCPRR = FALSE;            }                        if (bFoundRTCPSR)            {                SafeSprintf(psz256, 256,"b=RS:%u%s", ulRTCPSR, pszEOL);                 mDesc += psz256;                bFoundRTCPSR = FALSE;            }                                // a=control            if (pControlStringBuff)            {                char* pString = (char*) pControlStringBuff->GetBuffer();                char* pszData=NULL;                pszData = EscapeBuffer(pString, pControlStringBuff->GetSize());                if (pContentBase || pQueryParams)                {                    UINT32 ulBuffLen = strlen(pszData);                    ulBuffLen += (pContentBase) ? pContentBase->GetSize() : 0;                    ulBuffLen += (pQueryParams) ? pQueryParams->GetSize() : 0;                    ulBuffLen +=64;                    NEW_FAST_TEMP_STR(pszControlString, 512, ulBuffLen);                     SafeSprintf(pszControlString, 512, "a=control:%s%s%s%s",                    (pContentBase)? ((char*)pContentBase->GetBuffer()) : "",                    pControlStringBuff->GetBuffer(),                    (pQueryParams)?((char*)pQueryParams->GetBuffer()) : "",                    pszEOL);                                        mDesc += pszControlString;                    DELETE_FAST_TEMP_STR(pszControlString);                }                else                 {                    UINT32 ulBuffLen = strlen(pszData) + 64;                    NEW_FAST_TEMP_STR(pszControlString, 512, ulBuffLen);                     SafeSprintf(pszControlString,512,"a=control:%s%s", pszData,                            pszEOL);                                    mDesc += pszControlString;                    DELETE_FAST_TEMP_STR(pszControlString);                }                HX_VECTOR_DELETE(pszData);            }            else if (bStreamNumberFound)            {                if (pContentBase || pQueryParams)                {                    const char* pszFieldPrefix = "a=control:";                    const char* pszStreamLabel = "streamid=";                    UINT32 ulBuffLen = strlen(pszFieldPrefix) +                                        strlen(pszStreamLabel);                    ulBuffLen += (pContentBase) ? (pContentBase->GetSize()) : 0;                    ulBuffLen += (pQueryParams) ? (pQueryParams->GetSize()) : 0;                    ulBuffLen += 1;                    NEW_FAST_TEMP_STR(pszControlField, 256, ulBuffLen);                    SafeSprintf(pszControlField, 256,"%s%s%s%d%s%s",                             pszFieldPrefix,                             (pContentBase)? ((char*)pContentBase->GetBuffer()) : "",                            pszStreamLabel, streamNumber,                             (pQueryParams)? ((char*)pQueryParams->GetBuffer()) : "",                            pszEOL);                    mDesc += pszControlField;                    DELETE_FAST_TEMP_STR(pszControlField);                }                else                {                    SafeSprintf(psz256, 256,"a=control:streamid=%d%s", streamNumber, pszEOL);                     mDesc += psz256;                }            }            // a=length && a=range            if (bDurationFound)            {                NPTime npTime(duration);                if (!bIsLive)                {                    SafeSprintf(psz256,256, "a=range:npt=0-%s%s", (const char*)npTime, pszEOL);                    mDesc += psz256;                }                                SafeSprintf(psz256, 256, "a=length:npt=%s%s", (const char*)npTime, pszEOL);                mDesc += psz256;            }            else if (bDefaultDurationFound)            {                // take it from file header                NPTime npTime(ulDefaultDuration);                if (!bIsLive)                {                    SafeSprintf(psz256, 256,"a=range:npt=0-%s%s", (const char*)npTime, pszEOL);

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -