2010-12-04 11 views
3

オーディオトラックが付いたビデオフォーマットを別のファイルにデコードしています。スペックごとに、1/75秒ごとに1フレームのビデオをレンダリングします。また、ビデオファイルの長さは、オーディオトラックの長さと同じです。Audio Queue Servicesでオーディオを同期するための提案?

オーディオキューサービス(私は、私が遭遇している状況のような正確なタイミング制御が必要な状況があると考えていたので、これを選択しました)でオーディオを再生しています。それは大きなAPIであり、アップルのプログラミングガイドのサンプルコードをずっと進歩させていません(ただし、ObjC APIをよりうまく実装しています)。

理想的な状況では、基本的な再生設定で問題なく動作します。ビデオとオーディオは同期したままで、両者は同時に終了します(私自身の違いを伝える能力の範囲内で)。しかし、パフォーマンスの悪影響(または私がLeaks Instrumentや何かをつける)が起これば、彼らはすぐに同期が外れます。

これは私がこれまで何かを書いた初めてのことです:私は、音や映像に関する以前の経験はありません。 Audio Queue Servicesの経験はありません。だから私はここからどこに行くのか分からない。

このようなことをしましたか?あなたはいくつかのアドバイスやヒントやトリックを提供していますか?私が読む必要があるいくつかの基本的な文書がありますか?どんな助けでも大歓迎です。

+0

あなたはビデオを再生するために何を使用していますか? – sbooth

+0

私はCGBitmapContextCreateを使ってCGContextRefを作成し、そのデータストリームにピクセルを書き込んで、CGImageRefに変換してCALayerに描画しています。効率を上げるために、私はフレームごとに変化するピクセルのみを更新します。幸いにも、それは非常に低品質のビデオフォーマットです。 –

+0

@JamesWilliams私はオーディオキューサービスを使用して同期しようと別にビデオをレンダリングし、オーディオデータを送信すると同様の種類のアプリケーションを開発していますが、結果も達成されましたが、サウンドで不具合を起こし、オーディオとビデオを同期させるのにグリッチが発生するオーディオを再生するプログラミングのスニペットは非常にappriciable ...またはこれ以上の考えが役に立つだろう –

答えて

2

まず、このようなコードは実際にはコード化されていないので、私はヒップから撃っています。また、私はHALとAUHALでかなりの量のプログラミングを行ってきましたが、AudioQueueでは決して使っていませんでしたので、私のアプローチはAQを使用する最良の方法ではないかもしれません。

明らかに、最初に決定するのは、オーディオをビデオに、ビデオをオーディオに同期するかどうかです。質問から、あなたはビデオがマスターになり、オーディオがそれに同期するはずだと判断したようです。

私は、レンダリングされたビデオのフレーム数とフレームレートを追跡することでこれにアプローチします。次に、オーディオバッファをエンキューするとき、startTimeに単調に増加する値を渡すのではなく、ビデオで観察される不連続点に一致するようにバッファの開始時間を調整します。あなたのオーディオがどこから来ているのか、それをエンキューしているのか正確にはわからないので、少し曖昧ですが、その原則ははっきりしています。

+0

AudioQueueはかなり低いレベルだったので、私はそれを選んだ。しかし、おそらく低レベルではないかもしれません。あなたはHALとAUHALにもっと深く入ることをお勧めしますか?その文書がどこにあるのか知っていますか? /バッファをオフセットするために、私は自分がやっていることを本当に知っていないし、AudioQueue関数はあなたのためにそれをたくさん行うので、それは厳しいものになる可能性があります。 /それはおそらく唯一の答えです。おそらく、より低いレベルへのジャンプが本当に助けになるでしょう。 –

+0

あなたがする必要がない限り、HALを直接使用することはお勧めしません。限り、ドキュメントが行く - それのほとんどは、ヘッダーファイルにありますが、それはせいぜい疎です。 Audio Unitに慣れていれば、AUHALはそれほど悪くはありません。どちらの場合でも、学習曲線は急峻です! – sbooth

+0

オーディオバッファーを探すためのリソースが見つかりました。だから私はあなたがそれに対して持っている答えを適応させるべきだと思う。しかし、もしそうでなければ、私はAudio Unitsについて勉強しなければならないでしょう。いずれにせよ、これは私がそういった秘密の問題のためにそうする可能性が高い最高の答えだと思います。助けてくれてありがとう! –

関連する問題