1
Jameson1559 2018-05-11 11:14:40 +08:00 1
CMTime 并不等于时间戳,也不能和 NSDate 对等
CMTime 的 0 点 等同于 CMTimeZero 等同于 媒体的 0 时间,是相对于媒体存在的一个计时单位 CMTimeGetSeconds 是获取了用 秒 当作单位的 CMTime 的值 也就是用 CMTime.value / CMTime.timescale 关于和系统时间对齐这个,并不能理解到这个问题要问什么,如果是指: 1) 计算当前 CMTime 与 timeIntervalSince1970 之间的差值 不能这样计算,因为 CMTime 是相对时间,不是系统时间,两者不能进行比对 /运算 2) 让当前 CMTime 等于 timeIntervalSince1970 按理说不应该有这种需求,顶多说修改 CMTime 的值,但是这样做你的帧数据就乱了呀。。 - - - - 关于 CMTime 是什么,在 Apple 提供的文档中有更加详细的说明 -> https://developer.apple.com/documentation/coremedia/cmtime-u58 |
2
jasonlz OP @Jameson1559 现在就是要做个时间同步,让这个摄像头的时间和别的地方的数据同步,所以就不知道这个 CMTime 的 0 时刻是什么时候,我用首帧时间做了个差,然后发现有几十毫秒的误差,对于算法而言,这个误差有点致命。老哥知道这个 CMTime 的 0 时刻的系统时间怎么获取吗?
|
3
Jameson1559 2018-05-12 23:45:59 +08:00
@jasonlz
- - - - CMTime 的 0 时间永远是相对于媒体而言的呀……但是如果硬要同步的话,我记得 AVDeviceInputDelegate 还是哪个来着,有一个方法叫 - deviceInput: didOutputSampleBuffer 的,在第一次调用采样输出的时候获得一次系统时间,然后把这个当作 0 时间来同步 不过这里还是要注意一个问题,- deviceInput: didOutputSampleBuffer 回调的时候,根据你的采样渠道,可能会返回不止一种类型的 sample,这个不管,只需要首次回调的时间 但是这样可能还是会有一些误差吧- -大概? 或者你现在已经用了我说的这种方法…… ? |