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

广州 网站设计公司排名免费找客源软件

广州 网站设计公司排名,免费找客源软件,芜湖seo网站优化,丰台b2c网站制作价格介绍 在本系列,我打算花大篇幅讲解我的 gitee 项目音视频播放器,在这个项目,您可以学到音视频解封装,解码,SDL渲染相关的知识。您对源代码感兴趣的话,请查看基于FFmpeg和SDL的音视频播放器 如果您不理解本…

介绍

在本系列,我打算花大篇幅讲解我的 gitee 项目音视频播放器,在这个项目,您可以学到音视频解封装,解码,SDL渲染相关的知识。您对源代码感兴趣的话,请查看基于FFmpeg和SDL的音视频播放器

如果您不理解本文,可参考我的前一篇文章音视频项目—基于FFmpeg和SDL的音视频播放器解析(十一)

解析

我们今天要讲的和音视频同步有关,其中 async 主要负责时间的控制,未来 audiooutput 和 videooutput 这两个负责播放音频和视频的文件就依赖其实现音视频同步。

我们先看看 async 的代码

#ifndef AVSYNC_H_
#define AVSYNC_H_#include<chrono>
#include<ctime>
#include<time.h>
#include<math.h>
using namespace std::chrono;class AVSync
{
public:AVSync();void InitClock(){}void SetClockAt(double pts, double time){this->pts = pts;pts_drift = this->pts - time;}double GetClock(){double time = GetMicroseconds() / 1000000.0;return pts_drift + time;}double SetClock(){double time = GetMicroseconds() / 1000000.0;SetClockAt(pts, time);}time_t GetMicroseconds(){system_clock::time_point time_point_new = system_clock::now();system_clock::duration duration = time_point_new.time_since_epoch();time_t us = duration_cast<microseconds>(duration).count();return us;}double pts = 0;double pts_drift = 0;
};#endif

这个代码量不大,成员变量有 pts,pts_drift 这两个。成员函数主要是 GetMicroseconds,SetClock,GetClock,SetClockAt,我们接下来逐步解析。

我们先说成员变量的含义。pts(presentation timestamp),了解音视频的朋友应该知道,这是显示时间戳,表示帧应该在屏幕显示的时间。pts_drift,当前 pts 与系统时间的差值。

然后,我们看一下函数

GetMicroseconds:
time_t GetMicroseconds(){system_clock::time_point time_point_new = system_clock::now();system_clock::duration duration = time_point_new.time_since_epoch();time_t us = duration_cast<microseconds>(duration).count();return us;
}

这个函数负责获取时间的间隔。

首先,第一行,system_clock::time_point time_point_new = system_clock::now(),我们获取了当前的时间。

然后,system_clock::duration duration = time_point_new.time_since_epoch(),通过这个函数我们获得了时间间隔。注意,先是得到 time_piont,我们才能计算 duration。

最后,time_t us = duration_cast<microseconds>(duration).count(),转换成毫秒并返回。

SetClockAt:
void SetClockAt(double pts, double time){this->pts = pts;pts_drift = this->pts - time;
}

这个函数负责给 pts 和 pts_drift 赋值。这很好理解,因为 pts_drift 就是 pts 和当前时间的差值。

GetClock:
double GetClock(){double time = GetMicroseconds() / 1000000.0;return pts_drift + time;
}

这个函数负责获取时间。获取了时间间隔后加上 pts_stamp 后就返回这个值。

SetClock:
double SetClock(){double time = GetMicroseconds() / 1000000.0;SetClockAt(pts, time);
}

这个函数负责设置设置时钟,获取时间间隔,然后调用 SetClockAt 后就可以了。

我们这篇文章就讲讲了时间设置的操作,并没有深入讲音视频同步的原理。我们最后通过 audiooutput 和 videooutput 播放出音视频就好了,到时候也会深入讲同步机制的。

欲知后事如何,请听下回分解。

http://www.r43.cn/news/128764.html

相关文章:

  • 计算机网络技术有哪些网络优化培训骗局
  • 网站建设行业政策百度关键词推广条件
  • 福州综合网站建设在线观看的seo综合查询
  • 厦门模板建站平台外贸平台app
  • 域名和主机有了怎么做网站兰州seo优化
  • 网站目录优化网站收录查询工具
  • 亳州网站建设公司艾滋病多久能查出来
  • 软件工程专业考研考什么广州seo工作
  • 嘉定网站设计怎么样百度收录提交申请网站
  • 网页价格seo是啥意思
  • 做拉皮条网站百度站长平台电脑版
  • 网站怎么做才能被百度收录网络舆情监测
  • wordpress 登录机制pc优化工具
  • 网站怎么做数据库销售技巧和话术
  • 网站开发外包合同范本怎么做seo信息优化
  • 东圃手机网站制作费用自己做网站网页归档
  • 德山经济开发区建设局网站怎么用网络推广
  • 网络推广方案找v信hyhyk1做推广好西安优化seo
  • 知名的政府网站建设公司搜狗关键词排名查询
  • 成都最专业做网站的刷关键词怎么刷
  • 五家渠建设局网站宁波关键词优化排名工具
  • 有前景的网站建设赚钱软件
  • 网站做我女朋友阿里巴巴seo排名优化
  • 品牌网站建设4小蝌蚪长沙竞价优化
  • 如何使用qq邮箱做网站河南自助建站seo公司
  • 北京承达创建装饰工程有限公司防疫优化措施
  • 流媒体网站开发教程外贸网站营销推广
  • 湖南省人民政府研究室朝阳seo搜索引擎
  • 如何在外管局网站上做a合同百度学术搜索
  • 怎么做营销型网站设计800元做小程序网站