#include <MediaSession.hh>
Collaboration diagram for MediaSubsession:

Definition at line 154 of file MediaSession.hh.
| MediaSubsession::MediaSubsession | ( | MediaSession & | parent | ) | [protected] |
Definition at line 576 of file MediaSession.cpp.
References False, and rtpInfo.
00577 : serverPortNum(0), sink(NULL), miscPtr(NULL), 00578 fParent(parent), fNext(NULL), 00579 fConnectionEndpointName(NULL), 00580 fClientPortNum(0), fRTPPayloadFormat(0xFF), 00581 fSavedSDPLines(NULL), fMediumName(NULL), fCodecName(NULL), fProtocolName(NULL), 00582 fRTPTimestampFrequency(0), fControlPath(NULL), 00583 fSourceFilterAddr(parent.sourceFilterAddr()), fBandwidth(0), 00584 fAuxiliarydatasizelength(0), fConstantduration(0), fConstantsize(0), 00585 fCRC(0), fCtsdeltalength(0), fDe_interleavebuffersize(0), fDtsdeltalength(0), 00586 fIndexdeltalength(0), fIndexlength(0), fInterleaving(0), fMaxdisplacement(0), 00587 fObjecttype(0), fOctetalign(0), fProfile_level_id(0), fRobustsorting(0), 00588 fSizelength(0), fStreamstateindication(0), fStreamtype(0), 00589 fCpresent(False), fRandomaccessindication(False), 00590 fConfig(NULL), fMode(NULL), fSpropParameterSets(NULL), fEmphasis(NULL), fChannelOrder(NULL), 00591 fPlayStartTime(0.0), fPlayEndTime(0.0), fAbsStartTime(NULL), fAbsEndTime(NULL), 00592 fVideoWidth(0), fVideoHeight(0), fVideoFPS(0), fNumChannels(1), fScale(1.0f), fNPT_PTS_Offset(0.0f), 00593 fRTPSocket(NULL), fRTCPSocket(NULL), 00594 fRTPSource(NULL), fRTCPInstance(NULL), fReadSource(NULL), 00595 fReceiveRawMP3ADUs(False), fReceiveRawJPEGFrames(False), 00596 fSessionId(NULL) { 00597 rtpInfo.seqNum = 0; rtpInfo.timestamp = 0; rtpInfo.infoIsNew = False; 00598 }
| MediaSubsession::~MediaSubsession | ( | ) | [protected, virtual] |
Definition at line 600 of file MediaSession.cpp.
References deInitiate(), fAbsEndTime, fAbsStartTime, fChannelOrder, fCodecName, fConfig, fConnectionEndpointName, fControlPath, fEmphasis, fMediumName, fMode, fNext, fProtocolName, fSavedSDPLines, fSessionId, and fSpropParameterSets.
00600 { 00601 deInitiate(); 00602 00603 delete[] fConnectionEndpointName; delete[] fSavedSDPLines; 00604 delete[] fMediumName; delete[] fCodecName; delete[] fProtocolName; 00605 delete[] fControlPath; 00606 delete[] fConfig; delete[] fMode; delete[] fSpropParameterSets; delete[] fEmphasis; delete[] fChannelOrder; 00607 delete[] fAbsStartTime; delete[] fAbsEndTime; 00608 delete[] fSessionId; 00609 00610 delete fNext; 00611 }
| MediaSession& MediaSubsession::parentSession | ( | ) | [inline] |
Definition at line 156 of file MediaSession.hh.
References fParent.
Referenced by ProxyServerMediaSubsession::closeStreamSource(), connectionEndpointAddress(), RTSPClient::constructSubsessionURL(), ProxyRTSPClient::continueAfterSETUP(), ProxyServerMediaSubsession::createNewStreamSource(), and subsessionAfterPlaying().
00156 { return fParent; }
| MediaSession const& MediaSubsession::parentSession | ( | ) | const [inline] |
| unsigned short MediaSubsession::clientPortNum | ( | ) | const [inline] |
Definition at line 159 of file MediaSession.hh.
References fClientPortNum.
Referenced by continueAfterDESCRIBE(), continueAfterSETUP(), RTSPClient::sendRequest(), setupNextSubsession(), and setupStreams().
00159 { return fClientPortNum; }
| unsigned char MediaSubsession::rtpPayloadFormat | ( | ) | const [inline] |
Definition at line 160 of file MediaSession.hh.
References fRTPPayloadFormat.
00160 { return fRTPPayloadFormat; }
| char const* MediaSubsession::savedSDPLines | ( | ) | const [inline] |
Definition at line 161 of file MediaSession.hh.
References fSavedSDPLines.
Referenced by QuickTimeFileSink::addAtom_hdlr2().
00161 { return fSavedSDPLines; }
| char const* MediaSubsession::mediumName | ( | ) | const [inline] |
Definition at line 162 of file MediaSession.hh.
References fMediumName.
Referenced by QuickTimeFileSink::addAtom_hdlr2(), DummySink::afterGettingFrame(), continueAfterDESCRIBE(), continueAfterSETUP(), ProxyServerMediaSubsession::createNewRTPSink(), createSourceObjects(), QuickTimeFileSink::onRTCPBye(), AVIFileSink::onRTCPBye(), operator<<(), printQOSData(), AVISubsessionIOState::setAVIstate(), SubsessionIOState::setQTstate(), setupStreams(), subsessionByeHandler(), SubsessionIOState::useFrameForHinting(), and while().
00162 { return fMediumName; }
| char const* MediaSubsession::codecName | ( | ) | const [inline] |
Definition at line 163 of file MediaSession.hh.
References fCodecName.
Referenced by QuickTimeFileSink::addAtom_hdlr2(), DummySink::afterGettingFrame(), ProxyServerMediaSubsession::codecName(), continueAfterDESCRIBE(), continueAfterSETUP(), ProxyRTSPClient::continueAfterSETUP(), ProxyServerMediaSubsession::createNewRTPSink(), ProxyServerMediaSubsession::createNewStreamSource(), createSourceObjects(), QuickTimeFileSink::onRTCPBye(), AVIFileSink::onRTCPBye(), operator<<(), parseSDPAttribute_rtpmap(), printQOSData(), AVISubsessionIOState::setAVIstate(), SubsessionIOState::setQTstate(), setupStreams(), subsessionByeHandler(), AVISubsessionIOState::useFrame(), and SubsessionIOState::useFrameForHinting().
00163 { return fCodecName; }
| char const* MediaSubsession::protocolName | ( | ) | const [inline] |
Definition at line 164 of file MediaSession.hh.
References fProtocolName.
Referenced by RTSPClient::sendRequest().
00164 { return fProtocolName; }
| char const* MediaSubsession::controlPath | ( | ) | const [inline] |
Definition at line 165 of file MediaSession.hh.
References fControlPath.
Referenced by RTSPClient::constructSubsessionURL(), and parseSDPAttribute_control().
00165 { return fControlPath; }
| Boolean MediaSubsession::isSSM | ( | ) | const [inline] |
Definition at line 166 of file MediaSession.hh.
References fSourceFilterAddr.
Referenced by initiate(), and setDestinations().
00166 { return fSourceFilterAddr.s_addr != 0; }
| unsigned short MediaSubsession::videoWidth | ( | ) | const [inline] |
Definition at line 168 of file MediaSession.hh.
References fVideoWidth.
Referenced by AVIFileSink::AVIFileSink(), createSourceObjects(), and QuickTimeFileSink::QuickTimeFileSink().
00168 { return fVideoWidth; }
| unsigned short MediaSubsession::videoHeight | ( | ) | const [inline] |
Definition at line 169 of file MediaSession.hh.
References fVideoHeight.
Referenced by AVIFileSink::AVIFileSink(), createSourceObjects(), and QuickTimeFileSink::QuickTimeFileSink().
00169 { return fVideoHeight; }
| unsigned MediaSubsession::videoFPS | ( | ) | const [inline] |
Definition at line 170 of file MediaSession.hh.
References fVideoFPS.
Referenced by AVIFileSink::AVIFileSink(), and QuickTimeFileSink::QuickTimeFileSink().
00170 { return fVideoFPS; }
| unsigned MediaSubsession::numChannels | ( | ) | const [inline] |
Definition at line 171 of file MediaSession.hh.
References fNumChannels.
Referenced by QuickTimeFileSink::addAtom_hdlr2(), ProxyServerMediaSubsession::createNewRTPSink(), parseSDPAttribute_rtpmap(), AVISubsessionIOState::setAVIstate(), and while().
00171 { return fNumChannels; }
| float& MediaSubsession::scale | ( | ) | [inline] |
Definition at line 172 of file MediaSession.hh.
References fScale.
Referenced by getNormalPlayTime(), RTSPClient::handlePLAYResponse(), and RTSPClient::sendRequest().
00172 { return fScale; }
| RTPSource* MediaSubsession::rtpSource | ( | ) | [inline] |
Definition at line 174 of file MediaSession.hh.
References fRTPSource.
Referenced by QuickTimeFileSink::addAtom_hdlr2(), DummySink::afterGettingFrame(), SubsessionIOState::afterGettingFrame(), AVISubsessionIOState::afterGettingFrame(), beginQOSMeasurement(), checkForPacketArrival(), checkInterPacketGaps(), continueAfterDESCRIBE(), ProxyServerMediaSubsession::createNewStreamSource(), getNormalPlayTime(), RTSPClient::handlePLAYResponse(), RTSPClient::handleSETUPResponse(), printQOSData(), SubsessionIOState::syncOK(), SubsessionIOState::useFrame(), and SubsessionIOState::useFrameForHinting().
00174 { return fRTPSource; }
| RTCPInstance* MediaSubsession::rtcpInstance | ( | ) | [inline] |
Definition at line 175 of file MediaSession.hh.
References fRTCPInstance.
Referenced by AVIFileSink::AVIFileSink(), ProxyServerMediaSubsession::createNewStreamSource(), RTSPClient::handleSETUPResponse(), QuickTimeFileSink::QuickTimeFileSink(), setupStreams(), and shutdownStream().
00175 { return fRTCPInstance; }
| unsigned MediaSubsession::rtpTimestampFrequency | ( | ) | const [inline] |
Definition at line 176 of file MediaSession.hh.
References fRTPTimestampFrequency.
Referenced by QuickTimeFileSink::addAtom_hdlr2(), ProxyServerMediaSubsession::createNewRTPSink(), parseSDPAttribute_rtpmap(), QuickTimeFileSink::QuickTimeFileSink(), AVISubsessionIOState::setAVIstate(), SubsessionIOState::setQTstate(), and SubsessionIOState::useFrameForHinting().
00176 { return fRTPTimestampFrequency; }
| FramedSource* MediaSubsession::readSource | ( | ) | [inline] |
Definition at line 177 of file MediaSession.hh.
References fReadSource.
Referenced by AVIFileSink::AVIFileSink(), AVISubsessionIOState::AVISubsessionIOState(), QuickTimeFileSink::continuePlaying(), AVIFileSink::continuePlaying(), ProxyServerMediaSubsession::createNewStreamSource(), MediaSession::initiateByMediaType(), QuickTimeFileSink::QuickTimeFileSink(), setupStreams(), ProxyServerMediaSubsession::subsessionByeHandler(), and SubsessionIOState::SubsessionIOState().
00177 { return fReadSource; }
| void MediaSubsession::addFilter | ( | FramedFilter * | filter | ) |
Definition at line 613 of file MediaSession.cpp.
References fReadSource, FramedFilter::inputSource(), and NULL.
Referenced by ProxyServerMediaSubsession::createNewStreamSource().
00613 { 00614 if (filter == NULL || filter->inputSource() != fReadSource) return; // sanity check 00615 fReadSource = filter; 00616 }
| double MediaSubsession::playStartTime | ( | ) | const |
Definition at line 618 of file MediaSession.cpp.
References fParent, fPlayStartTime, and MediaSession::playStartTime().
Referenced by getNormalPlayTime(), and parseSDPAttribute_range().
00618 { 00619 if (fPlayStartTime > 0) return fPlayStartTime; 00620 00621 return fParent.playStartTime(); 00622 }
| double MediaSubsession::playEndTime | ( | ) | const |
Definition at line 624 of file MediaSession.cpp.
References fParent, fPlayEndTime, and MediaSession::playEndTime().
Referenced by parseSDPAttribute_range().
00624 { 00625 if (fPlayEndTime > 0) return fPlayEndTime; 00626 00627 return fParent.playEndTime(); 00628 }
| char * MediaSubsession::absStartTime | ( | ) | const |
Definition at line 630 of file MediaSession.cpp.
References MediaSession::absStartTime(), fAbsStartTime, fParent, and NULL.
00630 { 00631 if (fAbsStartTime != NULL) return fAbsStartTime; 00632 00633 return fParent.absStartTime(); 00634 }
| char * MediaSubsession::absEndTime | ( | ) | const |
Definition at line 636 of file MediaSession.cpp.
References MediaSession::absEndTime(), fAbsEndTime, fParent, and NULL.
00636 { 00637 if (fAbsEndTime != NULL) return fAbsEndTime; 00638 00639 return fParent.absEndTime(); 00640 }
| double& MediaSubsession::_playStartTime | ( | ) | [inline] |
Definition at line 188 of file MediaSession.hh.
References fPlayStartTime.
Referenced by RTSPClient::handlePLAYResponse().
00188 { return fPlayStartTime; }
| double& MediaSubsession::_playEndTime | ( | ) | [inline] |
Definition at line 189 of file MediaSession.hh.
References fPlayEndTime.
Referenced by RTSPClient::handlePLAYResponse().
00189 { return fPlayEndTime; }
| char*& MediaSubsession::_absStartTime | ( | ) | [inline] |
Definition at line 190 of file MediaSession.hh.
References fAbsStartTime.
Referenced by MediaSession::absStartTime(), RTSPClient::handlePLAYResponse(), and parseSDPAttribute_range().
00190 { return fAbsStartTime; }
| char*& MediaSubsession::_absEndTime | ( | ) | [inline] |
Definition at line 191 of file MediaSession.hh.
References fAbsEndTime.
Referenced by MediaSession::absEndTime(), RTSPClient::handlePLAYResponse(), and parseSDPAttribute_range().
00191 { return fAbsEndTime; }
| Boolean MediaSubsession::initiate | ( | int | useSpecialRTPoffset = -1 |
) |
Definition at line 649 of file MediaSession.cpp.
References HashTable::Add(), Groupsock::changeDestinationParameters(), Medium::close(), MediaSession::CNAME(), connectionEndpointAddress(), HashTable::create(), RTCPInstance::createNew(), createSourceObjects(), env(), False, fBandwidth, fClientPortNum, fCodecName, fParent, fProtocolName, fReadSource, fRTCPInstance, fRTCPSocket, fRTPSocket, fRTPSource, fSourceFilterAddr, getSourcePort(), honorSDPPortChoice, increaseReceiveBufferTo(), IsMulticastAddress(), isSSM(), NULL, Port::num(), ONE_WORD_HASH_KEYS, HashTable::RemoveNext(), UsageEnvironment::setResultMsg(), socketHashTable(), Socket::socketNum(), and True.
Referenced by continueAfterDESCRIBE(), ProxyServerMediaSubsession::createNewStreamSource(), MediaSession::initiateByMediaType(), DarwinInjector::setDestination(), and setupNextSubsession().
00649 { 00650 if (fReadSource != NULL) return True; // has already been initiated 00651 00652 do { 00653 if (fCodecName == NULL) { 00654 env().setResultMsg("Codec is unspecified"); 00655 break; 00656 } 00657 00658 // Create RTP and RTCP 'Groupsocks' on which to receive incoming data. 00659 // (Groupsocks will work even for unicast addresses) 00660 struct in_addr tempAddr; 00661 tempAddr.s_addr = connectionEndpointAddress(); 00662 // This could get changed later, as a result of a RTSP "SETUP" 00663 00664 if (fClientPortNum != 0 && (honorSDPPortChoice || IsMulticastAddress(tempAddr.s_addr))) { 00665 // This is a multicast stream, and the sockets' port numbers were specified for us. Use these: 00666 Boolean const protocolIsRTP = strcmp(fProtocolName, "RTP") == 0; 00667 if (protocolIsRTP) { 00668 fClientPortNum = fClientPortNum&~1; // use an even-numbered port for RTP, and the next (odd-numbered) port for RTCP 00669 } 00670 if (isSSM()) { 00671 fRTPSocket = new Groupsock(env(), tempAddr, fSourceFilterAddr, fClientPortNum); 00672 } else { 00673 fRTPSocket = new Groupsock(env(), tempAddr, fClientPortNum, 255); 00674 } 00675 if (fRTPSocket == NULL) { 00676 env().setResultMsg("Failed to create RTP socket"); 00677 break; 00678 } 00679 00680 if (protocolIsRTP) { 00681 // Set our RTCP port to be the RTP port +1 00682 portNumBits const rtcpPortNum = fClientPortNum|1; 00683 if (isSSM()) { 00684 fRTCPSocket = new Groupsock(env(), tempAddr, fSourceFilterAddr, rtcpPortNum); 00685 } else { 00686 fRTCPSocket = new Groupsock(env(), tempAddr, rtcpPortNum, 255); 00687 } 00688 } 00689 } else { 00690 // Port numbers were not specified in advance, so we use ephemeral port numbers. 00691 // Create sockets until we get a port-number pair (even: RTP; even+1: RTCP). 00692 // We need to make sure that we don't keep trying to use the same bad port numbers over and over again. 00693 // so we store bad sockets in a table, and delete them all when we're done. 00694 HashTable* socketHashTable = HashTable::create(ONE_WORD_HASH_KEYS); 00695 if (socketHashTable == NULL) break; 00696 Boolean success = False; 00697 NoReuse dummy(env()); // ensures that our new ephemeral port number won't be one that's already in use 00698 00699 while (1) { 00700 // Create a new socket: 00701 if (isSSM()) { 00702 fRTPSocket = new Groupsock(env(), tempAddr, fSourceFilterAddr, 0); 00703 } else { 00704 fRTPSocket = new Groupsock(env(), tempAddr, 0, 255); 00705 } 00706 if (fRTPSocket == NULL) { 00707 env().setResultMsg("MediaSession::initiate(): unable to create RTP and RTCP sockets"); 00708 break; 00709 } 00710 00711 // Get the client port number, and check whether it's even (for RTP): 00712 Port clientPort(0); 00713 if (!getSourcePort(env(), fRTPSocket->socketNum(), clientPort)) { 00714 break; 00715 } 00716 fClientPortNum = ntohs(clientPort.num()); 00717 if ((fClientPortNum&1) != 0) { // it's odd 00718 // Record this socket in our table, and keep trying: 00719 unsigned key = (unsigned)fClientPortNum; 00720 Groupsock* existing = (Groupsock*)socketHashTable->Add((char const*)key, fRTPSocket); 00721 delete existing; // in case it wasn't NULL 00722 continue; 00723 } 00724 00725 // Make sure we can use the next (i.e., odd) port number, for RTCP: 00726 portNumBits rtcpPortNum = fClientPortNum|1; 00727 if (isSSM()) { 00728 fRTCPSocket = new Groupsock(env(), tempAddr, fSourceFilterAddr, rtcpPortNum); 00729 } else { 00730 fRTCPSocket = new Groupsock(env(), tempAddr, rtcpPortNum, 255); 00731 } 00732 if (fRTCPSocket != NULL && fRTCPSocket->socketNum() >= 0) { 00733 // Success! Use these two sockets. 00734 success = True; 00735 break; 00736 } else { 00737 // We couldn't create the RTCP socket (perhaps that port number's already in use elsewhere?). 00738 delete fRTCPSocket; 00739 00740 // Record the first socket in our table, and keep trying: 00741 unsigned key = (unsigned)fClientPortNum; 00742 Groupsock* existing = (Groupsock*)socketHashTable->Add((char const*)key, fRTPSocket); 00743 delete existing; // in case it wasn't NULL 00744 continue; 00745 } 00746 } 00747 00748 // Clean up the socket hash table (and contents): 00749 Groupsock* oldGS; 00750 while ((oldGS = (Groupsock*)socketHashTable->RemoveNext()) != NULL) { 00751 delete oldGS; 00752 } 00753 delete socketHashTable; 00754 00755 if (!success) break; // a fatal error occurred trying to create the RTP and RTCP sockets; we can't continue 00756 } 00757 00758 // Try to use a big receive buffer for RTP - at least 0.1 second of 00759 // specified bandwidth and at least 50 KB 00760 unsigned rtpBufSize = fBandwidth * 25 / 2; // 1 kbps * 0.1 s = 12.5 bytes 00761 if (rtpBufSize < 50 * 1024) 00762 rtpBufSize = 50 * 1024; 00763 increaseReceiveBufferTo(env(), fRTPSocket->socketNum(), rtpBufSize); 00764 00765 if (isSSM() && fRTCPSocket != NULL) { 00766 // Special case for RTCP SSM: Send RTCP packets back to the source via unicast: 00767 fRTCPSocket->changeDestinationParameters(fSourceFilterAddr,0,~0); 00768 } 00769 00770 // Create "fRTPSource" and "fReadSource": 00771 if (!createSourceObjects(useSpecialRTPoffset)) break; 00772 00773 if (fReadSource == NULL) { 00774 env().setResultMsg("Failed to create read source"); 00775 break; 00776 } 00777 00778 // Finally, create our RTCP instance. (It starts running automatically) 00779 if (fRTPSource != NULL && fRTCPSocket != NULL) { 00780 // If bandwidth is specified, use it and add 5% for RTCP overhead. 00781 // Otherwise make a guess at 500 kbps. 00782 unsigned totSessionBandwidth 00783 = fBandwidth ? fBandwidth + fBandwidth / 20 : 500; 00784 fRTCPInstance = RTCPInstance::createNew(env(), fRTCPSocket, 00785 totSessionBandwidth, 00786 (unsigned char const*) 00787 fParent.CNAME(), 00788 NULL /* we're a client */, 00789 fRTPSource); 00790 if (fRTCPInstance == NULL) { 00791 env().setResultMsg("Failed to create RTCP instance"); 00792 break; 00793 } 00794 } 00795 00796 return True; 00797 } while (0); 00798 00799 delete fRTPSocket; fRTPSocket = NULL; 00800 delete fRTCPSocket; fRTCPSocket = NULL; 00801 Medium::close(fRTCPInstance); fRTCPInstance = NULL; 00802 Medium::close(fReadSource); fReadSource = fRTPSource = NULL; 00803 fClientPortNum = 0; 00804 return False; 00805 }
| void MediaSubsession::deInitiate | ( | ) |
Definition at line 807 of file MediaSession.cpp.
References Medium::close(), fReadSource, fRTCPInstance, fRTCPSocket, fRTPSocket, fRTPSource, and NULL.
Referenced by MediaSession::initiateByMediaType(), ProxyServerMediaSubsession::subsessionByeHandler(), and ~MediaSubsession().
00807 { 00808 Medium::close(fRTCPInstance); 00809 fRTCPInstance = NULL; 00810 00811 Medium::close(fReadSource); // this is assumed to also close fRTPSource 00812 fReadSource = NULL; fRTPSource = NULL; 00813 00814 delete fRTCPSocket; delete fRTPSocket; 00815 fRTCPSocket = fRTPSocket = NULL; 00816 }
| Boolean MediaSubsession::setClientPortNum | ( | unsigned short | portNum | ) |
Definition at line 818 of file MediaSession.cpp.
References env(), False, fClientPortNum, fReadSource, NULL, UsageEnvironment::setResultMsg(), and True.
Referenced by continueAfterDESCRIBE().
00818 { 00819 if (fReadSource != NULL) { 00820 env().setResultMsg("A read source has already been created"); 00821 return False; 00822 } 00823 00824 fClientPortNum = portNum; 00825 return True; 00826 }
| void MediaSubsession::receiveRawMP3ADUs | ( | ) | [inline] |
Definition at line 204 of file MediaSession.hh.
References fReceiveRawMP3ADUs, and True.
Referenced by ProxyServerMediaSubsession::createNewStreamSource().
00204 { fReceiveRawMP3ADUs = True; } // optional hack for audio/MPA-ROBUST; must not be called after Initiate()
| void MediaSubsession::receiveRawJPEGFrames | ( | ) | [inline] |
Definition at line 205 of file MediaSession.hh.
References fReceiveRawJPEGFrames, and True.
Referenced by ProxyServerMediaSubsession::createNewStreamSource().
00205 { fReceiveRawJPEGFrames = True; } // optional hack for video/JPEG; must not be called after Initiate()
| char*& MediaSubsession::connectionEndpointName | ( | ) | [inline] |
Definition at line 206 of file MediaSession.hh.
References fConnectionEndpointName.
Referenced by connectionEndpointAddress(), RTSPClient::handleSETUPResponse(), parseSDPLine_c(), and setupSubsession().
00206 { return fConnectionEndpointName; }
| char const* MediaSubsession::connectionEndpointName | ( | ) | const [inline] |
Definition at line 207 of file MediaSession.hh.
References fConnectionEndpointName.
00207 { 00208 return fConnectionEndpointName; 00209 }
| unsigned MediaSubsession::bandwidth | ( | ) | const [inline] |
Definition at line 212 of file MediaSession.hh.
References fBandwidth.
Referenced by ProxyServerMediaSubsession::createNewStreamSource().
00212 { return fBandwidth; }
| unsigned MediaSubsession::fmtp_auxiliarydatasizelength | ( | ) | const [inline] |
Definition at line 215 of file MediaSession.hh.
References fAuxiliarydatasizelength.
00215 { return fAuxiliarydatasizelength; }
| unsigned MediaSubsession::fmtp_constantduration | ( | ) | const [inline] |
Definition at line 216 of file MediaSession.hh.
References fConstantduration.
00216 { return fConstantduration; }
| unsigned MediaSubsession::fmtp_constantsize | ( | ) | const [inline] |
Definition at line 217 of file MediaSession.hh.
References fConstantsize.
00217 { return fConstantsize; }
| unsigned MediaSubsession::fmtp_crc | ( | ) | const [inline] |
| unsigned MediaSubsession::fmtp_ctsdeltalength | ( | ) | const [inline] |
Definition at line 219 of file MediaSession.hh.
References fCtsdeltalength.
00219 { return fCtsdeltalength; }
| unsigned MediaSubsession::fmtp_de_interleavebuffersize | ( | ) | const [inline] |
Definition at line 220 of file MediaSession.hh.
References fDe_interleavebuffersize.
00220 { return fDe_interleavebuffersize; }
| unsigned MediaSubsession::fmtp_dtsdeltalength | ( | ) | const [inline] |
Definition at line 221 of file MediaSession.hh.
References fDtsdeltalength.
00221 { return fDtsdeltalength; }
| unsigned MediaSubsession::fmtp_indexdeltalength | ( | ) | const [inline] |
Definition at line 222 of file MediaSession.hh.
References fIndexdeltalength.
00222 { return fIndexdeltalength; }
| unsigned MediaSubsession::fmtp_indexlength | ( | ) | const [inline] |
Definition at line 223 of file MediaSession.hh.
References fIndexlength.
Referenced by SubsessionIOState::useFrameForHinting().
00223 { return fIndexlength; }
| unsigned MediaSubsession::fmtp_interleaving | ( | ) | const [inline] |
Definition at line 224 of file MediaSession.hh.
References fInterleaving.
00224 { return fInterleaving; }
| unsigned MediaSubsession::fmtp_maxdisplacement | ( | ) | const [inline] |
Definition at line 225 of file MediaSession.hh.
References fMaxdisplacement.
00225 { return fMaxdisplacement; }
| unsigned MediaSubsession::fmtp_objecttype | ( | ) | const [inline] |
Definition at line 226 of file MediaSession.hh.
References fObjecttype.
00226 { return fObjecttype; }
| unsigned MediaSubsession::fmtp_octetalign | ( | ) | const [inline] |
Definition at line 227 of file MediaSession.hh.
References fOctetalign.
00227 { return fOctetalign; }
| unsigned MediaSubsession::fmtp_profile_level_id | ( | ) | const [inline] |
Definition at line 228 of file MediaSession.hh.
References fProfile_level_id.
Referenced by ProxyServerMediaSubsession::createNewRTPSink().
00228 { return fProfile_level_id; }
| unsigned MediaSubsession::fmtp_robustsorting | ( | ) | const [inline] |
Definition at line 229 of file MediaSession.hh.
References fRobustsorting.
00229 { return fRobustsorting; }
| unsigned MediaSubsession::fmtp_sizelength | ( | ) | const [inline] |
Definition at line 230 of file MediaSession.hh.
References fSizelength.
Referenced by SubsessionIOState::useFrameForHinting().
00230 { return fSizelength; }
| unsigned MediaSubsession::fmtp_streamstateindication | ( | ) | const [inline] |
Definition at line 231 of file MediaSession.hh.
References fStreamstateindication.
00231 { return fStreamstateindication; }
| unsigned MediaSubsession::fmtp_streamtype | ( | ) | const [inline] |
Definition at line 232 of file MediaSession.hh.
References fStreamtype.
00232 { return fStreamtype; }
| Boolean MediaSubsession::fmtp_cpresent | ( | ) | const [inline] |
| Boolean MediaSubsession::fmtp_randomaccessindication | ( | ) | const [inline] |
Definition at line 234 of file MediaSession.hh.
References fRandomaccessindication.
00234 { return fRandomaccessindication; }
| char const* MediaSubsession::fmtp_config | ( | ) | const [inline] |
Definition at line 235 of file MediaSession.hh.
References fConfig.
Referenced by QuickTimeFileSink::addAtom_hdlr2(), ProxyServerMediaSubsession::createNewRTPSink(), fmtp_configuration(), SubsessionIOState::setQTstate(), and setupStreams().
00235 { return fConfig; }
| char const* MediaSubsession::fmtp_configuration | ( | ) | const [inline] |
Definition at line 236 of file MediaSession.hh.
References fmtp_config().
00236 { return fmtp_config(); }
| char const* MediaSubsession::fmtp_mode | ( | ) | const [inline] |
Definition at line 237 of file MediaSession.hh.
References fMode.
Referenced by ProxyServerMediaSubsession::createNewRTPSink().
00237 { return fMode; }
| char const* MediaSubsession::fmtp_spropparametersets | ( | ) | const [inline] |
Definition at line 238 of file MediaSession.hh.
References fSpropParameterSets.
Referenced by QuickTimeFileSink::addAtom_hdlr2(), ProxyServerMediaSubsession::createNewRTPSink(), and setupStreams().
00238 { return fSpropParameterSets; }
| char const* MediaSubsession::fmtp_emphasis | ( | ) | const [inline] |
| char const* MediaSubsession::fmtp_channelorder | ( | ) | const [inline] |
Definition at line 240 of file MediaSession.hh.
References fChannelOrder.
00240 { return fChannelOrder; }
| netAddressBits MediaSubsession::connectionEndpointAddress | ( | ) | const |
Definition at line 828 of file MediaSession.cpp.
References MediaSession::connectionEndpointName(), connectionEndpointName(), NetAddress::data(), NetAddressList::firstAddress(), NULL, NetAddressList::numAddresses(), and parentSession().
Referenced by RTSPClient::handleSETUPResponse(), initiate(), RTSPClient::sendRequest(), setDestinations(), and setupSubsession().
00828 { 00829 do { 00830 // Get the endpoint name from with us, or our parent session: 00831 char const* endpointString = connectionEndpointName(); 00832 if (endpointString == NULL) { 00833 endpointString = parentSession().connectionEndpointName(); 00834 } 00835 if (endpointString == NULL) break; 00836 00837 // Now, convert this name to an address, if we can: 00838 NetAddressList addresses(endpointString); 00839 if (addresses.numAddresses() == 0) break; 00840 00841 return *(netAddressBits*)(addresses.firstAddress()->data()); 00842 } while (0); 00843 00844 // No address known: 00845 return 0; 00846 }
| void MediaSubsession::setDestinations | ( | netAddressBits | defaultDestAddress | ) |
Definition at line 848 of file MediaSession.cpp.
References Groupsock::changeDestinationParameters(), connectionEndpointAddress(), fRTCPSocket, fRTPSocket, isSSM(), NULL, and serverPortNum.
Referenced by RTSPClient::handleSETUPResponse(), and setupSubsession().
00848 { 00849 // Get the destination address from the connection endpoint name 00850 // (This will be 0 if it's not known, in which case we use the default) 00851 netAddressBits destAddress = connectionEndpointAddress(); 00852 if (destAddress == 0) destAddress = defaultDestAddress; 00853 struct in_addr destAddr; destAddr.s_addr = destAddress; 00854 00855 // The destination TTL remains unchanged: 00856 int destTTL = ~0; // means: don't change 00857 00858 if (fRTPSocket != NULL) { 00859 Port destPort(serverPortNum); 00860 fRTPSocket->changeDestinationParameters(destAddr, destPort, destTTL); 00861 } 00862 if (fRTCPSocket != NULL && !isSSM()) { 00863 // Note: For SSM sessions, the dest address for RTCP was already set. 00864 Port destPort(serverPortNum+1); 00865 fRTCPSocket->changeDestinationParameters(destAddr, destPort, destTTL); 00866 } 00867 }
| char const* MediaSubsession::sessionId | ( | ) | const [inline] |
Definition at line 249 of file MediaSession.hh.
References fSessionId.
Referenced by RTSPClient::sendRequest().
00249 { return fSessionId; }
| void MediaSubsession::setSessionId | ( | char const * | sessionId | ) |
Definition at line 869 of file MediaSession.cpp.
References fSessionId, and strDup().
Referenced by RTSPClient::handleSETUPResponse(), and setupSubsession().
00869 { 00870 delete[] fSessionId; 00871 fSessionId = strDup(sessionId); 00872 }
| double MediaSubsession::getNormalPlayTime | ( | struct timeval const & | presentationTime | ) |
Definition at line 874 of file MediaSession.cpp.
References RTPSource::curPacketRTPTimestamp(), False, fNPT_PTS_Offset, NULL, playStartTime(), rtpInfo, rtpSource(), scale(), and seqNumLT().
Referenced by DummySink::afterGettingFrame().
00874 { 00875 if (rtpSource() == NULL || rtpSource()->timestampFrequency() == 0) return 0.0; // no RTP source, or bad freq! 00876 00877 // First, check whether our "RTPSource" object has already been synchronized using RTCP. 00878 // If it hasn't, then - as a special case - we need to use the RTP timestamp to compute the NPT. 00879 if (!rtpSource()->hasBeenSynchronizedUsingRTCP()) { 00880 if (!rtpInfo.infoIsNew) return 0.0; // the "rtpInfo" structure has not been filled in 00881 u_int32_t timestampOffset = rtpSource()->curPacketRTPTimestamp() - rtpInfo.timestamp; 00882 double nptOffset = (timestampOffset/(double)(rtpSource()->timestampFrequency()))*scale(); 00883 double npt = playStartTime() + nptOffset; 00884 00885 return npt; 00886 } else { 00887 // Common case: We have been synchronized using RTCP. This means that the "presentationTime" parameter 00888 // will be accurate, and so we should use this to compute the NPT. 00889 double ptsDouble = (double)(presentationTime.tv_sec + presentationTime.tv_usec/1000000.0); 00890 00891 if (rtpInfo.infoIsNew) { 00892 // This is the first time we've been called with a synchronized presentation time since the "rtpInfo" 00893 // structure was last filled in. Use this "presentationTime" to compute "fNPT_PTS_Offset": 00894 if (seqNumLT(rtpSource()->curPacketRTPSeqNum(), rtpInfo.seqNum)) return -0.1; // sanity check; ignore old packets 00895 u_int32_t timestampOffset = rtpSource()->curPacketRTPTimestamp() - rtpInfo.timestamp; 00896 double nptOffset = (timestampOffset/(double)(rtpSource()->timestampFrequency()))*scale(); 00897 double npt = playStartTime() + nptOffset; 00898 fNPT_PTS_Offset = npt - ptsDouble*scale(); 00899 rtpInfo.infoIsNew = False; // for next time 00900 00901 return npt; 00902 } else { 00903 // Use the precomputed "fNPT_PTS_Offset" to compute the NPT from the PTS: 00904 if (fNPT_PTS_Offset == 0.0) return 0.0; // error: The "rtpInfo" structure was apparently never filled in 00905 return (double)(ptsDouble*scale() + fNPT_PTS_Offset); 00906 } 00907 } 00908 }
| UsageEnvironment& MediaSubsession::env | ( | ) | [inline, protected] |
Definition at line 281 of file MediaSession.hh.
References Medium::envir(), and fParent.
Referenced by createSourceObjects(), initiate(), and setClientPortNum().
| void MediaSubsession::setNext | ( | MediaSubsession * | next | ) | [inline, protected] |
Definition at line 282 of file MediaSession.hh.
References fNext, and MediaSubsessionIterator::next().
Referenced by MediaSession::initializeWithSDP().
00282 { fNext = next; }
| Boolean MediaSubsession::parseSDPLine_c | ( | char const * | sdpLine | ) | [protected] |
Definition at line 910 of file MediaSession.cpp.
References connectionEndpointName(), False, fConnectionEndpointName, NULL, parseCLine(), and True.
Referenced by MediaSession::initializeWithSDP().
00910 { 00911 // Check for "c=IN IP4 <connection-endpoint>" 00912 // or "c=IN IP4 <connection-endpoint>/<ttl+numAddresses>" 00913 // (Later, do something with <ttl+numAddresses> also #####) 00914 char* connectionEndpointName = parseCLine(sdpLine); 00915 if (connectionEndpointName != NULL) { 00916 delete[] fConnectionEndpointName; 00917 fConnectionEndpointName = connectionEndpointName; 00918 return True; 00919 } 00920 00921 return False; 00922 }
| Boolean MediaSubsession::parseSDPLine_b | ( | char const * | sdpLine | ) | [protected] |
Definition at line 924 of file MediaSession.cpp.
References fBandwidth.
Referenced by MediaSession::initializeWithSDP().
00924 { 00925 // Check for "b=<bwtype>:<bandwidth>" line 00926 // RTP applications are expected to use bwtype="AS" 00927 return sscanf(sdpLine, "b=AS:%u", &fBandwidth) == 1; 00928 }
| Boolean MediaSubsession::parseSDPAttribute_rtpmap | ( | char const * | sdpLine | ) | [protected] |
Definition at line 930 of file MediaSession.cpp.
References codecName(), False, fCodecName, fNumChannels, fRTPPayloadFormat, fRTPTimestampFrequency, numChannels(), rtpTimestampFrequency(), strDup(), strDupSize(), and True.
Referenced by MediaSession::initializeWithSDP().
00930 { 00931 // Check for a "a=rtpmap:<fmt> <codec>/<freq>" line: 00932 // (Also check without the "/<freq>"; RealNetworks omits this) 00933 // Also check for a trailing "/<numChannels>". 00934 Boolean parseSuccess = False; 00935 00936 unsigned rtpmapPayloadFormat; 00937 char* codecName = strDupSize(sdpLine); // ensures we have enough space 00938 unsigned rtpTimestampFrequency = 0; 00939 unsigned numChannels = 1; 00940 if (sscanf(sdpLine, "a=rtpmap: %u %[^/]/%u/%u", 00941 &rtpmapPayloadFormat, codecName, &rtpTimestampFrequency, 00942 &numChannels) == 4 00943 || sscanf(sdpLine, "a=rtpmap: %u %[^/]/%u", 00944 &rtpmapPayloadFormat, codecName, &rtpTimestampFrequency) == 3 00945 || sscanf(sdpLine, "a=rtpmap: %u %s", 00946 &rtpmapPayloadFormat, codecName) == 2) { 00947 parseSuccess = True; 00948 if (rtpmapPayloadFormat == fRTPPayloadFormat) { 00949 // This "rtpmap" matches our payload format, so set our 00950 // codec name and timestamp frequency: 00951 // (First, make sure the codec name is upper case) 00952 { 00953 Locale l("POSIX"); 00954 for (char* p = codecName; *p != '\0'; ++p) *p = toupper(*p); 00955 } 00956 delete[] fCodecName; fCodecName = strDup(codecName); 00957 fRTPTimestampFrequency = rtpTimestampFrequency; 00958 fNumChannels = numChannels; 00959 } 00960 } 00961 delete[] codecName; 00962 00963 return parseSuccess; 00964 }
| Boolean MediaSubsession::parseSDPAttribute_control | ( | char const * | sdpLine | ) | [protected] |
Definition at line 966 of file MediaSession.cpp.
References controlPath(), False, fControlPath, strDup(), strDupSize(), and True.
Referenced by MediaSession::initializeWithSDP().
00966 { 00967 // Check for a "a=control:<control-path>" line: 00968 Boolean parseSuccess = False; 00969 00970 char* controlPath = strDupSize(sdpLine); // ensures we have enough space 00971 if (sscanf(sdpLine, "a=control: %s", controlPath) == 1) { 00972 parseSuccess = True; 00973 delete[] fControlPath; fControlPath = strDup(controlPath); 00974 } 00975 delete[] controlPath; 00976 00977 return parseSuccess; 00978 }
| Boolean MediaSubsession::parseSDPAttribute_range | ( | char const * | sdpLine | ) | [protected] |
Definition at line 980 of file MediaSession.cpp.
References _absEndTime(), _absStartTime(), False, fParent, fPlayEndTime, fPlayStartTime, parseRangeAttribute(), MediaSession::playEndTime(), playEndTime(), MediaSession::playStartTime(), playStartTime(), and True.
Referenced by MediaSession::initializeWithSDP().
00980 { 00981 // Check for a "a=range:npt=<startTime>-<endTime>" line: 00982 // (Later handle other kinds of "a=range" attributes also???#####) 00983 Boolean parseSuccess = False; 00984 00985 double playStartTime; 00986 double playEndTime; 00987 if (parseRangeAttribute(sdpLine, playStartTime, playEndTime)) { 00988 parseSuccess = True; 00989 if (playStartTime > fPlayStartTime) { 00990 fPlayStartTime = playStartTime; 00991 if (playStartTime > fParent.playStartTime()) { 00992 fParent.playStartTime() = playStartTime; 00993 } 00994 } 00995 if (playEndTime > fPlayEndTime) { 00996 fPlayEndTime = playEndTime; 00997 if (playEndTime > fParent.playEndTime()) { 00998 fParent.playEndTime() = playEndTime; 00999 } 01000 } 01001 } else if (parseRangeAttribute(sdpLine, _absStartTime(), _absEndTime())) { 01002 parseSuccess = True; 01003 } 01004 01005 return parseSuccess; 01006 }
| Boolean MediaSubsession::parseSDPAttribute_fmtp | ( | char const * | sdpLine | ) | [protected] |
Definition at line 1008 of file MediaSession.cpp.
References False, fAuxiliarydatasizelength, fChannelOrder, fConfig, fConstantduration, fConstantsize, fCpresent, fCRC, fCtsdeltalength, fDe_interleavebuffersize, fDtsdeltalength, fEmphasis, fIndexdeltalength, fIndexlength, fInterleaving, fMaxdisplacement, fMode, fObjecttype, fOctetalign, fProfile_level_id, fRandomaccessindication, fRobustsorting, fSizelength, fSpropParameterSets, fStreamstateindication, fStreamtype, strDup(), strDupSize(), and True.
Referenced by MediaSession::initializeWithSDP().
01008 { 01009 // Check for a "a=fmtp:" line: 01010 // TEMP: We check only for a handful of expected parameter names ##### 01011 // Later: (i) check that payload format number matches; ##### 01012 // (ii) look for other parameters also (generalize?) ##### 01013 do { 01014 if (strncmp(sdpLine, "a=fmtp:", 7) != 0) break; sdpLine += 7; 01015 while (isdigit(*sdpLine)) ++sdpLine; 01016 01017 // The remaining "sdpLine" should be a sequence of 01018 // <name>=<value>; 01019 // parameter assignments. Look at each of these. 01020 // First, convert the line to lower-case, to ease comparison: 01021 char* const lineCopy = strDup(sdpLine); char* line = lineCopy; 01022 { 01023 Locale l("POSIX"); 01024 for (char* c = line; *c != '\0'; ++c) *c = tolower(*c); 01025 } 01026 while (*line != '\0' && *line != '\r' && *line != '\n') { 01027 unsigned u; 01028 char* valueStr = strDupSize(line); 01029 if (sscanf(line, " auxiliarydatasizelength = %u", &u) == 1) { 01030 fAuxiliarydatasizelength = u; 01031 } else if (sscanf(line, " constantduration = %u", &u) == 1) { 01032 fConstantduration = u; 01033 } else if (sscanf(line, " constantsize; = %u", &u) == 1) { 01034 fConstantsize = u; 01035 } else if (sscanf(line, " crc = %u", &u) == 1) { 01036 fCRC = u; 01037 } else if (sscanf(line, " ctsdeltalength = %u", &u) == 1) { 01038 fCtsdeltalength = u; 01039 } else if (sscanf(line, " de-interleavebuffersize = %u", &u) == 1) { 01040 fDe_interleavebuffersize = u; 01041 } else if (sscanf(line, " dtsdeltalength = %u", &u) == 1) { 01042 fDtsdeltalength = u; 01043 } else if (sscanf(line, " indexdeltalength = %u", &u) == 1) { 01044 fIndexdeltalength = u; 01045 } else if (sscanf(line, " indexlength = %u", &u) == 1) { 01046 fIndexlength = u; 01047 } else if (sscanf(line, " interleaving = %u", &u) == 1) { 01048 fInterleaving = u; 01049 } else if (sscanf(line, " maxdisplacement = %u", &u) == 1) { 01050 fMaxdisplacement = u; 01051 } else if (sscanf(line, " objecttype = %u", &u) == 1) { 01052 fObjecttype = u; 01053 } else if (sscanf(line, " octet-align = %u", &u) == 1) { 01054 fOctetalign = u; 01055 } else if (sscanf(line, " profile-level-id = %x", &u) == 1) { 01056 // Note that the "profile-level-id" parameter is assumed to be hexadecimal 01057 fProfile_level_id = u; 01058 } else if (sscanf(line, " robust-sorting = %u", &u) == 1) { 01059 fRobustsorting = u; 01060 } else if (sscanf(line, " sizelength = %u", &u) == 1) { 01061 fSizelength = u; 01062 } else if (sscanf(line, " streamstateindication = %u", &u) == 1) { 01063 fStreamstateindication = u; 01064 } else if (sscanf(line, " streamtype = %u", &u) == 1) { 01065 fStreamtype = u; 01066 } else if (sscanf(line, " cpresent = %u", &u) == 1) { 01067 fCpresent = u != 0; 01068 } else if (sscanf(line, " randomaccessindication = %u", &u) == 1) { 01069 fRandomaccessindication = u != 0; 01070 } else if (sscanf(sdpLine, " config = %[^; \t\r\n]", valueStr) == 1 || 01071 sscanf(sdpLine, " configuration = %[^; \t\r\n]", valueStr) == 1) { 01072 // Note: We used "sdpLine" here, because the value may be case-sensitive (if it's Base-64). 01073 delete[] fConfig; fConfig = strDup(valueStr); 01074 } else if (sscanf(line, " mode = %[^; \t\r\n]", valueStr) == 1) { 01075 delete[] fMode; fMode = strDup(valueStr); 01076 } else if (sscanf(sdpLine, " sprop-parameter-sets = %[^; \t\r\n]", valueStr) == 1) { 01077 // Note: We used "sdpLine" here, because the value is case-sensitive. 01078 delete[] fSpropParameterSets; fSpropParameterSets = strDup(valueStr); 01079 } else if (sscanf(line, " emphasis = %[^; \t\r\n]", valueStr) == 1) { 01080 delete[] fEmphasis; fEmphasis = strDup(valueStr); 01081 } else if (sscanf(sdpLine, " channel-order = %[^; \t\r\n]", valueStr) == 1) { 01082 // Note: We used "sdpLine" here, because the value is case-sensitive. 01083 delete[] fChannelOrder; fChannelOrder = strDup(valueStr); 01084 } else { 01085 // Some of the above parameters are Boolean. Check whether the parameter 01086 // names appear alone, without a "= 1" at the end: 01087 if (sscanf(line, " %[^; \t\r\n]", valueStr) == 1) { 01088 if (strcmp(valueStr, "octet-align") == 0) { 01089 fOctetalign = 1; 01090 } else if (strcmp(valueStr, "cpresent") == 0) { 01091 fCpresent = True; 01092 } else if (strcmp(valueStr, "crc") == 0) { 01093 fCRC = 1; 01094 } else if (strcmp(valueStr, "robust-sorting") == 0) { 01095 fRobustsorting = 1; 01096 } else if (strcmp(valueStr, "randomaccessindication") == 0) { 01097 fRandomaccessindication = True; 01098 } 01099 } 01100 } 01101 delete[] valueStr; 01102 01103 // Move to the next parameter assignment string: 01104 while (*line != '\0' && *line != '\r' && *line != '\n' 01105 && *line != ';') ++line; 01106 while (*line == ';') ++line; 01107 01108 // Do the same with sdpLine; needed for finding case sensitive values: 01109 while (*sdpLine != '\0' && *sdpLine != '\r' && *sdpLine != '\n' 01110 && *sdpLine != ';') ++sdpLine; 01111 while (*sdpLine == ';') ++sdpLine; 01112 } 01113 delete[] lineCopy; 01114 return True; 01115 } while (0); 01116 01117 return False; 01118 }
| Boolean MediaSubsession::parseSDPAttribute_source_filter | ( | char const * | sdpLine | ) | [protected] |
Definition at line 1121 of file MediaSession.cpp.
References fSourceFilterAddr, and parseSourceFilterAttribute().
Referenced by MediaSession::initializeWithSDP().
01121 { 01122 return parseSourceFilterAttribute(sdpLine, fSourceFilterAddr); 01123 }
| Boolean MediaSubsession::parseSDPAttribute_x_dimensions | ( | char const * | sdpLine | ) | [protected] |
Definition at line 1125 of file MediaSession.cpp.
References False, fVideoHeight, fVideoWidth, and True.
Referenced by MediaSession::initializeWithSDP().
01125 { 01126 // Check for a "a=x-dimensions:<width>,<height>" line: 01127 Boolean parseSuccess = False; 01128 01129 int width, height; 01130 if (sscanf(sdpLine, "a=x-dimensions:%d,%d", &width, &height) == 2) { 01131 parseSuccess = True; 01132 fVideoWidth = (unsigned short)width; 01133 fVideoHeight = (unsigned short)height; 01134 } 01135 01136 return parseSuccess; 01137 }
| Boolean MediaSubsession::parseSDPAttribute_framerate | ( | char const * | sdpLine | ) | [protected] |
Definition at line 1139 of file MediaSession.cpp.
References False, fVideoFPS, and True.
Referenced by MediaSession::initializeWithSDP().
01139 { 01140 // Check for a "a=framerate: <fps>" or "a=x-framerate: <fps>" line: 01141 Boolean parseSuccess = False; 01142 01143 float frate; 01144 int rate; 01145 if (sscanf(sdpLine, "a=framerate: %f", &frate) == 1 || sscanf(sdpLine, "a=framerate:%f", &frate) == 1) { 01146 parseSuccess = True; 01147 fVideoFPS = (unsigned)frate; 01148 } else if (sscanf(sdpLine, "a=x-framerate: %d", &rate) == 1) { 01149 parseSuccess = True; 01150 fVideoFPS = (unsigned)rate; 01151 } 01152 01153 return parseSuccess; 01154 }
| Boolean MediaSubsession::createSourceObjects | ( | int | useSpecialRTPoffset | ) | [protected, virtual] |
Definition at line 1156 of file MediaSession.cpp.
References codecName(), QuickTimeGenericRTPSource::createNew(), JPEGVideoRTPSource::createNew(), DVVideoRTPSource::createNew(), H264VideoRTPSource::createNew(), H263plusVideoRTPSource::createNew(), H261VideoRTPSource::createNew(), MPEG1or2VideoRTPSource::createNew(), MPEG4GenericRTPSource::createNew(), MPEG4ESVideoRTPSource::createNew(), AC3AudioRTPSource::createNew(), VP8VideoRTPSource::createNew(), VorbisAudioRTPSource::createNew(), MPEG4LATMAudioRTPSource::createNew(), SimpleRTPSource::createNew(), MP3FromADUSource::createNew(), MP3ADUdeinterleaver::createNew(), MP3ADURTPSource::createNew(), MPEG1or2AudioRTPSource::createNew(), AMRAudioRTPSource::createNew(), QCELPAudioRTPSource::createNew(), MPEG2TransportStreamFramer::createNew(), BasicUDPSource::createNew(), env(), False, fCodecName, fCRC, fIndexdeltalength, fIndexlength, fInterleaving, fMediumName, fMode, fNumChannels, fOctetalign, fProtocolName, fReadSource, fReceiveRawJPEGFrames, fReceiveRawMP3ADUs, fRobustsorting, fRTPPayloadFormat, fRTPSocket, fRTPSource, fRTPTimestampFrequency, fSizelength, mediumName(), NULL, UsageEnvironment::setResultMsg(), True, videoHeight(), and videoWidth().
Referenced by initiate().
01156 { 01157 do { 01158 // First, check "fProtocolName" 01159 if (strcmp(fProtocolName, "UDP") == 0) { 01160 // A UDP-packetized stream (*not* a RTP stream) 01161 fReadSource = BasicUDPSource::createNew(env(), fRTPSocket); 01162 fRTPSource = NULL; // Note! 01163 01164 if (strcmp(fCodecName, "MP2T") == 0) { // MPEG-2 Transport Stream 01165 fReadSource = MPEG2TransportStreamFramer::createNew(env(), fReadSource); 01166 // this sets "durationInMicroseconds" correctly, based on the PCR values 01167 } 01168 } else { 01169 // Check "fCodecName" against the set of codecs that we support, 01170 // and create our RTP source accordingly 01171 // (Later make this code more efficient, as this set grows #####) 01172 // (Also, add more fmts that can be implemented by SimpleRTPSource#####) 01173 Boolean createSimpleRTPSource = False; // by default; can be changed below 01174 Boolean doNormalMBitRule = False; // default behavior if "createSimpleRTPSource" is True 01175 if (strcmp(fCodecName, "QCELP") == 0) { // QCELP audio 01176 fReadSource = 01177 QCELPAudioRTPSource::createNew(env(), fRTPSocket, fRTPSource, 01178 fRTPPayloadFormat, 01179 fRTPTimestampFrequency); 01180 // Note that fReadSource will differ from fRTPSource in this case 01181 } else if (strcmp(fCodecName, "AMR") == 0) { // AMR audio (narrowband) 01182 fReadSource = 01183 AMRAudioRTPSource::createNew(env(), fRTPSocket, fRTPSource, 01184 fRTPPayloadFormat, False /*isWideband*/, 01185 fNumChannels, fOctetalign != 0, fInterleaving, 01186 fRobustsorting != 0, fCRC != 0); 01187 // Note that fReadSource will differ from fRTPSource in this case 01188 } else if (strcmp(fCodecName, "AMR-WB") == 0) { // AMR audio (wideband) 01189 fReadSource = 01190 AMRAudioRTPSource::createNew(env(), fRTPSocket, fRTPSource, 01191 fRTPPayloadFormat, True /*isWideband*/, 01192 fNumChannels, fOctetalign != 0, fInterleaving, 01193 fRobustsorting != 0, fCRC != 0); 01194 // Note that fReadSource will differ from fRTPSource in this case 01195 } else if (strcmp(fCodecName, "MPA") == 0) { // MPEG-1 or 2 audio 01196 fReadSource = fRTPSource 01197 = MPEG1or2AudioRTPSource::createNew(env(), fRTPSocket, 01198 fRTPPayloadFormat, 01199 fRTPTimestampFrequency); 01200 } else if (strcmp(fCodecName, "MPA-ROBUST") == 0) { // robust MP3 audio 01201 fReadSource = fRTPSource 01202 = MP3ADURTPSource::createNew(env(), fRTPSocket, fRTPPayloadFormat, 01203 fRTPTimestampFrequency); 01204 if (fRTPSource == NULL) break; 01205 01206 if (!fReceiveRawMP3ADUs) { 01207 // Add a filter that deinterleaves the ADUs after depacketizing them: 01208 MP3ADUdeinterleaver* deinterleaver 01209 = MP3ADUdeinterleaver::createNew(env(), fRTPSource); 01210 if (deinterleaver == NULL) break; 01211 01212 // Add another filter that converts these ADUs to MP3 frames: 01213 fReadSource = MP3FromADUSource::createNew(env(), deinterleaver); 01214 } 01215 } else if (strcmp(fCodecName, "X-MP3-DRAFT-00") == 0) { 01216 // a non-standard variant of "MPA-ROBUST" used by RealNetworks 01217 // (one 'ADU'ized MP3 frame per packet; no headers) 01218 fRTPSource 01219 = SimpleRTPSource::createNew(env(), fRTPSocket, fRTPPayloadFormat, 01220 fRTPTimestampFrequency, 01221 "audio/MPA-ROBUST" /*hack*/); 01222 if (fRTPSource == NULL) break; 01223 01224 // Add a filter that converts these ADUs to MP3 frames: 01225 fReadSource = MP3FromADUSource::createNew(env(), fRTPSource, 01226 False /*no ADU header*/); 01227 } else if (strcmp(fCodecName, "MP4A-LATM") == 0) { // MPEG-4 LATM audio 01228 fReadSource = fRTPSource 01229 = MPEG4LATMAudioRTPSource::createNew(env(), fRTPSocket, 01230 fRTPPayloadFormat, 01231 fRTPTimestampFrequency); 01232 } else if (strcmp(fCodecName, "VORBIS") == 0) { // Vorbis audio 01233 fReadSource = fRTPSource 01234 = VorbisAudioRTPSource::createNew(env(), fRTPSocket, 01235 fRTPPayloadFormat, 01236 fRTPTimestampFrequency); 01237 } else if (strcmp(fCodecName, "VP8") == 0) { // VP8 video 01238 fReadSource = fRTPSource 01239 = VP8VideoRTPSource::createNew(env(), fRTPSocket, 01240 fRTPPayloadFormat, 01241 fRTPTimestampFrequency); 01242 } else if (strcmp(fCodecName, "AC3") == 0 || strcmp(fCodecName, "EAC3") == 0) { // AC3 audio 01243 fReadSource = fRTPSource 01244 = AC3AudioRTPSource::createNew(env(), fRTPSocket, 01245 fRTPPayloadFormat, 01246 fRTPTimestampFrequency); 01247 } else if (strcmp(fCodecName, "MP4V-ES") == 0) { // MPEG-4 Elementary Stream video 01248 fReadSource = fRTPSource 01249 = MPEG4ESVideoRTPSource::createNew(env(), fRTPSocket, 01250 fRTPPayloadFormat, 01251 fRTPTimestampFrequency); 01252 } else if (strcmp(fCodecName, "MPEG4-GENERIC") == 0) { 01253 fReadSource = fRTPSource 01254 = MPEG4GenericRTPSource::createNew(env(), fRTPSocket, 01255 fRTPPayloadFormat, 01256 fRTPTimestampFrequency, 01257 fMediumName, fMode, 01258 fSizelength, fIndexlength, 01259 fIndexdeltalength); 01260 } else if (strcmp(fCodecName, "MPV") == 0) { // MPEG-1 or 2 video 01261 fReadSource = fRTPSource 01262 = MPEG1or2VideoRTPSource::createNew(env(), fRTPSocket, 01263 fRTPPayloadFormat, 01264 fRTPTimestampFrequency); 01265 } else if (strcmp(fCodecName, "MP2T") == 0) { // MPEG-2 Transport Stream 01266 fRTPSource = SimpleRTPSource::createNew(env(), fRTPSocket, fRTPPayloadFormat, 01267 fRTPTimestampFrequency, "video/MP2T", 01268 0, False); 01269 fReadSource = MPEG2TransportStreamFramer::createNew(env(), fRTPSource); 01270 // this sets "durationInMicroseconds" correctly, based on the PCR values 01271 } else if (strcmp(fCodecName, "H261") == 0) { // H.261 01272 fReadSource = fRTPSource 01273 = H261VideoRTPSource::createNew(env(), fRTPSocket, 01274 fRTPPayloadFormat, 01275 fRTPTimestampFrequency); 01276 } else if (strcmp(fCodecName, "H263-1998") == 0 || 01277 strcmp(fCodecName, "H263-2000") == 0) { // H.263+ 01278 fReadSource = fRTPSource 01279 = H263plusVideoRTPSource::createNew(env(), fRTPSocket, 01280 fRTPPayloadFormat, 01281 fRTPTimestampFrequency); 01282 } else if (strcmp(fCodecName, "H264") == 0) { 01283 fReadSource = fRTPSource 01284 = H264VideoRTPSource::createNew(env(), fRTPSocket, 01285 fRTPPayloadFormat, 01286 fRTPTimestampFrequency); 01287 } else if (strcmp(fCodecName, "DV") == 0) { 01288 fReadSource = fRTPSource 01289 = DVVideoRTPSource::createNew(env(), fRTPSocket, 01290 fRTPPayloadFormat, 01291 fRTPTimestampFrequency); 01292 } else if (strcmp(fCodecName, "JPEG") == 0) { // motion JPEG 01293 if (fReceiveRawJPEGFrames) { 01294 // Special case (used when proxying JPEG/RTP streams): Receive each JPEG/RTP packet, including the special RTP headers: 01295 fReadSource = fRTPSource 01296 = SimpleRTPSource::createNew(env(), fRTPSocket, fRTPPayloadFormat, 01297 fRTPTimestampFrequency, "video/JPEG", 01298 0/*special offset*/, False/*doNormalMBitRule => ignore the 'M' bit*/); 01299 } else { 01300 // Normal case: Receive each JPEG frame as a complete, displayable JPEG image: 01301 fReadSource = fRTPSource 01302 = JPEGVideoRTPSource::createNew(env(), fRTPSocket, 01303 fRTPPayloadFormat, 01304 fRTPTimestampFrequency, 01305 videoWidth(), 01306 videoHeight()); 01307 } 01308 } else if (strcmp(fCodecName, "X-QT") == 0 01309 || strcmp(fCodecName, "X-QUICKTIME") == 0) { 01310 // Generic QuickTime streams, as defined in 01311 // <http://developer.apple.com/quicktime/icefloe/dispatch026.html> 01312 char* mimeType 01313 = new char[strlen(mediumName()) + strlen(codecName()) + 2] ; 01314 sprintf(mimeType, "%s/%s", mediumName(), codecName()); 01315 fReadSource = fRTPSource 01316 = QuickTimeGenericRTPSource::createNew(env(), fRTPSocket, 01317 fRTPPayloadFormat, 01318 fRTPTimestampFrequency, 01319 mimeType); 01320 delete[] mimeType; 01321 } else if ( strcmp(fCodecName, "PCMU") == 0 // PCM u-law audio 01322 || strcmp(fCodecName, "GSM") == 0 // GSM audio 01323 || strcmp(fCodecName, "DVI4") == 0 // DVI4 (IMA ADPCM) audio 01324 || strcmp(fCodecName, "PCMA") == 0 // PCM a-law audio 01325 || strcmp(fCodecName, "MP1S") == 0 // MPEG-1 System Stream 01326 || strcmp(fCodecName, "MP2P") == 0 // MPEG-2 Program Stream 01327 || strcmp(fCodecName, "L8") == 0 // 8-bit linear audio 01328 || strcmp(fCodecName, "L16") == 0 // 16-bit linear audio 01329 || strcmp(fCodecName, "L20") == 0 // 20-bit linear audio (RFC 3190) 01330 || strcmp(fCodecName, "L24") == 0 // 24-bit linear audio (RFC 3190) 01331 || strcmp(fCodecName, "G726-16") == 0 // G.726, 16 kbps 01332 || strcmp(fCodecName, "G726-24") == 0 // G.726, 24 kbps 01333 || strcmp(fCodecName, "G726-32") == 0 // G.726, 32 kbps 01334 || strcmp(fCodecName, "G726-40") == 0 // G.726, 40 kbps 01335 || strcmp(fCodecName, "SPEEX") == 0 // SPEEX audio 01336 || strcmp(fCodecName, "ILBC") == 0 // iLBC audio 01337 || strcmp(fCodecName, "OPUS") == 0 // Opus audio 01338 || strcmp(fCodecName, "T140") == 0 // T.140 text (RFC 4103) 01339 || strcmp(fCodecName, "DAT12") == 0 // 12-bit nonlinear audio (RFC 3190) 01340 || strcmp(fCodecName, "VND.ONVIF.METADATA") == 0 // 'ONVIF' 'metadata' (a XML document) 01341 ) { 01342 createSimpleRTPSource = True; 01343 useSpecialRTPoffset = 0; 01344 if (strcmp(fCodecName, "VND.ONVIF.METADATA") == 0) { 01345 // This RTP payload format uses the RTP "M" bit to indicate the end of the content (a XML document): 01346 doNormalMBitRule = True; 01347 } 01348 } else if (useSpecialRTPoffset >= 0) { 01349 // We don't know this RTP payload format, but try to receive 01350 // it using a 'SimpleRTPSource' with the specified header offset: 01351 createSimpleRTPSource = True; 01352 } else { 01353 env().setResultMsg("RTP payload format unknown or not supported"); 01354 break; 01355 } 01356 01357 if (createSimpleRTPSource) { 01358 char* mimeType 01359 = new char[strlen(mediumName()) + strlen(codecName()) + 2] ; 01360 sprintf(mimeType, "%s/%s", mediumName(), codecName()); 01361 fReadSource = fRTPSource 01362 = SimpleRTPSource::createNew(env(), fRTPSocket, fRTPPayloadFormat, 01363 fRTPTimestampFrequency, mimeType, 01364 (unsigned)useSpecialRTPoffset, 01365 doNormalMBitRule); 01366 delete[] mimeType; 01367 } 01368 } 01369 01370 return True; 01371 } while (0); 01372 01373 return False; // an error occurred 01374 }
friend class MediaSession [friend] |
Definition at line 276 of file MediaSession.hh.
friend class MediaSubsessionIterator [friend] |
Definition at line 277 of file MediaSession.hh.
| unsigned short MediaSubsession::serverPortNum |
Definition at line 254 of file MediaSession.hh.
Referenced by RTSPClient::handleSETUPResponse(), MediaSession::initializeWithSDP(), setDestinations(), and setupSubsession().
| unsigned char MediaSubsession::rtpChannelId |
Definition at line 255 of file MediaSession.hh.
Referenced by RTSPClient::handleSETUPResponse(), and setupSubsession().
| unsigned char MediaSubsession::rtcpChannelId |
Definition at line 255 of file MediaSession.hh.
Referenced by RTSPClient::handleSETUPResponse(), and setupSubsession().
Definition at line 256 of file MediaSession.hh.
Referenced by closeMediaSinks(), setupStreams(), shutdownStream(), and subsessionAfterPlaying().
| void* MediaSubsession::miscPtr |
Definition at line 257 of file MediaSession.hh.
Referenced by AVIFileSink::AVIFileSink(), QuickTimeFileSink::completeOutputFile(), AVIFileSink::completeOutputFile(), QuickTimeFileSink::continuePlaying(), AVIFileSink::continuePlaying(), QuickTimeFileSink::onSourceClosure1(), AVIFileSink::onSourceClosure1(), QuickTimeFileSink::QuickTimeFileSink(), while(), AVIFileSink::~AVIFileSink(), and QuickTimeFileSink::~QuickTimeFileSink().
| u_int16_t MediaSubsession::seqNum |
| u_int32_t MediaSubsession::timestamp |
| struct { ... } MediaSubsession::rtpInfo |
Referenced by getNormalPlayTime(), RTSPClient::handlePLAYResponse(), and MediaSubsession().
MediaSession& MediaSubsession::fParent [protected] |
Definition at line 299 of file MediaSession.hh.
Referenced by absEndTime(), absStartTime(), env(), initiate(), parentSession(), parseSDPAttribute_range(), playEndTime(), and playStartTime().
MediaSubsession* MediaSubsession::fNext [protected] |
Definition at line 300 of file MediaSession.hh.
Referenced by ServerMediaSession::duration(), ServerMediaSession::generateSDPDescription(), MediaSubsessionIterator::next(), setNext(), ServerMediaSession::testScaleFactor(), and ~MediaSubsession().
char* MediaSubsession::fConnectionEndpointName [protected] |
Definition at line 303 of file MediaSession.hh.
Referenced by connectionEndpointName(), parseSDPLine_c(), and ~MediaSubsession().
unsigned short MediaSubsession::fClientPortNum [protected] |
Definition at line 304 of file MediaSession.hh.
Referenced by clientPortNum(), MediaSession::initializeWithSDP(), initiate(), and setClientPortNum().
unsigned char MediaSubsession::fRTPPayloadFormat [protected] |
Definition at line 306 of file MediaSession.hh.
Referenced by createSourceObjects(), MediaSession::initializeWithSDP(), parseSDPAttribute_rtpmap(), and rtpPayloadFormat().
char* MediaSubsession::fSavedSDPLines [protected] |
Definition at line 307 of file MediaSession.hh.
Referenced by MediaSession::initializeWithSDP(), savedSDPLines(), and ~MediaSubsession().
char* MediaSubsession::fMediumName [protected] |
Definition at line 308 of file MediaSession.hh.
Referenced by createSourceObjects(), MediaSession::initializeWithSDP(), mediumName(), and ~MediaSubsession().
char* MediaSubsession::fCodecName [protected] |
Definition at line 309 of file MediaSession.hh.
Referenced by codecName(), createSourceObjects(), MediaSession::initializeWithSDP(), initiate(), parseSDPAttribute_rtpmap(), and ~MediaSubsession().
char* MediaSubsession::fProtocolName [protected] |
Definition at line 310 of file MediaSession.hh.
Referenced by createSourceObjects(), MediaSession::initializeWithSDP(), initiate(), protocolName(), and ~MediaSubsession().
unsigned MediaSubsession::fRTPTimestampFrequency [protected] |
Definition at line 311 of file MediaSession.hh.
Referenced by createSourceObjects(), MediaSession::initializeWithSDP(), parseSDPAttribute_rtpmap(), and rtpTimestampFrequency().
char* MediaSubsession::fControlPath [protected] |
Definition at line 312 of file MediaSession.hh.
Referenced by controlPath(), parseSDPAttribute_control(), and ~MediaSubsession().
struct in_addr MediaSubsession::fSourceFilterAddr [read, protected] |
Definition at line 313 of file MediaSession.hh.
Referenced by initiate(), isSSM(), and parseSDPAttribute_source_filter().
unsigned MediaSubsession::fBandwidth [protected] |
Definition at line 314 of file MediaSession.hh.
Referenced by bandwidth(), initiate(), and parseSDPLine_b().
unsigned MediaSubsession::fAuxiliarydatasizelength [protected] |
Definition at line 317 of file MediaSession.hh.
Referenced by fmtp_auxiliarydatasizelength(), and parseSDPAttribute_fmtp().
unsigned MediaSubsession::fConstantduration [protected] |
Definition at line 317 of file MediaSession.hh.
Referenced by fmtp_constantduration(), and parseSDPAttribute_fmtp().
unsigned MediaSubsession::fConstantsize [protected] |
Definition at line 317 of file MediaSession.hh.
Referenced by fmtp_constantsize(), and parseSDPAttribute_fmtp().
unsigned MediaSubsession::fCRC [protected] |
Definition at line 318 of file MediaSession.hh.
Referenced by createSourceObjects(), fmtp_crc(), and parseSDPAttribute_fmtp().
unsigned MediaSubsession::fCtsdeltalength [protected] |
Definition at line 318 of file MediaSession.hh.
Referenced by fmtp_ctsdeltalength(), and parseSDPAttribute_fmtp().
unsigned MediaSubsession::fDe_interleavebuffersize [protected] |
Definition at line 318 of file MediaSession.hh.
Referenced by fmtp_de_interleavebuffersize(), and parseSDPAttribute_fmtp().
unsigned MediaSubsession::fDtsdeltalength [protected] |
Definition at line 318 of file MediaSession.hh.
Referenced by fmtp_dtsdeltalength(), and parseSDPAttribute_fmtp().
unsigned MediaSubsession::fIndexdeltalength [protected] |
Definition at line 319 of file MediaSession.hh.
Referenced by createSourceObjects(), fmtp_indexdeltalength(), and parseSDPAttribute_fmtp().
unsigned MediaSubsession::fIndexlength [protected] |
Definition at line 319 of file MediaSession.hh.
Referenced by createSourceObjects(), fmtp_indexlength(), and parseSDPAttribute_fmtp().
unsigned MediaSubsession::fInterleaving [protected] |
Definition at line 319 of file MediaSession.hh.
Referenced by createSourceObjects(), fmtp_interleaving(), and parseSDPAttribute_fmtp().
unsigned MediaSubsession::fMaxdisplacement [protected] |
Definition at line 320 of file MediaSession.hh.
Referenced by fmtp_maxdisplacement(), and parseSDPAttribute_fmtp().
unsigned MediaSubsession::fObjecttype [protected] |
Definition at line 320 of file MediaSession.hh.
Referenced by fmtp_objecttype(), and parseSDPAttribute_fmtp().
unsigned MediaSubsession::fOctetalign [protected] |
Definition at line 321 of file MediaSession.hh.
Referenced by createSourceObjects(), fmtp_octetalign(), and parseSDPAttribute_fmtp().
unsigned MediaSubsession::fProfile_level_id [protected] |
Definition at line 321 of file MediaSession.hh.
Referenced by fmtp_profile_level_id(), and parseSDPAttribute_fmtp().
unsigned MediaSubsession::fRobustsorting [protected] |
Definition at line 321 of file MediaSession.hh.
Referenced by createSourceObjects(), fmtp_robustsorting(), and parseSDPAttribute_fmtp().
unsigned MediaSubsession::fSizelength [protected] |
Definition at line 322 of file MediaSession.hh.
Referenced by createSourceObjects(), fmtp_sizelength(), and parseSDPAttribute_fmtp().
unsigned MediaSubsession::fStreamstateindication [protected] |
Definition at line 322 of file MediaSession.hh.
Referenced by fmtp_streamstateindication(), and parseSDPAttribute_fmtp().
unsigned MediaSubsession::fStreamtype [protected] |
Definition at line 322 of file MediaSession.hh.
Referenced by fmtp_streamtype(), and parseSDPAttribute_fmtp().
Boolean MediaSubsession::fCpresent [protected] |
Definition at line 323 of file MediaSession.hh.
Referenced by fmtp_cpresent(), and parseSDPAttribute_fmtp().
Boolean MediaSubsession::fRandomaccessindication [protected] |
Definition at line 323 of file MediaSession.hh.
Referenced by fmtp_randomaccessindication(), and parseSDPAttribute_fmtp().
char* MediaSubsession::fConfig [protected] |
Definition at line 324 of file MediaSession.hh.
Referenced by fmtp_config(), parseSDPAttribute_fmtp(), and ~MediaSubsession().
char * MediaSubsession::fMode [protected] |
Definition at line 324 of file MediaSession.hh.
Referenced by createSourceObjects(), fmtp_mode(), parseSDPAttribute_fmtp(), and ~MediaSubsession().
char * MediaSubsession::fSpropParameterSets [protected] |
Definition at line 324 of file MediaSession.hh.
Referenced by fmtp_spropparametersets(), parseSDPAttribute_fmtp(), and ~MediaSubsession().
char * MediaSubsession::fEmphasis [protected] |
Definition at line 324 of file MediaSession.hh.
Referenced by fmtp_emphasis(), parseSDPAttribute_fmtp(), and ~MediaSubsession().
char * MediaSubsession::fChannelOrder [protected] |
Definition at line 324 of file MediaSession.hh.
Referenced by fmtp_channelorder(), parseSDPAttribute_fmtp(), and ~MediaSubsession().
double MediaSubsession::fPlayStartTime [protected] |
Definition at line 326 of file MediaSession.hh.
Referenced by _playStartTime(), parseSDPAttribute_range(), and playStartTime().
double MediaSubsession::fPlayEndTime [protected] |
Definition at line 327 of file MediaSession.hh.
Referenced by _playEndTime(), parseSDPAttribute_range(), and playEndTime().
char* MediaSubsession::fAbsStartTime [protected] |
Definition at line 328 of file MediaSession.hh.
Referenced by _absStartTime(), absStartTime(), and ~MediaSubsession().
char* MediaSubsession::fAbsEndTime [protected] |
Definition at line 329 of file MediaSession.hh.
Referenced by _absEndTime(), absEndTime(), and ~MediaSubsession().
unsigned short MediaSubsession::fVideoWidth [protected] |
Definition at line 330 of file MediaSession.hh.
Referenced by parseSDPAttribute_x_dimensions(), and videoWidth().
unsigned short MediaSubsession::fVideoHeight [protected] |
Definition at line 330 of file MediaSession.hh.
Referenced by parseSDPAttribute_x_dimensions(), and videoHeight().
unsigned MediaSubsession::fVideoFPS [protected] |
Definition at line 332 of file MediaSession.hh.
Referenced by parseSDPAttribute_framerate(), and videoFPS().
unsigned MediaSubsession::fNumChannels [protected] |
Definition at line 334 of file MediaSession.hh.
Referenced by createSourceObjects(), MediaSession::initializeWithSDP(), numChannels(), and parseSDPAttribute_rtpmap().
float MediaSubsession::fScale [protected] |
double MediaSubsession::fNPT_PTS_Offset [protected] |
Groupsock* MediaSubsession::fRTPSocket [protected] |
Definition at line 340 of file MediaSession.hh.
Referenced by createSourceObjects(), deInitiate(), initiate(), and setDestinations().
Groupsock* MediaSubsession::fRTCPSocket [protected] |
Definition at line 340 of file MediaSession.hh.
Referenced by deInitiate(), initiate(), and setDestinations().
RTPSource* MediaSubsession::fRTPSource [protected] |
Definition at line 341 of file MediaSession.hh.
Referenced by createSourceObjects(), deInitiate(), initiate(), and rtpSource().
RTCPInstance* MediaSubsession::fRTCPInstance [protected] |
Definition at line 341 of file MediaSession.hh.
Referenced by deInitiate(), initiate(), and rtcpInstance().
FramedSource* MediaSubsession::fReadSource [protected] |
Definition at line 342 of file MediaSession.hh.
Referenced by addFilter(), createSourceObjects(), deInitiate(), initiate(), readSource(), and setClientPortNum().
Boolean MediaSubsession::fReceiveRawMP3ADUs [protected] |
Definition at line 343 of file MediaSession.hh.
Referenced by createSourceObjects(), and receiveRawMP3ADUs().
Boolean MediaSubsession::fReceiveRawJPEGFrames [protected] |
Definition at line 343 of file MediaSession.hh.
Referenced by createSourceObjects(), and receiveRawJPEGFrames().
char* MediaSubsession::fSessionId [protected] |
Definition at line 346 of file MediaSession.hh.
Referenced by sessionId(), setSessionId(), and ~MediaSubsession().
1.5.2