[Live-devel] How to use SimpleRTPSource for transferring metadata?

Ross Finlayson finlayson at live555.com
Mon Apr 11 13:54:32 PDT 2022


Are you trying to implement a RTSP server that serves (transmits) metadata from some local source?  If so, then you don’t call "SimpleRTPSource::createNew()” at all.  “SimpleRTPSource” is for *receiving* RTP streams, not transmitting them.

What you need to do is:
	1/ Implement a “FramedSource” subclass that delivers - in real time - individual “KLVunits” (i.e., one “KLVunit” at a time), each with an appropriate “presentationTime” (aligned with ‘wall-clock time’, i.e., the time that you’d get by calling “gettimeofday()”).
	2/ Implement the "createStreamSource()” virtual function, which would create a new instance of your “FramedSource” subclass each time it’s called.
	3/ Implement the “createNewRTPSink()” virtual function, as follows:

RTPSink* MyServerMediaSubsession::createNewRTPSink(Groupsock* rtpGroupsock,
			unsigned char rtpPayloadTypeIfDynamic,
			FramedSource* /*inputSource*/) {
	return SimpleRTPSink::createNew(envir(), rtpGroupsock, rtpPayloadTypeIfDynamic,
                        90000, // rtpTimestampFrequency
                         “application”, // sdpMediaTypeString,
                         “smpte336m”, // rtpPayloadFormatName,
                         1, // numChannels,
                         0, // allowMultipleFramesPerPacket
                         1 // doNormalMBitRule (see the comments in “liveMedia/include/SimpleRTPSink.hh”)
			);
}


If, on the other hand, you are trying to receive metadata from some other RTP source, and then retransmit it with your server, then things get more complicated (unless the RTP source has its own RTSP server, in which case you should be able to use the existing “LIVE555 Proxy Server”, as is.)


Ross Finlayson
Live Networks, Inc.
http://www.live555.com/




More information about the live-devel mailing list