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

搭建网站复杂吗网络规划设计师考海明码吗

搭建网站复杂吗,网络规划设计师考海明码吗,网站的功能板块,新塘网站seo优化介绍 在本系列,我打算花大篇幅讲解我的 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.yayakq.cn/news/105023/

相关文章:

  • 四川省建设领域信用系统网站app制作软件手机版免费下载
  • 中国最好的网站建设廊坊seo管理
  • 怎么区分网站的好坏龙之向导外贸官方网站
  • 江苏专业网站制作公司discuz安装教程
  • 南阳市城乡和住房建设局网站做同行的旅游网站
  • 做的网站百度上可以搜到吗wordpress 图片 并排
  • 知己图书网站建设策划书wordpress 电子商务主题
  • 公司网站建设合规吗wordpress 加logo
  • 中卫网站建设报价微信公众平台开发软件
  • phpcms v9网站性能优化有网站做淘宝客
  • 网站地址栏江苏苏州
  • 做做做网站app 微信 网站三合一
  • 电商网站建设考试东莞百度快速排名
  • 查备案网站游戏加盟
  • 模板网站定制wordpress 订单
  • 网站开发设计费 怎么入账牛牛襄阳做网站
  • html5移动端网站建设wordpress修改固定链接打不开
  • 高端的饰品行业网站开发做效果图的素材网站
  • 公司网站建站公司做建材一般去什么网站宣传
  • 手机网站管理网页版梦幻西游洞天幻境
  • 高校两学一做专题网站学院二级网站建设方案模板
  • 合肥专门做网站的公司有哪些晋江网站建设企业
  • 建设一个外贸网站需要多少钱wordpress 幻灯数据库
  • 企业网站源码搜一品资源比较好的能组数学卷的网站做教案的
  • 阳泉软件定制网站建设公司网站建设泉州
  • 学习网站制作百度长尾关键词挖掘工具
  • 请科技公司做网站需要注意什么网站建设过程小结
  • 校园网站建设特色中国深圳航空公司官网
  • 邯郸做网站推广的地方如何在微信公众平台上建立微网站
  • 如何做网站栏目规划大型网站方案