2013-12-11 2 views
10

Я использую AVAssetWriter для сжатия видео, код работает как в iPhone 5, так и в iOS7. Я пытаюсь использовать AVVideoProfileLevelKey из AVVideoProfileLevelH264High41 для достижения лучшего сжатия, чем для базового или основного профиля. Код работает в iOS7 с iPhone 5, но ломается на iPhone 4 со следующей ошибкой. Большинство этих профилей, перечисленных в приведенной ниже ошибке, не работают.AVVideoProfileLevelH264High41 нарушение на iPhone 4

Кто-нибудь знает, если высокие профили для сжатия не работают на iPhone 4, в документации на яблоки указано, что для нее требуется iOS6 или выше.

> 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]; 
+0

Код разбивая сделать неперехваченное 'NSIllegalArgumentException'. Итак, я бы предположил, что, возможно, аргументы были разными в iOS 6, чем 7, хотя сам метод мог существовать. – SevenBits

+0

Спасибо SevenBits, чтобы прояснить iPhone 4, который не работает, также работает iOS7. –

ответ

3

Вы не можете кодировать в ProfileLevelH264High41 с iPhone4, он поддерживается только iPhone4S

Смежные вопросы