2011-10-10 15 views
5

現在、アンドロイド用の動画プレーヤーを開発中です。現在の字幕を表示するシンプルなテキストビューを作成しました。字幕付きのAndroidネイティブ動画プレーヤー

問題は次のとおりです。 MediaPlayer getCurrentPosition()メソッドは、ほんの数秒で時間を与えます。字幕と映画を正しく同期させるには、その値がミリ秒単位で必要です。

getCurrentPositionは私にミリ秒単位の時間を与えるはずですが、秒* 1000(すべての数字は "000"で終わります)の時間を与えます。

  1. あなたはこれを行う良い方法を知っていますか?
  2. どのように時間をミリ秒単位で取得しますか?
  3. 正確に秒(000ms)でイベントを生成することもできます。

+0

; onFinishのDurationタイマーが終了した後
6)()あなたは2

厥それはSTEPに保存されたものをmillisecondLeft時間の古いタイマーを開始することができます私はリンクを共有しますか? –

答えて

3

誰にでも必要な場合は、私の解決策を行いました。

私は字幕モジュールを開発しました。 正確なミリ秒を得るために、システムとプレーヤーのタイマー用のシンクロナイザーを作った。

ビデオ再生の20秒ごとに私は、この手順でください:

  1. (Sまし秒)現在の秒のメディアプレーヤを掲載した結果は、S + 1(S0)になるまで、現在の秒のメディアプレーヤを掲載し

    :私は現在のムービーミリ秒をしたい場合
  2. は、今、その時間(M0)

ためのシステム時刻(ミリ秒)を取得します

  1. (millisecons)(M1)
  2. 作品リアルタイムで現在のシステム時刻を取得します:簡単S0 +(M1-M0)

、および同期字幕が生じ;)

+2

は、コードを共有することは可能です。私は同様の要件に取り組んでいます。どんな助けもありがたいです – maxwells

+0

残念ながら、コードは著作権があります。私はそれを所有していません:/ – inversus

+0

しかし、あなたはそれの部分を共有することができます.... – user1767754

0

1)
2)CounterTimerクラスを使用してplayer.getDuration()に設定し、チックメソッド(各間隔のチックで呼ばれます)で選択した間隔を設定します。プレイヤーの現在の位置を取得しますplayer.getCurrentPosition();を使用します。 (これはミリ秒単位で時間を返します)。また、ミリ秒を保管して保管することを忘れないでください。
3)あなたの望む形式に変換し、それを時間ハッシュマップまたはあなたが撮影した配列にマッチさせます。
4)プレーヤーにオーバーレイされているTextViewを適切なテキストで更新します。
5)継続期間のタイマーをキャンセルします(継続時間の新しいタイマーを実装することができます)。 uはvideo.Canに字幕を追加することを学んだところから)

+0

返信用のTnks。私のplayer.getCurrentPosition()は秒で値を返していました:53000ms、54000ms。それを使って実際のmsを得ることは不可能でした。 – inversus

関連する問題