3

Silverlight でカスタム メディア プレーヤーを作成しようとしています。私はプログレスバーに取り組んでいます。進行状況バーに、現在のダウンロードの進行状況と、再生中の現在の位置を表示したいと考えてMediaElementいます。

これを行うには、ダウンロードの進行状況を表示するプログレス バーと、現在の位置を表示するスライダーをオーバーレイします。

両方の値を 100 分の 1 パーセンテージとして設定しました。

例えば:

ProgressBar.Value = MediaElement.DownloadProgress;
Slider.Value = (MediaElement.Position.TotalMilliseconds) / (MediaElement.NaturalDuration.TimeSpan.TotalMilliseconds);

問題は、Slider.Value が ProgressBar.Value よりも大きくなることです。これはどのように可能ですか?ダウンロードした動画よりも離れた位置で動画を再生するにはどうすればよいですか?

これらを適切に同期させる方法に関するアドバイスはありますか?

ありがとう。

4

1 に答える 1

4

これは、ビデオ ストリーム圧縮アルゴリズムが時間に比例するバイト カウントにならないために発生する可能性があります。たとえば、60 分間実行される 300MB のビデオ ファイルを例にとると、ファイルの 30 分後に 150MB のポイントになると自動的には従いません。

ビデオの最初の部分が比較的「静か」な場合、圧縮率は高くなる可能性がありますが、後半のビジーなセクションはあまり圧縮されない可能性があります。その結果、ファイル サイズのごく一部しかダウンロードされていなくても、全体の再生時間のかなりの部分を再生している可能性があります。

編集

では、それらを同期させるにはどうすればよいでしょうか。

スライダーをダウンロードの進行状況または時間のいずれかの最小値に制限することで、それをごまかします.

Slider.Value = Math.Min(mediaelement.Position.TotalMilliseconds / mediaelement.NaturalDuration.TimeSpan.TotalMilliseconds, mediaelement.downloadprogress);
于 2010-07-08T21:30:12.267 に答える