流媒体学习笔记3(live555的source-sink)

这篇博客详细探讨了在live555中source-sink的概念,特别是在处理H264流媒体时的角色。源文件通过ByteStreamFileSource读取,经过H264VideoStreamFramer解析并使用H264VideoStreamParser分析H264格式。数据最终由H264FUAFragmenter处理并交给RTPSink进行RTP打包。源码分析揭示了数据从读取到发送的整个流程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

上次提到source-sink,也就是SDP消息的组装过程,在OnDemandServerMediaSubsession::sdpLines()中创建了临时的FileSource和RTPSink,先看下这两个createNew

FramedSource* H264VideoFileServerMediaSubsession::createNewStreamSource(unsigned /*clientSessionId*/, unsigned& estBitrate) {
  estBitrate = 500; // kbps, estimate

  // Create the video source:
  ByteStreamFileSource* fileSource = ByteStreamFileSource::createNew(envir(), fFileName);
  if (fileSource == NULL) return NULL;
  fFileSize = fileSource->fileSize();

  // Create a framer for the Video Elementary Stream:
  return H264VideoStreamFramer::createNew(envir(), fileSource);
}

RTPSink* H264VideoFileServerMediaSubsession
::createNewRTPSink(Groupsock* rtpGroupsock,
		   unsigned char rtpPayloadTypeIfDynamic,
		   FramedSource* /*inputSource*/) {
  return H264VideoRTPSink::createNew(envir(), rtpGroupsock, rtpPayloadTypeIfDynamic);
}

先看source部分,可以看到,实际文件资源定义的部分是ByteStreamFileSource,它的倒继承关系为:

ByteStreamFileSource::FramedFileSource::FramedSource::MediaSource

而返回的却是H264VideoStreamFramer,我们看下它的倒继承关系为:

H264VideoStreamFramer::MPEGVideoStreamFramer::FramedFilter::FramedSource::MediaSource

其实ByteStreamFileSource确实是最初始打开文件获得Byte流的地方,但是单单知道

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值