2

AudioFileStream を使用して AAC 音楽をオンラインで再生します。ユーザーがシークしようとすると、シークする必要があるストリーム ファイルのオフセットを知るために AudioFileStreamSeek を呼び出す必要があります。AAC は VBR 音楽形式であるため、AudioFileStreamSeek なしではオフセットを知ることができません。

「この関数を呼び出した後、パーサーは、AudioFileStreamParseBytes 関数に渡される次のデータが、outAbsoluteByteOffset パラメーターで返されたバイト オフセットから始まると想定します。」文書は言います。

AudioFileStreamSeek を呼び出した後、シークする必要のあるデータがまだない場合はどうすればよいですか? 私にできる唯一のことは、シークせずにバイトの解析を続けることです。時々音楽で音が止まると思いますが、それはファイルの右オフセットで対象データに与える約束を破ったからだと思います。

OK 質問: 2:28 などのタイム スタンプをシークしたい場合、AudioFileStreamSeek を呼び出さずにターゲット ファイルのオフセットを取得するにはどうすればよいですか?

4

1 に答える 1

2

コンテナーのない生の AAC はシークできません。

あなたができる最善のことは、ニードルドロップです。ファイルの時間の長さがわかっていて、シークしたい時間がわかっている場合は、ファイルのバイトを比例して分割すると、それに近づくことができます。(コーデックはこのために少ししゃっくりするかもしれませんが、通常はそれ自体を再同期します。)

もう 1 つの一般的なオプションは、サーバー側でテキスト ファイルを作成するか、ファイル内のオフセットを提供する何かを作成することです。AAC を MP4 コンテナーにラップするだけで問題が解決するため、これはおそらく価値があるよりも多くの作業です。

于 2013-05-11T14:37:59.677 に答える