ts数据包33位pts

33位的pts

  1. 由于平台的缺陷,通过硬demux出来的pts值只能读出32位的pts,而服务器发流会参考decode出来的pts值,其它平台是通过在截断的时候将pts的值/90后存储到寄存器,所以后续改进现有的平台返回pts值缺陷。
  2. 针对该问题,通过软demux解析出来第一个pts的值,根据是否大于32位,在返回给服务器的时候将pts的33位置零或置1.
  3. 修改已有代码的问题
  4. u_int64_t decode_pts(const char* ptr) { const unsigned char* p=(const unsigned char*)ptr; u_int64_t pts=((p[0]&0xe)<<29); pts|=((p[1]&0xff)<<22); pts|=((p[2]&0xfe)<<14); pts|=((p[3]&0xff)<<7); pts|=((p[4]&0xfe)>>1); printf("pts value=%lld \n",pts); return pts; }
    这种解法参考某位大神的,存在的问题
    1.在移位运算中,byte、short和char类型移位后的结果会变成int类型
    2.((p[0]&0xe)<<29)这种运算会将数值截断位32位的int类型,得到的数值就是不真实。
  5. long long pts=1<<29;pts=(p[0]&0xe)*pts;应该按照这样去移位
  6. 经过测试对于超过32位片源pts的计算最终没有问题
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值