> On Jun 4, 2018, at 2:11 AM, JEBARAJ SELVAPETER <jeba...@tonboimaging.com> 
> wrote:
> 
> Hi,
> I have been using live555 for streaming. Now I am looking in to the 
> possibility of adding KLV metadata for every H264 video frame and then 
> streaming. My question is,
> 
> 1. Is live555 supports KLV metadta with video frames?

Yes.  The "RTP Payload Format" for ‘KLV metadata’ is defined in RFC 6597 
<https://tools.ietf.org/html/rfc6597>, which we can implement (when 
transmitting) using the “SimpleRTPSink” class.  (RTP receivers can also 
implement this payload format, using the “SimpleRTPSource” class.)

Specifically: I assume that you have 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()”).  I assume also that you’re 
familiar with <http://live555.com/liveMedia/faq.html#liveInput-unicast>, and, 
in particular, that you know how to define a subclass of 
“OnDemandServerMediaSubsession” for ‘KLV metadata’, including reimplementing 
the “createStreamSource()” and “createNewRTPSink()” virtual functions.

Your “createNewRTPSink()” implementation would then implement this RTP payload 
format as follows:
RTPSink* YourOnDemandServerMediaSubsessionSubclassForKLVMetadata
::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”)
                        );
}


Similarly, you could implement a RTP *receiver* for this stream with code 
something like:
        SimpleRTPSource::createNew(*env, &rtpGroupsock, rtpPayloadFormatCode,
                                                        90000, // 
rtpTimestampFrequency
                                                        “application/smpte336m” 
// mimeTypeString
                                                        0, // offset
                                                        1 // doNormalMBitRule
                                                        );


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


_______________________________________________
live-devel mailing list
live-devel@lists.live555.com
http://lists.live555.com/mailman/listinfo/live-devel

Reply via email to