RkCamRtspServer/src/CamUnicastServerMediaSubsession.cc
2024-05-09 16:31:45 +08:00

46 lines
1.8 KiB
C++

#include "CamUnicastServerMediaSubsession.h"
#include "log.h"
CamUbicastServerMediaSubsession *
CamUbicastServerMediaSubsession::createNew(UsageEnvironment &env,
StreamReplicator *replicator,
size_t estBitrate, size_t udpDatagramSize)
{
return new CamUbicastServerMediaSubsession(env, replicator, estBitrate, udpDatagramSize);
}
CamUbicastServerMediaSubsession::CamUbicastServerMediaSubsession(UsageEnvironment &env,
StreamReplicator *replicator,
size_t estBitrate,
size_t udpDatagramSize) :
OnDemandServerMediaSubsession(env, False),
replicator_(replicator),
estBitrate_(estBitrate),
udpDatagramSize_(udpDatagramSize)
{
LOG(INFO, "Unicast media subsession with UDP datagram size of %d\n" \
"\tand estimated bitrate of %d (kbps) is created", udpDatagramSize, estBitrate);
}
FramedSource *
CamUbicastServerMediaSubsession::createNewStreamSource(unsigned clientSessionId, unsigned &estBitrate)
{
estBitrate = static_cast<unsigned int> (this->estBitrate_);
auto source = replicator_->createStreamReplica();
// only discrete frames are being sent (w/o start code bytes)
return H264VideoStreamDiscreteFramer::createNew(envir(), source);
}
RTPSink *
CamUbicastServerMediaSubsession::createNewRTPSink(Groupsock *rtpGroupsock,
unsigned char rtpPayloadTypeIfDynamic,
FramedSource *inputSource)
{
auto sink = H264VideoRTPSink::createNew(envir(), rtpGroupsock, rtpPayloadTypeIfDynamic);
sink->setPacketSizes(static_cast<unsigned int> (udpDatagramSize_), static_cast<unsigned int>(udpDatagramSize_));
return sink;
}