- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我理解CMTime
的概念以及它的作用。简而言之,我们有非常小的秒数表示为浮点数。添加后,它们会累积一个错误,随着解码/播放的进行,该错误变得很重要。例如求和一百万次0.000001
给我们 1.000000000007918
.好的,CMTime
这主意听起来很不错。
let d: Double = 0.000001
var n: Double = 0
for _ in 0 ..< 1_000_000 { n += d }
print(n)
// 1.000000000007918
Double
时往返
CMTime
上面的错误跟原来
Double
的区别相比,简直就是个笑话和它的
CMTime
值(value)。您可以猜测添加这些随机后的差异会是什么样子
CMTime
值(value)一百万倍!
import CoreMedia
print("Simple number after 1,000,000 additions and diff between random ")
print("number before/after converting to CMTime:")
print("add:", String(format: "%.20f", 1.000000000007918))
for _ in 0 ..< 10 {
let seconds = Double.random(in: 0 ... 10)
// Let's go with the max timescale!
let time = CMTime(seconds: seconds, preferredTimescale: .max)
print("dif:", String(format: "%.20f", seconds - time.seconds))
}
// Simple number after 1,000,000 additions and diff between random
// number before/after converting to CMTime:
// add: 1.00000000000791811061
// dif: 0.00000000025481305954
// dif: 0.00000000027779378797
// dif: 0.00000000000071231909
// dif: 0.00000000024774449159
// dif: 0.00000000028195579205
// dif: 0.00000000029723601358
// dif: 0.00000000029402880131
// dif: 0.00000000044737191729
// dif: 0.00000000036750824606
// dif: 0.00000000043562398133
Double
可以准确转换为
CMTime
,那么这将不是问题。
CMTime
是否有意义单独用于时间处理(显然除了一百万个添加项),或者仅用于处理在
CMTime
中获取和返回值的 API 时有用格式?为了提供一些上下文,我有一个带有定制 UI(播放器、轨道、时间线)的视频编辑应用程序,用于处理播放速度调整、轨道修剪和重新排列等。使用
Double
表达时间值效果很好,它干净、简单并且可以完成工作。但是
CMTime
感觉像是“正确”的方式来做到这一点。但是,看看
Double
会发生什么情况来回转换后让我想知道
CMTime
的使用领域和编解码媒体一样狭隘?
最佳答案
你的直觉是正确的。将 Screwdriver 用作锤子可能在大多数情况下都有效,但这不是最佳用途。更重要的是,它可能会遗漏一些不明显的边缘情况,在这些情况下它不起作用或会导致更多的工作在钉子上敲打(例如双重处理)。
其次,你的转换方法是什么?也许您错过了一个边缘情况,例如不同的时间尺度。如果没有更多信息,我真的无法提供进一步的指导。
CMTime 已经具有 AVPlayer 的帧精度,无需转换。这就是它的用途,但请确保将 ToleranceBefore 和 ToleranceAfter 设置为零。
注意:十多年来,我一直致力于帧精确视频/音频处理。
关于swift - CMTime 在编解码媒体之外是否有任何实际应用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61449031/
我理解CMTime的概念以及它的作用。简而言之,我们有非常小的秒数表示为浮点数。添加后,它们会累积一个错误,随着解码/播放的进行,该错误变得很重要。例如求和一百万次0.000001给我们 1.0000
我想使用类 AVPlayer 的 Seek 方法。但是这个方法需要一个参数 CMTime。任何人都知道这个对象。 为了将播放光标移动到给定的时间。 最佳答案 Apple 文档包含有关 CMTime s
我正在编写一个使用 AVFoundation 和 CMTime 的应用程序。我已经记录了使用 CMTimeMake() 创建的 CMTime 实例的值。该值似乎四舍五入为最接近的整数。我需要一个具有精
我看过一些examples of CMTime (三个单独的链接),但我还是不明白。我将 AVCaptureSession 与 AVCaptureVideoDataOutput 一起使用,我想设置输出
我一直在查看与创建 CMTime 相关的文档。所有函数(CMTimeMake()、CMTimeMakeWithSeconds() 等)都采用名为 preferredTimeSale 的第二个参数。 有
我之前使用过 Core Data 的可转换属性,但没有使用过 C 对象,例如 CMTime。 我需要使用可转换在核心数据上存储 CMTime。 在模型对象上,我已将其声明为可转换的。 @propert
func addPeriodicTimeObserver(forInterval interval: CMTime, queue: DispatchQueue?, using block: @esca
CMTimeMake 没有给我预期的结果。以下代码: CMTime testTime = CMTimeMake(0, 30); NSLog(@"testTime w/ input 0, 30: val
我希望 CMTime 为人类可读的字符串。 所以我找到了下面的代码。 extension CMTime { var durationText:String { let tota
我正在创建一个应用程序,我必须在其中混合歌曲。我已经完成了这个,但问题是当我使用以下函数时。 - (BOOL)insertTimeRange:(CMTimeRange)timeRange ofTrac
我有一个小整数值,我想将它转换成 CMTime。 问题是 CMTime(value: _ , timeScale: _) 或 CMTimeMakeWithSeconds(value: _ , time
如何将当前播放时间增加 5 秒? 实际上这是我的代码: CMTime currentTime = music.currentTime; 我不能使用 CMTimeGetSeconds() ,因为我需要
这可能看起来很荒谬,但是如何在 Objective-C 中将 CMTime 的秒数输出到控制台?我只需要将该值除以时间刻度,然后以某种方式在控制台中看到它。 最佳答案 NSLog(@"seconds
我很难理解如何使用 AVAssetWriter 将 30fps 的运动 JPEG 流转换为视频文件。我没有得到的部分是[适配器 appendPixelBuffer:buffer withPresent
我有一个 AVPlayer,我想在 11.593 秒的特定时间开始播放。我从 URL 字符串中检索到这个数字(以毫秒为单位),将其转换为 Double,然后转换为 CMTime,如下所示: http:
我有一个 iPhone 摄像头附件,可以以 9FPS 的速度捕捉视频,并将其作为单独的 UIImages 提供。我正在尝试将这些图像拼接在一起,以使用 AVFoundation 创建相机所见内容的延时
1) CMTimeMake(1,10) 表示持续时间为 1 秒,时间刻度为 10,即每秒 10 帧。这意味着 10 帧的视频持续时间为 1 秒? 2) CMTime lastTime=CMTimeMa
我有以下 2 行代码正在迁移到 Swift,但我有点卡住了。 CMTime trimmingTime = CMTimeMake(lround(videoAsset.naturalTimeScale /
我有一个 AVQueuePlayer,我正在尝试在按下按钮时向后搜索 5 秒。 我的代码如下: func seekBack() { guard let currentTime = self.p
我正在尝试使用 AVFoundation 播放视频。我将以下代码用于将播放推进一帧的按钮。 它间歇性地工作,在某些执行中它会做正确的事情并前进一帧,但大多数时候我必须按下按钮 3 或 4 次才能前进一
我是一名优秀的程序员,十分优秀!