硬刚live555源码(四)--H264VideoRTPSource

本文深入分析了H264VideoRTPSource类,它实现了rtsp下H264媒体数据的RTP和RTCP功能。讨论了其继承关系,包括MediaSource、FramedSource、RTPSource等,并详细阐述了从接收RTP数据到回调上层应用的处理过程,以及RTPInterface的关键作用。
摘要由CSDN通过智能技术生成
  • 功能描述

    H264VideoRTPSource类实现了rtsp下的媒体数据rtp和rtcp协议的功能,提供了媒体数据传输的逻辑。从rtp的socket源源不断的接收数据,解析接收一个h264的帧,回调函数通知上层APP处理。

原始视频流数据传输的时候通常不会直接将编码码流进行传输,而是先将码流打包成一个个 RTP 包再进行发送。RTP H264 码流打包分为三种方式:第一种单 NALU 封包方式适合比较小的RTP报文,比如 P 帧和 B 帧编码之后比较小或者SPS、PPS帧报文,可以使用这种打包方式。第二种组合封包方式,将多个NALU组合在一个rtp报文中,比较少用。第三种分片分包方式,将一个 NALU 分开打包在连续的多个 RTP 包中;是最常用的一种方式,由于一般一个NALU比较大,需要拆分到连续多个rtp报文中发送,接收端再组装成一个NALU返回上层app。

二、继承关系

H264VideoRTPSource –>

 MultiFramedRTPSource –>

RTPSource –>

 FramedSource ->

 MediaSource ->

Medium

H264VideoRTPSource也是可以保存Medium队列,通过名称查找到该对象实例指针。

三、代码分析

3.1 MediaSource分析

与Medium类似,定义了一个source的基类,实现了type的设置;支持如下的类型

class MediaSource: public Medium {

  virtual char const* MIMEtype() const;

  // 判断该source是何种类型的source

  virtual Boolean isFramedSource() const;

  virtual Boolean isRTPSource() const;

  virtual Boolean isMPEG1or2VideoStreamFramer() const;

  virtual Boolean isMPEG4VideoStreamFramer() const;

  virtual Boolean isH264VideoStreamFramer() const;

  …

}

3.2 FramedSource分析

定义了启动source的getNextFrame接口、doGetNextFrame虚函数、 获取媒体数据回调函数、关闭回调函数和一些状态变量。到目前只是定义接口,还没涉及到具体的传输协议。

class FramedSource: public MediaSource {

  // 成功读取一帧媒体数据回调函数

  typedef void (afterGettingFunc)(void* clientData, unsigned frameSize,

                                       unsigned numTruncatedBytes,

                                       struct timeval presentationTime,

                                       unsigned durationInMicroseconds);

  // 媒体关闭的回调函数

  typedef void (onCloseFunc)(void* clientData);

  // 启动source开始接收数据的接口;需要设置缓存和回调函数

  void getNextFrame(unsigned char* to, unsigned maxSize,  /* 接收数据缓存和大小*/

                       afterGettingFunc* afterGettingFunc,         /* 成功接收帧回调函数*/

                       void* afterGettingClientData,               /* 回调函数的入参*/

                       onCloseFunc* onCloseFunc,                /* 关闭媒体回调函数*/

                       void* onCloseClientData);

<
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值