小编Tho*_*abo的帖子

如何使用 AVAsset 和 Swift 3 读取时间码轨道?

我想读取时间码轨道的时间值。Apple 提供了一份出色的文档(请参阅技术说明 2310),但它是用 Objective C 编写的。

我已将核心逻辑转换为 Swift 3。它与 ObjC 版本完全相同,这意味着CMSampleBuffer读取时间码轨道中的 a 并将其转换为CMBlockBuffer. 当我创建数据指针CMBlockBufferGetDataPointer(在timecodeFrame()func 中)时它失败了 ,这意味着原始数据总是给我 0 帧。所以它归结为一个问题,我如何正确处理原始数据?

import Foundation
import AVFoundation
import CoreMedia

let movie = URL(fileURLWithPath: "videoWithTimecodeTrack.mov")
let asset = AVAsset(url: movie)

asset.loadValuesAsynchronously(forKeys: ["tracks"]) {

    var error: NSError?
    guard asset.statusOfValue(forKey: "tracks", error: &error) == AVKeyValueStatus.loaded
        else { if let error = error { return print(error) } }

    readStartTimecode(asset: asset)
}


func readStartTimecode(ofAsset asset: AVAsset) {

    let timecodeTracks = …
Run Code Online (Sandbox Code Playgroud)

avfoundation timecodes avassetreader avasset swift3

4
推荐指数
1
解决办法
816
查看次数

标签 统计

avasset ×1

avassetreader ×1

avfoundation ×1

swift3 ×1

timecodes ×1