问题标签 [cmtime]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
2324 浏览

swift - 将 CMTime 转换为字符串是错误的值返回

我想CMTime字符串一个人类可读的。
所以我找到了下面的代码。

我有30 second视频文件。它的CMTime价值是17945
我期待这个 durationText 00:30
但结果是00:29
和其他视频文件一样。
我应该修什么??

0 投票
1 回答
995 浏览

swift - 使用自定义开始/结束时间循环 AVPlayer

我正在使用 AVPlayer 播放视频。我希望能够根据用户的输入循环播放视频的各个部分(在播放视频时,用户可以按下按钮开始循环,然后在几秒钟后再次按下以结束 - 然后它应该从开始时间开始播放,并在当前时间到达指定的结束时间后继续循环)

我可以通过获取玩家的 currentTime 来获取这些开始/结束循环时间

我知道有一种方法可以在完成播放后将视频干净地循环回到开头,如下所示:

我想知道是否有办法用我的自定义 startLoop 和 endLoop 时间来做到这一点?

0 投票
0 回答
85 浏览

avfoundation - 使用 CMTimeAdd 从不同时间检索像素缓冲区?

我目前正在使用 aCADisplayLinkAVPlayerItemVideoOutput. 显示链接是这样更新的;

我想用同样output的方法提前 1 秒抓取一个像素缓冲区。由于我的视频是 30fps,我想我可以CMTimeMakeWithSeconds用来做以下事情;

当我尝试这样做,然后执行我...的后期处理时,我体验到的回放非常不稳定。如果我let timeB = time只是为了测试而设置的话,我的后期处理和播放就恢复了正常和流畅。

是否有任何解释为什么这种方法不起作用或更有效

0 投票
1 回答
255 浏览

ios - 尝试以预期的帧速率将 CVPixelBuffers 附加到 AVAssetWriterInputPixelBufferAdaptor

我正在尝试以预期的帧速率将 CVPixelBuffers 附加到 AVAssetWriterInputPixelBufferAdaptor,但它似乎太快了,而且我的数学已经关闭。这不是从相机捕捉,而是捕捉变化的图像。实际视频比捕获它的经过时间快得多。

我有一个函数每 1/24 秒附加一次 CVPixelBuffer。所以我试图在最后一次添加 1/24 秒的偏移量。

我试过了:

和:

和:

我添加到 currentSampleTime 并像这样附加:

我想到的另一种解决方案是获取上次时间和当前时间之间的差异,并将其添加到 currentSampleTime 以确保准确性,但不确定如何执行。

0 投票
0 回答
644 浏览

ios - 如何在 AVCaptureDevice 上准确设置快速快门速度(曝光时间)?

我正在为 IOS (13) 开发相机应用程序。为此,我将 AVCaptureSession 与 AVCaptureVideoPreviewLayer 结合使用。到目前为止一切正常。

现在我想让用户从给定的典型快门速度值数组(以 1/3 曝光停止)中选择并设置自定义快门速度(曝光持续时间)作为 [Int32]:

我将所需的曝光设置为 - 据我所知 - 只有以下功能的可能方式:

检查 AVCaptureDevice 的 exposureDuration 值表明,这可以为较慢的快门速度(高达 1/200 秒)提供完全准确的结果。选择的曝光持续时间越快,差异越大。例如:

