FLV rtmp 里存在B帧的情况下 time stamp 时间戳 2

先看看下面的这个帧

FLV rtmp 里存在B帧的情况下 time stamp 时间戳

http://blog.csdn.net/wzw88486969/article/details/62229133

按照上面的帧计算出来的 CTS也发出去了,可是播放端总报错,各种怀疑PTS DTS CTS问题,先上传我的PTS DTS的打法 

CMTime pts =   CMSampleBufferGetOutputPresentationTimeStamp(sampleBuffer);

CMTime dts =          CMSampleBufferGetOutputDecodeTimeStamp(sampleBuffer);

         

  if (dts.value ==0) {

     dts = pts;

  }


double dPTS = (double)(pts.value) / pts.timescale * 1000 ;

double dDTS = (double)(dts.value) / pts.timescale * 1000;

        

pPkt->i64Pts = dPTS ;

pPkt->i64Dts = dDTS ;


然后看推流端和播放端DTS PTS是否能对上






图片放大了看清楚,最上面的是播放器PTS DTS,下面的是XCODE推流打的PTS DTS,分析日志发现传的没有错,还原出来的DTS PTS都能对上,说明用 

FLV TimeStamp = DTS CTS = PTS - DTS 这样传是对的,可是FFMPEG日志报错,最后顺着FFMPEG代码

    if (cur_pkt.pts != AV_NOPTS_VALUE &&

            cur_pkt.dts != AV_NOPTS_VALUE &&

            cur_pkt.pts < cur_pkt.dts) {

            av_log(s, AV_LOG_WARNING,

"Invalid timestamps stream=%d, pts=%s, dts=%s, size=%d\n",

                   cur_pkt.stream_index,

                   av_ts2str(cur_pkt.pts),

                   av_ts2str(cur_pkt.dts),

                   cur_pkt.size);

        }


发现一句cur_pkt.pts < cur_pkt.dts是不是CTS不能小于 0 ?

//统一加 5试试

double dPTS = (double)(pts.value + 5) / pts.timescale *1000 ;

double dDTS = (double)(dts.value) / pts.timescale * 1000;


这样之后播放端一切正常!!这个加上5视自己的情况而定,这个值会影响播放端AV同步,越小越好。



  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值