1

私の iPhone アプリは、FFMPEG を使用してオーディオ ファイルを再生します。

次のように、再生中のオーディオから(ユーザーに表示するための)経過時間(マイクロ秒から変換した後の分と秒)を取得しています:

AudioTimeStamp currentTimeStamp;
AudioQueueGetCurrentTime (audioQueue, NULL, &currentTimeStamp, NULL);

getFFMPEGtime = currentTimeStamp.mSampleTime/self.basicAudioDescription.mSampleRate;

self.currentAudioTime = [NSString stringWithFormat: @"%02d:%02d",
                            (int) getFFMPEGtime / (int)60000000,
                            (int) ((getFFMPEGtime % 60000000)/1000000)];

すべて正常に動作しますが、曲の別の部分を再生するために前後にスクラブすると、現在の位置に関係なく、経過時間が 0 に戻ります。タイマーは常にゼロになります。

古い時間と新しい時間を追跡するために、おそらく別の時計を構築したり、別のコールバック関数を実装したりするなど、いくつかの計算を行う必要があることはわかっています...どのようにすればよいかわかりません。

私の質問は次のとおりです。

1)曲を前後に移動するときに経過時間を追跡し、時計が常にゼロに戻らないようにする最善の方法は何ですか?

2)この問題を解決するには、FFMPeg の機能を詳しく調べる必要がありますか?それとも、Objective-C と Cocoa Touch を使い続ける必要がありますか?

経験豊富なプログラマーからのアドバイス/アイデアが必要です。私は立ち往生しています。よろしくお願いします!

4

1 に答える 1

2

メディアの経過時間をユーザーに表示するためにこれを行っている場合(これは、フォーマットされた文字列に変換しているという事実が示唆しています)、代わりに、使用している再生システムに、考えている時間だけクエリを実行する必要があります。ファイルにあります。オーディオキューはメディアを完全に認識しないため、再生システムによって実行された作業を複製して、メディア時間をメディア時間にマッピングする必要があります。オーディオキューからのタイムスタンプは、A/V同期などの高精度時計のようなものです。

于 2011-05-31T15:03:39.353 に答える