第二章、FFmpeg增加RTP协议外部扩展信息解析

第二章、FFmpeg增加RTP协议外部扩展信息解析

第一章RTP协议深入原理介绍

RTP协议

RTP协议格式:
请添加图片描述

1.V:RTP协议的版本号,占2位,当前协议版本号为2。

  1. P:填充标志,占1位,如果P=1,则在该报文的尾部填充一个或多个额外的八位组,它们不是有效载荷的一部分。

  2. X:扩展标志,占1位,如果X=1,则在RTP报头后跟有一个扩展报头。

  3. CC:CSRC计数器,占4位,指示CSRC 标识符的个数。

  4. M: 标记,占1位,不同的有效载荷有不同的含义,对于视频,标记一帧的结束;对于音频,标记会话的开始。

  5. PT: 有效载荷类型,占7位,用于说明RTP报文中有效载荷的类型,如GSM音频、JPEM图像等,在流媒体中大部分是用来区分音频流和视频流的,这样便于客户端进行解析。

  6. 序列号:占16位,用于标识发送者所发送的RTP报文的序列号,每发送一个报文,序列号增1。
    应用场景:对视频进行无变形缩放选定要裁剪的坐标点、对应的宽高进行裁

RTP头部协议,前12位为基础字节,对应第一个结构体,如果extension为1时候,才有外部扩展信息,外部扩展信息结构对应第二个结构体,分别对应profile、length、data。

FFmpeg源码分析

第一步打开ffmpeg-5.1源码,搜素rtpdec.c文件找对应的方法

static int rtp_parse_packet_internal(RTPDemuxContext *s, AVPacket *pkt,
                                     const uint8_t *buf, int len)

在这里插入图片描述
从上图说明过滤的RTP协议外部扩展信息

为什么要增加RTP协议外部信息解析

1、因为一般直播、视频通话、转拉流视频选择角度会放在外部协议
判断是否有外部协议的语句

int extension = (buf[0] & 0x10) >> 4;

下面是我修改方式,主要判断是否视频角度,saveRtpData方法是我自己写的,经过验证上线过可以的,有提供rtp_parse_packet_internal源码参考
在这里插入图片描述

修改源码增加修改的部分可以参考,我思路把获取rtp协议的的视频角度pkt->pos传递出去,再传给上下文,后面的代码要自己去写


static int parse_rtp_extension(const uint8_t* buf,int ext_len,int len,int id){

    int offset=0;
    int extension_data=-1;

    int identifier = (buf[4] >> 4) & 0x0f;
    if(identifier==id){
      int extension_length = AV_RB16(buf +2);
      if(extension_length==1){
          extension_data = (buf[5] & 0x0f); // Identifier
          switch (extension_data) {
                  case 0:
                      extension_data=0;
                      break;
                  case 1:
                      extension_data=90;
                      break;
                  case 2:
                      extension_data=180;
               
  • 23
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

baoyu45585

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值