如何使用 NSTimeInterval 进行 CMTime 引用

Posted

技术标签:

【中文标题】如何使用 NSTimeInterval 进行 CMTime 引用【英文标题】:how to make a CMTime reference with a NSTimeInterval 【发布时间】:2015-11-02 01:13:42 【问题描述】:

我需要帮助在 swift 2 中创建 CMTime 变量,以便创建 AVMutableCompostion。当前代码:

    let videoAsset: AnyObject! = AVAsset(URL: outputFileURL)

    let videoDuration:CMTime = CMTimeMake(Int64(videoAsset.duration), 1)

但是上面的变量 videoDuration 一直返回 nil!我仔细检查以确保 videoAsset.duration 不是 nil 并且不是。

摘要:导致它在“videoDuration”作为参数传入的行处崩溃

    // Merge audio and video tracks to complete video
    let videoTrack = mixComposition.addMutableTrackWithMediaType(AVMediaTypeVideo, preferredTrackID: Int32(kCMPersistentTrackID_Invalid))
    do 
        try videoTrack.insertTimeRange(CMTimeRangeMake(kCMTimeZero, videoDuration),
            ofTrack: videoAsset.tracksWithMediaType(AVMediaTypeVideo)[0] ,
            atTime: kCMTimeZero)
     catch _ 
        /* TODO: Finish migration: handle the expression passed to error arg: kCMTimeZero */
    

请帮忙!任何建议将不胜感激:)

【问题讨论】:

【参考方案1】:

一个问题是您将videoAsset 转换为AnyObject。不要那样做。它想成为 AVAsset。让它成为一个。

另一个问题是您没有遵守有关如何获取 AVAsset 的duration 的规则。你不能简单地创建一个 AVAsset 并立即请求它的duration。此属性(与许多其他属性一样)需要时间来获取。请阅读AVAsynchronousKeyValueLoading 上的文档。

【讨论】:

在 Swift 2.0 之前运行良好??唯一给我带来问题的是 CMTime 参数

以上是关于如何使用 NSTimeInterval 进行 CMTime 引用的主要内容,如果未能解决你的问题,请参考以下文章

如何从 NSTimeInterval 获取十分之一秒、百分之一秒等

NSTimeInterval 格式

如何在 iphone 中将 NSTimeInterval 定义为 mm:ss 格式?

如何以毫秒精度比较两次?

UTC 中的 NSTimeInterval?

NSTimeInterval的使用