ハードウェアデコードを使用しないようにシステムに指示できますが、その逆はおそらくできません。
使用できるハードウェアコーデックを決定するための定数。
enum {
kAudioFormatProperty_HardwareCodecCapabilities = 'hwcc',
};
定数
kAudioFormatProperty_HardwareCodecCapabilities
アプリケーションが指定された順序でコーデックの使用を開始した場合に使用できる、指定されたリストのコーデックの数を示すUInt32値。パラメータを、 1つまたは複数のオーディオコーデックのセットを記述する構造体inSpecifier
の配列に設定します。AudioClassDescription
プロパティ値がパラメータの配列のサイズと同じである場合inSpecifier
、指定されたすべてのコーデックを使用できます。iOS3.0以降で利用できます。AudioFormat.hで宣言されています。ディスカッションこのプロパティを使用して、目的のコーデックのセットを同時にインスタンス化できるかどうかを判断します。
ハードウェアベースのコーデックは、Audio Queue Servicesを使用して、またはAudioQueueServicesを使用するAVFoundationなどのインターフェイスを使用して再生または録音する場合にのみ使用できます。特に、OpenALで、またはI / Oオーディオユニットを使用している場合は、ハードウェアベースのオーディオコーデックを使用できません。
ハードウェアコーデックの存在を説明する場合、システムは現在のオーディオセッションカテゴリを考慮しません。一部のカテゴリでは、ハードウェアコーデックの使用が許可されていません。ハードウェアが指定されたコーデックの組み合わせをサポートしているかどうかにのみ基づいて、この定数によって一連のハードウェアコーデックが使用可能であると見なされます。
一部のコーデックは、ハードウェアとソフトウェアの両方の実装で使用できる場合があります。kAudioFormatProperty_Encoders
および定数を使用してkAudioFormatProperty_Decoders
、特定のコーデックが存在するかどうか、およびそれがハードウェアベースかソフトウェアベースかを判別します。
ソフトウェアベースのコーデックはいつでもインスタンス化できるため、ソフトウェアのエンコードまたはデコードを使用するときにこの定数を使用する必要はありません。
次のコード例は、ハードウェアAACエンコーダーとハードウェアAACデコーダーが優先度の高い順に使用可能かどうかを確認する方法を示しています。
AudioClassDescription requestedCodecs[2] = {
{
kAudioEncoderComponentType,
kAudioFormatAAC,
kAppleHardwareAudioCodecManufacturer
},
{
kAudioDecoderComponentType,
kAudioFormatAAC,
kAppleHardwareAudioCodecManufacturer
}
};
UInt32 successfulCodecs = 0;
size = sizeof (successfulCodecs);
OSStatus result = AudioFormatGetProperty (
kAudioFormatProperty_HardwareCodecCapabilities,
requestedCodecs,
sizeof (requestedCodecs),
&size,
&successfulCodecs
);
switch (successfulCodecs) {
case 0:
// aac hardware encoder is unavailable. aac hardware decoder availability
// is unknown; could ask again for only aac hardware decoding
case 1:
// aac hardware encoder is available but, while using it, no hardware
// decoder is available.
case 2:
// hardware encoder and decoder are available simultaneously
}
https://github.com/mooncatventures-group/sampleDecoder
ただし、オーディオキューよりもaudioUnitsを使用したほうがよいでしょう。