使用 mpeg4AppleHLS swift 的视频时间不正确

问题描述

我在 avassetwriter 中使用 mpeg4applehls 配置文件类型创建 MPEG-2 视频文件,视频持续时间或开始时间错误。我创建了 5 秒的视频片段并将其写入文件以稍后上传到服务器。 didoutputsegment 委托返回的数据返回两种类型,一种是初始化段,一种是可分离段。我将初始化与可分离段连接起来并将其写入文件,视频工作正常,但时间戳错误

创建avasetwriter的代码

videoWriter = AVAssetWriter(contentType: UTType(AVFileType.mp4.rawValue)!)
videoWriter?.outputFileTypeProfile = .mpeg4AppleHLS
videoWriter?.preferredOutputSegmentInterval = CMTime(seconds: 5.0,preferredTimescale: CMTimeScale(1.0))
videoWriter?.delegate = self

开始录制前的代码

let sessionAtSourceTime = CMSampleBufferGetPresentationTimeStamp(sampleBuffer)
if #available(iOS 14.0,*) {
    videoWriter?.initialSegmentStartTime = .zero
} else {
    createRecordingFile()
}
videoWriter?.startWriting()
videoWriter?.startSession(atSourceTime: sessionAtSourceTime)

写入文件代码

@available(iOS 14.0,*)
func assetWriter(_ writer: AVAssetWriter,didOutputSegmentData segmentData: Data,segmentType: AVAssetSegmentType) {
    print("Did output segment Data")
    if segmentType == .separable {
        
        guard let initData = initializationSegment else { return }
        createRecordingFile()
        var data = Data()
        data.append(initData)
        data.append(segmentData)
        try? data.write(to: currentFileLocation!)
        
    } else if segmentType == .initialization {
        self.initializationSegment = segmentData
    }
}

我尝试将 initialSegmentStartTime 设置为 sessionAtSourceTime 或将 initialSegmentStartTime、startSession 都设置为 .zero,但似乎没有任何影响。

使用其他配置文件写入正常文件就像生成 mp4 文件一样工作正常。

示例生成文件File文件从 28 分钟开始,然后从 20 小时或更长时间开始。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)