当前位置: 首页 > news >正文

做网站用别人的模板是侵权吗商务网站开发工具

做网站用别人的模板是侵权吗,商务网站开发工具,好用的seo软件,学做沪江网站要多久FFmpeg 时间戳回绕处理:保障流媒体时间连续性的核心机制 一、回绕处理函数 /** * Wrap a given time stamp, if there is an indication for an overflow * * param st stream // 传入一个指向AVStream结构体的指针,代表流信息 * pa…

FFmpeg 时间戳回绕处理:保障流媒体时间连续性的核心机制

一、回绕处理函数

/**  * Wrap a given time stamp, if there is an indication for an overflow  *  * @param st stream               // 传入一个指向AVStream结构体的指针,代表流信息  * @param timestamp the time stamp to wrap // 传入需要处理的时间戳  * @return resulting time stamp   // 返回处理后的时间戳  */  
static int64_t wrap_timestamp(const AVStream *st, int64_t timestamp)  
{  // 检查pts_wrap_behavior是否设置为不忽略,且pts_wrap_reference有效,并且传入的时间戳有效  if (st->pts_wrap_behavior != AV_PTS_WRAP_IGNORE &&  st->pts_wrap_reference != AV_NOPTS_VALUE && timestamp != AV_NOPTS_VALUE) {  // 如果pts_wrap_behavior设置为添加偏移量,并且时间戳小于参考时间戳  if (st->pts_wrap_behavior == AV_PTS_WRAP_ADD_OFFSET &&  timestamp < st->pts_wrap_reference)  // 返回时间戳加上一个由pts_wrap_bits定义的偏移量(通常是2的pts_wrap_bits次方)  return timestamp + (1ULL << st->pts_wrap_bits);  // 如果pts_wrap_behavior设置为减去偏移量,并且时间戳大于或等于参考时间戳  else if (st->pts_wrap_behavior == AV_PTS_WRAP_SUB_OFFSET &&  timestamp >= st->pts_wrap_reference)  // 返回时间戳减去一个由pts_wrap_bits定义的偏移量  return timestamp - (1ULL << st->pts_wrap_bits);  }  // 如果不满足上述条件,则直接返回原始时间戳,不进行任何处理  return timestamp;  
}

该函数wrap_timestamp用于处理可能发生溢出的时间戳。在流式媒体处理中,由于时间戳通常是使用固定位数的整数来表示的,当时间戳超过该整数类型能够表示的最大值时,它可能会回绕(wrap around)到0或者负数,造成处理上的混乱。为了处理这种回绕情况,FFmpeg库提供了这样的机制。

  1. 函数首先检查是否启用了时间戳回绕处理(pts_wrap_behavior不为AV_PTS_WRAP_IGNORE),并且有一个有效的参考时间戳(pts_wrap_reference)以及传入的时间戳是有效的。

  2. 如果满足条件,则根据pts_wrap_behavior的值来决定是添加还是减去一个偏移量。偏移量的大小由pts_wrap_bits决定,通常是2的pts_wrap_bits次方。

  3. 如果pts_wrap_behavior设置为AV_PTS_WRAP_ADD_OFFSET,并且传入的时间戳小于参考时间戳,说明时间戳即将回绕到0,此时需要加上一个偏移量来避免回绕。
    如果pts_wrap_behavior设置为AV_PTS_WRAP_SUB_OFFSET,并且传入的时间戳大于或等于参考时间戳,说明时间戳还未回绕,此时需要减去一个偏移量来确保时间戳的连续性。
    如果上述条件都不满足,则函数直接返回原始的时间戳,不进行任何处理。

通过这个函数,可以确保在处理流式媒体时,即使时间戳发生回绕,也能得到正确且连续的时间戳值。

二、读取输入流时的回绕处理

读取输入流时的回绕处理在函数 int ff_read_packet(AVFormatContext *s, AVPacket *pkt);中,代码如下:

// 获取指定流的信息,stream_index 是数据包(pkt)所在的流的索引  
st = s->streams[pkt->stream_index];  // 调用 update_wrap_reference 函数,根据返回结果和流的 pts_wrap_behavior 设置来决定是否需要对时间戳进行调整  
if (update_wrap_reference(s, st, pkt->stream_index, pkt) && st->pts_wrap_behavior == AV_PTS_WRAP_SUB_OFFSET) {  // 如果流的 pts_wrap_behavior 是 AV_PTS_WRAP_SUB_OFFSET(即减去偏移量),并且 update_wrap_reference 返回 true  // 那么需要修正首次出现的时间戳为负值  // 如果 first_dts 不是相对值,则调用 wrap_timestamp 函数修正它  // 这里的目的是确保时间戳不会因为回绕而导致错误的排序  if (!is_relative(st->first_dts))  st->first_dts = wrap_timestamp(st, st->first_dts);  // 如果 start_time 不是相对值,同样调用 wrap_timestamp 函数修正它  // start_time 通常表示流的开始时间  if (!is_relative(st->start_time))  st->start_time = wrap_timestamp(st, st->start_time);  // 如果 cur_dts 不是相对值,也调用 wrap_timestamp 函数修正它  // cur_dts 表示当前解码时间戳  if (!is_relative(st->cur_dts))  st->cur_dts = wrap_timestamp(st, st->cur_dts);  
}  // 对数据包(pkt)的 dts(解码时间戳)调用 wrap_timestamp 函数进行修正  
pkt->dts = wrap_timestamp(st, pkt->dts);  // 对数据包(pkt)的 pts(显示时间戳)调用 wrap_timestamp 函数进行修正  
pkt->pts = wrap_timestamp(st, pkt->pts);
http://www.dtcms.com/a/484717.html

相关文章:

  • 网站网页设计公司平面设计主要做的是什么
  • 网站建设公司排行杭州个人网站设计流程步骤
  • php在网站开发中的作用优秀网站建设平台
  • 网站计划任务怎么做西地那非片的正确服用方法与效果
  • 芷江建设局的工作人员网站自建网站国家审核要多久
  • 太原网站建设制作报价响应式网站布局实例
  • 网站运营内容方案查询网138网站域名
  • 泰安网站优化wordpress 悬浮页
  • 重庆忠县网站建设dw做网站如何让用户可编辑
  • 西安建站免费模板深圳实验室建设公司
  • net做公司网站东莞网站设计定做
  • 欧美网站模板下载小程序搭建多少钱一个
  • 建网站的宽带多少微信企业号
  • 做网站需要展示工厂么?邯郸网站建设最新报价
  • 山西省城乡和建设厅网站千部小黄油资源百度云
  • 网站备案号在哪里查询简约wordpress免费主题
  • 广州响应网站建设营销网站seo推广
  • wdcp更改网站域名网站建设合伙合同
  • 射阳做企业网站哪家好自己电脑做网站用备案
  • 网站开发静态和动态网站端和移动端分开建设域名一样么
  • 沧州网站建设网海申闲鱼钓鱼链接
  • docker安装zabbix一体机
  • 网站优化有什么用上海设计招聘网站
  • 渭城区住房和城乡建设局网站美工宝盒网站
  • 秦皇岛市建设路小学网站网络建设方案的调研照片
  • 如何做网站的实时画面太子河网站建设
  • 网站建设 三合一中堂仿做网站
  • 政务公开和网站建设工作问题外贸流程和外贸术语
  • host绑定网站中文去掉wordpress
  • 有可以做ssgsea的网站么thinkphp租房网站开发