/** * 初始化线程 * @param void * @return bool true:成功;false:失败 */ bool CThreadProcSiteDataOutput::OnInit() { // 是否工作状态 m_bWork = false; // 是否关闭线程 m_bClose = false; // 打开日志文件 LogFileOpen(); // 日志文件对象是否关闭 m_bLogFileClose = false; return true; }
int QTFileBroadcaster::SetUp(PLBroadcastDef *broadcastDefPtr, bool *quitImmediatePtr) { int result = -1; int numStreams = 0; fQuitImmediatePtr = quitImmediatePtr; PlayListUtils::Initialize(); do { if (! broadcastDefPtr) { result = eParam; break; }; if (!broadcastDefPtr->mSDPFile || 0 == broadcastDefPtr->mSDPFile[0] ) { result = eSDPFileInvalidName; break; }; int nameLen = strlen(broadcastDefPtr->mSDPFile); if (nameLen > 255) { result = eSDPFileInvalidName; break; }; if (0 == nameLen) { result = eSDPFileInvalidName; break; }; if (broadcastDefPtr->mTheSession) { if (!broadcastDefPtr->mDestSDPFile) { result = eNetworkSDPFileNameInvalidMissing; break; }; if (!broadcastDefPtr->mDestSDPFile[0]) { result = eNetworkSDPFileNameInvalidMissing; break; }; if (!::strcmp(broadcastDefPtr->mDestSDPFile, "no_name")) { result = eNetworkSDPFileNameInvalidMissing; break; }; // if ('/' == broadcastDefPtr->mDestSDPFile[0]) // { result = eNetworkSDPFileNameInvalidBadPath; break; }; } result = fStreamSDPParser.ReadSDP(broadcastDefPtr->mSDPFile); if (result != 0) { if (result < 0) { result = eSDPFileNotFound; break; }; if (result > 0) { result = eSDPFileInvalid; break; }; } fBroadcastDefPtr = broadcastDefPtr; if (broadcastDefPtr->mTheSession == NULL) { if (!broadcastDefPtr->mBasePort) { result = eSDPFileNoPorts; break; }; int portLen = strlen(broadcastDefPtr->mBasePort); if (0 == portLen) { result = eDescriptionInvalidDestPort; break; }; if (portLen > 5 ) { result = eDescriptionInvalidDestPort; break; }; int basePort = atoi(broadcastDefPtr->mBasePort); if ( basePort > 65531 ) { result = eDescriptionInvalidDestPort; break; }; if ( basePort < 5004 ) { result = eDescriptionInvalidDestPort; break; }; } numStreams = fStreamSDPParser.GetNumTracks(); if (numStreams == 0) { result = eSDPFileNoMedia; break; }; UDPSocketPair *socketArrayPtr = fSocketlist.SetSize(numStreams); if (socketArrayPtr == NULL) { result = eMem; break; }; // Bind SDP file defined ports to active stream ports { UInt16 streamIndex = 0; UInt16 rtpPort = 0; UInt16 rtcpPort = 0; TypeMap* mediaTypePtr; char sdpIPAddress[32]; SimpleString* ipStringPtr = fStreamSDPParser.GetIPString(); if ( (NULL == ipStringPtr) || (ipStringPtr->fLen >= 32) ) { result = eSDPFileInvalid; break; } memcpy(sdpIPAddress,ipStringPtr->fTheString,ipStringPtr->fLen); sdpIPAddress[ipStringPtr->fLen] = '\0'; UDPSocketPair *aSocketPair = fSocketlist.Begin(); Bool16 setupUDP = true; while (aSocketPair != NULL) { mediaTypePtr = fStreamSDPParser.fSDPMediaList.SetPos(streamIndex); if (mediaTypePtr == NULL) { result = eSDPFileInvalid; break; } if (broadcastDefPtr->mTheSession != NULL) { mediaTypePtr->fPort = broadcastDefPtr->mTheSession->GetStreamDestPort(streamIndex); //qtss_printf("QTFileBroadcaster::SetUp streamIndex=%u port=%d\n",streamIndex,mediaTypePtr->fPort); if (BroadcasterSession::kTCPTransportType == broadcastDefPtr->mTheSession->GetTransportType()) { aSocketPair->SetRTSPSession(broadcastDefPtr->mTheSession, (UInt8) streamIndex * 2); setupUDP = false; } else { setupUDP = true; } } if (setupUDP) { SInt16 ttl = (SInt16) atoi(broadcastDefPtr->mTTL); if ( ( ttl > 255 ) || ( ttl < 1 ) ) { result = eSDPFileInvalidTTL; break; }; if (mediaTypePtr->fPort == 0) { result = eSDPFileInvalidPort; break; } rtpPort = mediaTypePtr->fPort; rtcpPort = rtpPort + 1; result = aSocketPair->OpenAndBind(rtpPort,rtcpPort,sdpIPAddress); if (result != 0) { result = eFailedBind; break; } (void) aSocketPair->SetMultiCastOptions(ttl); } aSocketPair = fSocketlist.Next(); streamIndex++; } if (result != 0) break; } MediaStream *mediaArrayPtr = fMediaStreamList.SetSize(numStreams); if (mediaArrayPtr == NULL) { result = eMem; break; } for (int i = 0; i < numStreams; i ++) { UDPSocketPair *socketPairPtr = fSocketlist.SetPos(i); MediaStream *mediaStreamPtr = fMediaStreamList.SetPos(i); TypeMap *streamMediaTypePtr = fStreamSDPParser.fSDPMediaList.SetPos(i); if (socketPairPtr && mediaStreamPtr && streamMediaTypePtr) { mediaStreamPtr->fData.fSocketPair = socketPairPtr; streamMediaTypePtr->fMediaStreamPtr = mediaStreamPtr; mediaStreamPtr->fData.fStreamMediaTypePtr = streamMediaTypePtr; } else { result = eMem; break; } } fMediaStreamList.SetUpStreamSSRCs(); fStreamStartTime = PlayListUtils::Milliseconds(); fMediaStreamList.StreamStarted(fStreamStartTime); result = 0; LogFileOpen(); } while (false); return result; }