質問

数週間前、私はAvassetWriterで抱えていた問題に関してこのスレッドを投稿しました。 avassetwriterの悲惨

さらなる研究は、Avashioplayerまたは実際にはすべてのオーディオシステムでオーディオを再生しながら、AvassetWriterを使用した競合につながるようです。私もオープンで試しました。

これが背景です:

  • avassetwriterを使用して、画像または画像のセットからビデオにフレームを書き込み、[Avaudioplayer Play]が呼ばれるまで正常に機能します。

  • これは、シムではなく、デバイスでのみ発生します。

  • エラーは、cvpixelbufferpoolcreatepixelbufferからピクセルバッファーを作成しようとするときに発生します。

  • オーディオの再生が開始されると、avassetwriterputpixelbufferadaptor.pixelbufferpoolが存在する前に存在していました。

ここから代表プロジェクトをダウンロードできます: http://www.mediafire.com/?5k7kqyvtbfdgdgv

Avaudioplayer Playをコメントすると、デバイスで動作します。

どんな手がかりも感謝しています。

役に立ちましたか?

解決

この問題の解決策を見つけました。

AvaudioplayerとAvassetWriterを正しく一緒に動作させたい場合は、「混合可能」のオーディオセッションカテゴリを持っている必要があります。

AvaudioSessionCategoryAmbientのように混合可能なカテゴリを使用できます。

ただし、AvaudioSessionCategoryPlayandRecordを使用する必要がありました。

これを実装することにより、任意のカテゴリを混合可能に設定できます。

OSStatus propertySetError = 0;

UInt32 allowMixing = true;

propertySetError = AudioSessionSetProperty (
                       kAudioSessionProperty_OverrideCategoryMixWithOthers,  // 1
                       sizeof (allowMixing),                                 // 2
                       &allowMixing                                          // 3
                   );

他のヒント

この上の答えは完全です。うまくいきません。代わりにこれを行います

// Setup to be able to record global sounds (preexisting app sounds)
    NSError *sessionError = nil;
    if ([[AVAudioSession sharedInstance] respondsToSelector:@selector(setCategory:withOptions:error:)])
        [[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayAndRecord withOptions:AVAudioSessionCategoryOptionDuckOthers error:&sessionError];
    else
        [[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayAndRecord error:&sessionError];

    // Set the audio session to be active
    [[AVAudioSession sharedInstance] setActive:YES error:&sessionError];

//then call your asset writer 
movieWriter = [[AVAssetWriter alloc] initWithMovieURL:movieURL size:CGSizeMake(480.0, 640.0)];
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top