Fix video writing

This commit is contained in:
Ilya Laktyushin 2023-05-21 20:48:53 +04:00
parent e263622b64
commit 2c62b6dcf3
2 changed files with 11 additions and 15 deletions

View File

@ -933,8 +933,7 @@ public func recommendedVideoExportConfiguration(values: MediaEditorValues, frame
AVVideoCodecKey: AVVideoCodecType.hevc, AVVideoCodecKey: AVVideoCodecType.hevc,
AVVideoCompressionPropertiesKey: compressionProperties, AVVideoCompressionPropertiesKey: compressionProperties,
AVVideoWidthKey: 720, AVVideoWidthKey: 720,
AVVideoHeightKey: 1280, AVVideoHeightKey: 1280
MediaEditorVideoExport.Configuration.FrameRateKey: frameRate
] ]
let audioSettings: [String: Any] = [ let audioSettings: [String: Any] = [
@ -947,6 +946,7 @@ public func recommendedVideoExportConfiguration(values: MediaEditorValues, frame
return MediaEditorVideoExport.Configuration( return MediaEditorVideoExport.Configuration(
videoSettings: videoSettings, videoSettings: videoSettings,
audioSettings: audioSettings, audioSettings: audioSettings,
values: values values: values,
frameRate: frameRate
) )
} }

View File

@ -61,7 +61,10 @@ public final class MediaEditorVideoAVAssetWriter: MediaEditorVideoExportWriter {
} }
var videoSettings = configuration.videoSettings var videoSettings = configuration.videoSettings
videoSettings[AVVideoExpectedSourceFrameRateKey] = sourceFrameRate if var compressionSettings = videoSettings[AVVideoCompressionPropertiesKey] as? [String: Any] {
compressionSettings[AVVideoExpectedSourceFrameRateKey] = sourceFrameRate
videoSettings[AVVideoCompressionPropertiesKey] = compressionSettings
}
let videoInput = AVAssetWriterInput(mediaType: .video, outputSettings: videoSettings) let videoInput = AVAssetWriterInput(mediaType: .video, outputSettings: videoSettings)
videoInput.expectsMediaDataInRealTime = false videoInput.expectsMediaDataInRealTime = false
@ -175,21 +178,22 @@ public final class MediaEditorVideoExport {
} }
public struct Configuration { public struct Configuration {
public static let FrameRateKey = "Telegram__FrameRate"
public var shouldOptimizeForNetworkUse: Bool = true public var shouldOptimizeForNetworkUse: Bool = true
public var videoSettings: [String: Any] public var videoSettings: [String: Any]
public var audioSettings: [String: Any] public var audioSettings: [String: Any]
public var values: MediaEditorValues public var values: MediaEditorValues
public var frameRate: Float
public init( public init(
videoSettings: [String: Any], videoSettings: [String: Any],
audioSettings: [String: Any], audioSettings: [String: Any],
values: MediaEditorValues values: MediaEditorValues,
frameRate: Float
) { ) {
self.videoSettings = videoSettings self.videoSettings = videoSettings
self.audioSettings = audioSettings self.audioSettings = audioSettings
self.values = values self.values = values
self.frameRate = frameRate
} }
var timeRange: CMTimeRange? { var timeRange: CMTimeRange? {
@ -211,14 +215,6 @@ public final class MediaEditorVideoExport {
return CGSize(width: 1920.0, height: 1080.0) return CGSize(width: 1920.0, height: 1080.0)
} }
} }
var frameRate: Float {
if let frameRate = self.videoSettings[Configuration.FrameRateKey] as? Float {
return frameRate
} else {
return 30.0
}
}
} }
public enum Status { public enum Status {