0

MPMediaPickerControllerを使用して、ユーザーがデバイスのライブラリからビデオや曲を選択できるようにしています。initWithMediaTypes:MPMediaTypeAnyピッカーの初期化でこれを許可します。ユーザーは、エクスポートが行われた後、アプリ内で曲またはビデオを再生できます。コア機能にストリップした後の私の映画エクスポートコードは次のとおりです。

- (void)mediaPicker:(MPMediaPickerController*)mediaPicker didPickMediaItems:(MPMediaItemCollection*)mediaItemCollection {
    AVAssetExportSession *exportSession;
    NSString *filePath;
    NSURL *fileUrl;

    for (MPMediaItem *item in mediaItemCollection.items) {
        NSURL *assetUrl = [item valueForProperty:MPMediaItemPropertyAssetURL];
        AVAsset *currAsset = [AVAsset assetWithURL:assetUrl];
        exportSession = [[AVAssetExportSession alloc] initWithAsset:[AVAsset assetWithURL:assetUrl] presetName:AVAssetExportPresetHighestQuality];
        exportSession.shouldOptimizeForNetworkUse = YES;
        exportSession.outputFileType = AVFileTypeQuickTimeMovie;
        filePath = [title stringByAppendingString:@".mov"];
        fileUrl = [NSURL fileURLWithPath:[[NSFileManager documentDirectory] stringByAppendingPathComponent:filePath]];

        exportSession.outputURL = fileUrl;
        dispatch_group_enter(dispatchGroup);

        [exportSession exportAsynchronouslyWithCompletionHandler:^{
            // success
        }
        dispatch_group_leave(dispatchGroup);
    }];
    }

この同様のコードは、オーディオの実行には問題なく機能しますが、ビデオの場合、ビデオのオーディオは再生されません。iTunesのほとんどのコンテンツは保護されており、エクスポートできないため、iPhoneで撮影した自家製のクイックビデオでテストしたいと思いました。ビデオを撮影し、iTunesにドラッグしました(正しく表示され、携帯電話のライブラリにエクスポートできるように、「ミュージックビデオ」にしました)。次に、同期して、テストのためにデバイスに送信しました。

アプリでは、ビデオはメディアピッカーに正常に表示され、エラーなしでエクスポートできます。ただし、アプリ内で再生すると、ビデオのみが再生され、オーディオは再生されません。他のソースからインポートした他のビデオは、ビデオのオーディオを再生するために正常に機能するため、プレーヤー自体であるとは思いません。

メディアピッカーからのこの種のエクスポートからオーディオが検出されない理由について、ここで見逃している可能性があるものはありますか?この問題についてご協力いただきありがとうございます。

4

1 に答える 1

1

これが理想的な解決策であるかどうかはわかりませんが、この問題を回避する唯一の方法は、PresetPassthroughが設定されたm4v形式を強制するように変更することでした。すなわち:

exportSession = [[AVAssetExportSession alloc] initWithAsset:[AVAsset assetWithURL:assetUrl] presetName:AVAssetExportPresetPassthrough];
exportSession.shouldOptimizeForNetworkUse = YES;
exportSession.outputFileType = AVFileTypeAppleM4V;
filePath = [title stringByAppendingString:@".m4v"];

この方法でローカルにインポートされたビデオでは、変更を加えた後、オーディオとビデオが正常に機能するようです。

于 2013-03-28T21:12:09.603 に答える