我了解标称快门速度(对用户更方便的四舍五入的近似数字)与相机使用的精确实际快门速度之间存在差异(请参阅https://www.scantips.com/lights/fstop2. html ). 后者彼此之间的差异恰好是相邻光圈的 2 倍或 1/2 曝光(这将是 1/2、1/4、1/8、1/16、1/32、1/64 等值, 1/128, 1/256, 1/512, 1/1024, ..., 1/4096, ..., 1/8192...)。然而,这仍然不能解释我在更快的快门速度下得到的这些极端差异。

我还尝试像这样明确设置(随机)快速快门速度:

或这个

但两者仍然导致曝光持续时间为 1/12048(而不是 1/10000)...

我是否遗漏了与 CMTime 相关的内容,这与视频的帧速率有关(尽管更改 captureDevice 的 activeVideoMinFrameDuration 和 activeVideoMaxFrameDuration 没有任何效果)还是根本不可能设置完全自定义的曝光持续时间?

顺便提一句。我在尝试实现一个功能时遇到了同样的问题,该功能应该允许用户在(连续)自动曝光模式下定义最小快门速度(为此我使用了 captureDevice 的 activeMaxExposureDuration 函数)......

任何想法或提示将不胜感激。

0 投票
0 回答
254 浏览

ios - AVAssetWriter 将图像写入 mp4 文件,但文件内容只有一半

我想将窗口的快照记录到 macOS 应用程序中的 mp4 文件中。

  1. 使用函数启动创建者[aMp4CreaterEntity startRecordWithSize:CGSizeMake(2320, 1080) pixelType:kCVPixelFormatType_32ARGB]
  2. 每秒运行计时器 15 次,对窗口进行快照,使用函数CGWindowListCreateImage获取CGImageRef宽度 = 2320 和高度 = 1080,
  3. 调用创建函数[aMp4CreaterEntity recordImage:theCGImageRef timeStamp:[[NSDate date] timeIntervalSince1970]]发送CGImageRef到我的aMp4CreaterEntity
  4. 调用[aMp4CreaterEntity stopRecord]函数,并在

一切运行正常,除了mp4 文件的内容只包含之前发送的内容的一半,并且最后的内容丢失了。当我调试时,每一个CVPixelBufferRef都是附加的。AVAssetWriterInputPixelBufferAdaptor

一开始我认为CMTime设置错误,但修改为half或double后,错误是continue。

我是音频和视频的新手,有人可以帮我解决这个问题或详细解释一下吗?

顺便说一句:我同时在另一个文件中录制音频,但它有同样的问题 - 早期的一半内容。我可以直接阅读 swift 代码。

这是我使用 Objective-C 的记录器示例代码。

0 投票
0 回答
27 浏览

swift - 将视频 url 定义为班级中的 uiview

我的快速代码应该能够拍摄视频的快照,然后拍摄该图像并显示在 uiimageview 中。而不是使用在线链接,我只希望 url 成为我班级中的 uiview。所以视频 url 应该是 previewView 而不是我下面的 https 链接。下面的所有代码都在这个类中

0 投票
3 回答
713 浏览

swift - 从 AVPlayer 播放器周期性时间观察器块更新 MPNowPlayingInfoCenter 中的播放时间的问题

我在更新播放信息时遇到问题。请看一下所附的gif。在记录播放结束时设置为不正确的值。

gif

我通过MPNowPlayingInfoPropertyElapsedPlaybackTime计时器块中的键更新值。我检查该值是否有效,将其转换为秒并设置该值。的值MPMediaItemPropertyPlaybackDuration是从初始化程序设置的。

playerDidFinishedPlaying我能找到的最接近的解决方案是在func 中再次设置播放时间。在这种情况下,进度滑块走到尽头,但我仍然可以看到它跳回了一会儿。

这是播放器的实现:

0 投票
0 回答
119 浏览

ios - 是否有每秒获取 10 帧视频的功能?

我正在尝试从imagePickerController. 我使用这个功能,但从 0.1s -> 1s 的图像是相同的,从 1.1 到 2s 也是。有什么办法吗?这是我的功能:

还是我需要提高视频质量?感谢帮助。

0 投票
1 回答
205 浏览

ios - 使用 Swift 的 plist 中 CMTime 和 CMTimeRange 的现代方式

在 plist 中存储 CMTime 和 CMTimeRange 等对象的最“现代”Swift 方法是什么?我尝试了以下方法。字典对象存储在 plist 中。

并且,

有人指出,第一种方法的问题是 NSValue 更像是 Objective-C 类型的东西,需要先存档,然后才能将其存储在 plist 中。第二种方法是基于字典的方法,其中 timeRange 存储为 CFDictionary 但与 plist 兼容,无需存档。但离 Swift 更远的是 CFDictionary!

那么使 CMTimeRange 属性列表可序列化的现代方法是什么?