- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我希望 CMTime
为人类可读的字符串。
所以我找到了下面的代码。
extension CMTime {
var durationText:String {
let totalSeconds = CMTimeGetSeconds(self)
let hours:Int = Int(totalSeconds / 3600)
let minutes:Int = Int(totalSeconds.truncatingRemainder(dividingBy: 3600) / 60)
let seconds:Int = Int(totalSeconds.truncatingRemainder(dividingBy: 60))
if hours > 0 {
return String(format: "%i:%02i:%02i", hours, minutes, seconds)
} else {
return String(format: "%02i:%02i", minutes, seconds)
}
}
}
我有 30 秒
视频文件。它的 CMTime
值为 17945
。
我希望这个 durationText 00:30
。
但结果是 00:29
。
和其他视频文件一样。
我应该修复什么??
最佳答案
在计算时间分量之前,您需要对秒进行四舍五入。
extension CMTime {
var roundedSeconds: TimeInterval {
return seconds.rounded()
}
var hours: Int { return Int(roundedSeconds / 3600) }
var minute: Int { return Int(roundedSeconds.truncatingRemainder(dividingBy: 3600) / 60) }
var second: Int { return Int(roundedSeconds.truncatingRemainder(dividingBy: 60)) }
var positionalTime: String {
return hours > 0 ?
String(format: "%d:%02d:%02d",
hours, minute, second) :
String(format: "%02d:%02d",
minute, second)
}
}
测试所有可能的边缘圆角情况:
CMTime(value: 0, timescale: 600).positionalTime // "00:00"
CMTime(value: 300, timescale: 600).positionalTime // "00:01"
CMTime(value: 600, timescale: 600).positionalTime // "00:01"
CMTime(value: 18000 - 600, timescale: 600).positionalTime // "00:29"
CMTime(value: 17945, timescale: 600).positionalTime // "00:30"
CMTime(value: 18000, timescale: 600).positionalTime // "00:30"
CMTime(value: 18055, timescale: 600).positionalTime // "00:30"
CMTime(value: 18000 + 600, timescale: 600).positionalTime // "00:31"
CMTime(value: 2160000 - 600, timescale: 600).positionalTime // "59:59"
CMTime(value: 2160000 - 300, timescale: 600).positionalTime // "1:00:00"
CMTime(value: 2160000, timescale: 600).positionalTime // "1:00:00"
关于swift - 将 CMTime 转换为字符串是错误的值返回,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54662047/
我理解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 次才能前进一
我是一名优秀的程序员,十分优秀!