问题描述
我在 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 (将#修改为@)