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

📄 sdpmdgen.cpp

📁 著名的 helix realplayer 基于手机 symbian 系统的 播放器全套源代码
💻 CPP
📖 第 1 页 / 共 4 页
字号:
                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);
                    mDesc += psz256;
                }                   
                SafeSprintf(psz256,256, "a=length:npt=%s%s", (const char*)npTime,pszEOL);
                mDesc += psz256;
            }

⌨️ 快捷键说明

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