Ich benutze AVAssetWriter
, um ein Video zu komprimieren, der Code funktioniert sowohl in iPhone 5 und 4 in iOS7. Ich versuche, die AVVideoProfileLevelKey
von AVVideoProfileLevelH264High41
zu verwenden, um eine bessere Komprimierung als die Baseline- oder Hauptprofile zu erreichen. Der Code funktioniert in iOS7 mit einem iPhone 5, bricht aber auf einem iPhone 4 mit dem folgenden Fehler ab. Die meisten dieser unten aufgeführten Fehler funktionieren nicht.AVVideoProfileLevelH264High41 brechend auf iPhone 4
Wer weiß, ob High-Profile für die Komprimierung auf dem iPhone 4 nicht funktionieren, Apple-Dokumentation besagt nur, dass es iOS6 oder höher erfordert.
> 2013-12-10 18:26:37.637 VideoCompression[677:3707] *** Terminating app
> due to uncaught exception 'NSInvalidArgumentException', reason: '***
> `-[AVAssetWriterInput initWithMediaType:outputSettings:sourceFormatHint:]` For compression
> property ProfileLevel, video codec type avc1 only allows the following
> values: H264_Baseline_1_3, H264_Baseline_3_0, H264_Baseline_3_1,
> H264_Baseline_4_1, H264_Main_3_0, H264_Main_3_1, H264_Main_3_2,
> H264_Main_4_0, H264_Main_4_1, H264_Main_5_0, H264_High_5_0,
> H264_Baseline_AutoLevel, H264_Main_AutoLevel, H264_High_AutoLevel'
> *** First throw call stack: (0x2fd76f4b 0x3a1066af 0x2ec5d833 0x2ec5d70b 0x2ec5d67d
0xbd001 0xbba59 0x3a5e9d1b 0x3a5ea293 0x3a5ea6f7
> 0x3a5fc8f9 0x3a5fcb79 0x3a72bdbf 0x3a72bc84) libc++abi.dylib:
> terminating with uncaught exception of type NSException
NSDictionary *codecSettings = [NSDictionary dictionaryWithObjectsAndKeys:
[NSNumber numberWithInteger:[bitrateTF.text intValue]], AVVideoAverageBitRateKey,
[NSNumber numberWithInt:[maxkeyframeintervalTF.text intValue]],AVVideoMaxKeyFrameIntervalKey,
**AVVideoProfileLevelH264High41,AVVideoProfileLevelKey,**
videoCleanApertureSettings, AVVideoCleanApertureKey,
videoAspectRatioSettings, AVVideoPixelAspectRatioKey,
nil];
NSDictionary *videoSettings = [NSDictionary dictionaryWithObjectsAndKeys:
AVVideoCodecH264, AVVideoCodecKey,
AVVideoScalingModeResizeAspectFill, AVVideoScalingModeKey,
codecSettings,AVVideoCompressionPropertiesKey,
[NSNumber numberWithInt:[widthTF.text intValue]], AVVideoWidthKey,
[NSNumber numberWithInt:[heightTF.text intValue]], AVVideoHeightKey,
//AVVideoScalingModeFit,AVVideoScalingModeKey,
nil];
self.assetWriterVideoInput = [AVAssetWriterInput assetWriterInputWithMediaType:AVMediaTypeVideo outputSettings:videoSettings];
self.assetWriterVideoInput.transform = self.transformAssetWriter;
[self.assetWriter addInput:self.assetWriterVideoInput];
Der Code Absturz ist eine abgefangene 'NSIllegalArgumentException' tun. Also würde ich vermuten, dass die Argumente in iOS 6 vielleicht anders als 7 waren, obwohl die Methode selbst existiert haben könnte. – SevenBits
Dank SevenBits, um das iPhone 4 zu erklären, das nicht funktioniert, läuft auch iOS7. –