- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
CMTimeMake 没有给我预期的结果。以下代码:
CMTime testTime = CMTimeMake(0, 30);
NSLog(@"testTime w/ input 0, 30: value: %d, timescale %d, seconds: %f",
testTime.value, testTime.timescale,
(float) testTime.value / testTime.timescale);
testTime = CMTimeMake(1, 30);
NSLog(@"testTime w/ input 1, 30: value: %d, timescale %d, seconds: %f",
testTime.value, testTime.timescale,
(float) testTime.value / testTime.timescale);
testTime = CMTimeMake(15, 30);
NSLog(@"testTime w/ input 15, 30: value: %d, timescale %d, seconds: %f",
testTime.value, testTime.timescale,
(float) testTime.value / testTime.timescale);
产生以下输出:
testTime w/input 0, 30: value: 0, timescale 0, seconds: 0.000000
testTime w/input 1, 60: value: 1, timescale 0, seconds: 0.000000
testTime w/input 15, 60: value: 15, timescale 0, seconds: 0.000000
为什么 testTime.timescale 总是零?
最佳答案
NSLog
的格式字符串有问题。由于您的问题标题表明您是“菜鸟”,我将花一些时间来解释这里发生了什么。
采用可变数量参数的函数,如 NSLog(NSString* format, ...)
需要根据格式字符串读取额外的参数...
%d
表示:读取四个字节(32位)并将其视为十进制整数。%f
表示:读取四个字节(32 位)并将其视为 float 。让我们检查一下您的最后一个示例:
您在格式字符串中传递 %d %d %f
,后跟:
testTime.value // A 64-bit integer (8 bytes) with the value 15
testTime.timescale // A 32-bit integer (4-bytes) with the value 30
(float)15 / 30 // A 32-bit float (4-bytes) with the value 0.5f
由于这些数字的传入方式,您最终会读取第一个 %d
的 testTime.value
的最低有效 32 位,这恰好是正确解释为 15,然后对于第二个 %d
和 %f
,您正在读取高 32 位 (0) 和一些填充字节以获得 0.0。我实际上有点困惑为什么你得到 0.0 而不是一些小数字,因为我希望 30 被解释为 float ,这将是 4.2E-44 - 如果有人知道请告诉我。
无论如何,解决它的方法是将第一个 %d
更改为 %lld
,这将正确显示值。 testTime
变量实际上一直保持着正确的值。
关于ios - CMTime/CMTimeMake 菜鸟问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5999975/
我理解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 次才能前进一
我是一名优秀的程序员,十分优秀!