1

低品質の変換で単純なビデオ圧縮コードがあります。IOS-4.2.1を使用してiphone4でコードをテストしています。問題は、ブレークポイントのないデバイスでコードをテストすると、コードがビデオを作成できなかったことです(ゼロだけです)。 kbファイルまたは空のファイルが作成されました)しかし、このコードを1行ずつブレークポイントチェックを使用すると、完全な圧縮ビデオが作成され、Macのクイックタイムプレーヤーでも実行されます。圧縮後、このビデオファイルのzipを作成します。

NSURL *videoURL=[[self.videourlarray objectAtIndex:i] valueForKey:UIImagePickerControllerReferenceURL];
        NSURL *outputURL = [NSURL fileURLWithPath:videoFile];

        [[NSFileManager defaultManager] removeItemAtURL:outputURL error:nil];
        AVURLAsset *asset = [AVURLAsset URLAssetWithURL:videoURL options:nil];
        AVAssetExportSession *exportSession = [[AVAssetExportSession alloc] initWithAsset:asset presetName:AVAssetExportPresetLowQuality];
        exportSession.outputURL = outputURL;
        exportSession.shouldOptimizeForNetworkUse = YES;
        exportSession.outputFileType = AVFileTypeQuickTimeMovie;
        [exportSession exportAsynchronouslyWithCompletionHandler:^(void) 
         {
             NSLog(@"Export Complete %d %@", exportSession.status, exportSession.error);
             [exportSession release];
         }];

助けてくれてありがとう...

4

2 に答える 2

6

スレッドをいじっていないことを確認する必要があると思います.. (AVFoundation ガイドによると、エクスポーターは特定のスレッドで実行されることが保証されていません)。

このようなブロックを使用します。

    [exportSession exportAsynchronouslyWithCompletionHandler:^(void) 
    {
    dispatch_async(dispatch_get_main_queue(), ^{
         NSLog(@"Export Complete %d %@", exportSession.status, exportSession.error);
            });

     }];

私は個人的にブロックからデリゲートを呼び出しますが、単純なログステートメントはこの例のためのものであり、あなたはすでにそれを知っていると思います:)

于 2012-03-01T21:20:10.477 に答える
1

私も同じ問題を抱えていました。.M4A何時間ものデバッグの後、オーディオ ファイルの拡張子がすべて大文字であることがわかりました。文字を小文字にすると問題が解決します

于 2015-03-16T11:10:25.943 に答える