我想读取时间码轨道的时间值。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)