Как увеличить или убедиться в максимальном размере входного кадра AVAssetWriter?IOS

Программируем под IOS
Ответить Пред. темаСлед. тема
Anonymous
 Как увеличить или убедиться в максимальном размере входного кадра AVAssetWriter?

Сообщение Anonymous »

Я пытаюсь записать кадры в видео с помощью AVAssetWriter. Я написал коды, как показано ниже:

Код: Выделить всё

// Initial AVAssetWriter
// Write mp4 file
let assetWriter = try AVAssetWriter(outputURL: targetUrl, fileType: .mp4)
let width = size.width * 2
// set options for written video
let videoSettings: [String : Any] = [
AVVideoCodecKey: AVVideoCodecType.h264,
AVVideoWidthKey: width,
AVVideoHeightKey: size.height
]
guard assetWriter.canApply(outputSettings: videoSettings, forMediaType: AVMediaType.video) else {
fatalError("Error applying output settings")
}
// Initial AVAssetWriterInput
let assetWriterInput = AVAssetWriterInput(mediaType: .video, outputSettings: videoSettings)

// set arritbutes
let sourcePixelBufferAttributes: [String : Any] = [
kCVPixelBufferPixelFormatTypeKey as String: kCVPixelFormatType_32BGRA]

// Initial AVAssetWriterInputPixelBufferAdaptor
let inputPixelBufferAdaptor =
AVAssetWriterInputPixelBufferAdaptor(assetWriterInput: assetWriterInput,
sourcePixelBufferAttributes: sourcePixelBufferAttributes)
if assetWriter.canAdd(assetWriterInput) == true {
assetWriter.add(assetWriterInput)
assetWriter.startWriting()
assetWriter.startSession(atSourceTime: .zero)
} else {
print("Cannot add asset writer input.")
}

if let error = assetWriter.error {
print("assetWrite status=\(assetWriter.status), error=\(error)")
}
Но при использовании моего iPhone 14 Pro он выдаст print("assetWrite status=\(assetWriter.status), error=\(error)") показывает:< /p>

Код: Выделить всё

assetWrite status=AVAssetWriterStatus(rawValue: 3), error=Error
Domain=AVFoundationErrorDomain Code=-11800 "The operation could not be completed"
UserInfo={NSLocalizedFailureReason=An unknown error occurred (-12902),
NSLocalizedDescription=The operation could not be completed, NSUnderlyingError=0x30189cb10
{Error Domain=NSOSStatusErrorDomain Code=-12902 "(null)"}}
Размер = CGSize(ширина: 2200, высота: 2200) то есть ширина = size.width * 2 = 4400
Если бы я написал :

Код: Выделить всё

let videoSettings: [String : Any] = [
AVVideoCodecKey: AVVideoCodecType.h264,
AVVideoWidthKey: 4090, // width,
AVVideoHeightKey: size.height
]
Ошибка не возникнет. Если установлено значение 4100 или больше, также возникнет ошибка.
Можно ли как-нибудь решить эту проблему, используя значение 4400 или больше в качестве ключа ширины?

Подробнее здесь: https://stackoverflow.com/questions/784 ... frame-size
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «IOS»