「P-FAAC1」の編集履歴(バックアップ)一覧はこちら

P-FAAC1」(2006/03/26 (日) 13:27:25) の最新版変更点

追加された行は緑色になります。

削除された行は赤色になります。

*How to use libfaac **libfaac概要 **open libfaacコーデックをオープンするのに必要な情報は、入力音声のサンプリングレートと音声のチャンネル数(ステレオなら2)である。また、オープンするときにセットされる、コーデックが扱うサンプル数 (maxInputSamples)も後々重要になってくる。 _hEncoder = faacEncOpen(sampleRate, // 入力音声のサンプルレート numChannels, // 入力音声のチャンネル数 &maxInputSamples, // コーデックに入力可能な最大サンプル数 &maxOutputBytes); // なんだっけ **入力可能サンプル数 エンコードを行う前に理解しておかなければならない固有の制限がある。それは、一度にエンコードできるサンプル数に上限があるという決まりである。ちょうど映像が720x480ピクセルで1枚と同じような概念だ。 この入力可能サンプル数は、faacEncOpen()で、第3引数ポインタにセットされた数が上限である。この制限を超えた場合どうなるか?最大を超えるのであるから、超えた分のサンプル、つまり音声データが欠落する。 mpeg1 layer2などの音声では、デコードすると簡単にこの最大値を超えるため特殊な処理が必要となる。つまり、マックスサンプル数を入力し、溢れた分はキューなどで処理をし、次回のエンコードの時にうまくハンドルする必要がある。 ポイントは、最大サンプル数と、FIFOバッファリングだ。 **encode libx264のエンコードとは異なり、コーデックのエンコード関数を1回呼び出すことでエンコードが簡潔される。 bytesWritten = faacEncEncode(_hEncoder, inputWaveRawData, inputSamples, encodedData, maxInputSamples); **mp4 header libfaacを利用して得られたAAC音声データをMP4コンテナに格納するためには、映像と同様にヘッダ情報をMP4ファイルに書き込む必要がある。libfaac(AAC)のこの情報は、ASCと呼ばれる。MP4ファイルに書き込む際に必要となる情報は、このASCとASC配列の長さの2つである。 通常このASC情報は、libfaacが提供する関数で得ることが出来る。 unsigned char* asc; //ASC情報が書き込まれる(malloc必要なし) int ascLength; //ASC情報が何バイトかが書き込まれる faacEncGetDecoderSpecificInfo(hEncoder, &asc, &ascLength); **quality setting とりあえず、 cfgEncoder->mpegVersion = MPEG4; // MPEG4形式 cfgEncoder->aacObjectType = LOW; // Low Comp cfgEncoder->allowMidside = 0; // 1にするとおかしな結果になる
*How to use libfaac **libfaac概要 **open libfaacコーデックをオープンするのに必要な情報は、入力音声のサンプリングレートと音声のチャンネル数(ステレオなら2)である。また、オープンするときにセットされる、コーデックが扱うサンプル数 (maxInputSamples)も後々重要になってくる。 _hEncoder = faacEncOpen(sampleRate, // 入力音声のサンプルレート numChannels, // 入力音声のチャンネル数 &maxInputSamples, // コーデックに入力可能な最大サンプル数 &maxOutputBytes); // なんだっけ **入力可能サンプル数 エンコードを行う前に理解しておかなければならない固有の制限がある。それは、一度にエンコードできるサンプル数に上限があるという決まりである。ちょうど映像が720x480ピクセルで1枚と同じような概念だ。 この入力可能サンプル数は、faacEncOpen()で、第3引数ポインタにセットされた数が上限である。この制限を超えた場合どうなるか?最大を超えるのであるから、超えた分のサンプル、つまり音声データが欠落する。 mpeg1 layer2などの音声では、デコードすると簡単にこの最大値を超えるため特殊な処理が必要となる。つまり、マックスサンプル数を入力し、溢れた分はキューなどで処理をし、次回のエンコードの時にうまくハンドルする必要がある。 ポイントは、最大サンプル数と、FIFOバッファリングだ。 **encode libx264のエンコードとは異なり、コーデックのエンコード関数を1回呼び出すことで1フレーム分のエンコードが完結する。入力されるサンプル数を第3引数で指定することができるが、うまくいかない。(というかそのせいでLPCMのデコードができなかった) そこで、この値は常に2048のmaxInputSamplesに指定することで(当然FIFOの実装が必要)、不慮の問題を回避することをお勧めする。 bytesWritten = faacEncEncode(_hEncoder, inputWaveRawData, inputSamples, encodedData, maxInputSamples); **mp4 header libfaacを利用して得られたAAC音声データをMP4コンテナに格納するためには、映像と同様にヘッダ情報をMP4ファイルに書き込む必要がある。libfaac(AAC)のこの情報は、ASCと呼ばれる。MP4ファイルに書き込む際に必要となる情報は、このASCとASC配列の長さの2つである。 通常このASC情報は、libfaacが提供する関数で得ることが出来る。 unsigned char* asc; //ASC情報が書き込まれる(malloc必要なし) int ascLength; //ASC情報が何バイトかが書き込まれる faacEncGetDecoderSpecificInfo(hEncoder, &asc, &ascLength); **quality setting とりあえず、 cfgEncoder->mpegVersion = MPEG4; // MPEG4形式 cfgEncoder->aacObjectType = LOW; // Low Comp cfgEncoder->allowMidside = 0; // 1にするとおかしな結果になる

表示オプション

横に並べて表示:
変化行の前後のみ表示:
目安箱バナー