はコードの下に参照してください:あなたは以下のサンプルコードを参照して、ストリーミングプレーヤーを実装しようとした場合、このコードは、Appleのサンプルコード
AVPlayerDemo
の一部です。
StitchedStreamPlayer
も、正確にスクラブへの完全な実装は、以下のようなスライダーを使用しています。 素晴らしいビデオプレーヤーはUXを検討する必要があるためです。あなたが知っているように、デフォルトのビデオアプリを実行しているスライダーを下にドラッグすると微調整が必要になります。
CPSlider | (代わりに一時停止/ seekTimeの[AVPlayer setRate]を使用して)bitmapdata.comの答えとともにOBSlider
/* The user is dragging the movie controller thumb to scrub through the movie. */
- (IBAction)beginScrubbing:(id)sender
{
mRestoreAfterScrubbingRate = [mPlayer rate];
[mPlayer setRate:0.f];
/* Remove previous timer. */
[self removePlayerTimeObserver];
}
/* Set the player current time to match the scrubber position. */
- (IBAction)scrub:(id)sender
{
if ([sender isKindOfClass:[UISlider class]])
{
UISlider* slider = sender;
CMTime playerDuration = [self playerItemDuration];
if (CMTIME_IS_INVALID(playerDuration)) {
return;
}
double duration = CMTimeGetSeconds(playerDuration);
if (isfinite(duration))
{
float minValue = [slider minimumValue];
float maxValue = [slider maximumValue];
float value = [slider value];
double time = duration * (value - minValue)/(maxValue - minValue);
[mPlayer seekToTime:CMTimeMakeWithSeconds(time, NSEC_PER_SEC)];
}
}
}
/* The user has released the movie thumb control to stop scrubbing through the movie. */
- (IBAction)endScrubbing:(id)sender
{
if (!mTimeObserver)
{
CMTime playerDuration = [self playerItemDuration];
if (CMTIME_IS_INVALID(playerDuration))
{
return;
}
double duration = CMTimeGetSeconds(playerDuration);
if (isfinite(duration))
{
CGFloat width = CGRectGetWidth([mScrubber bounds]);
double tolerance = 0.5f * duration/width;
mTimeObserver = [[mPlayer addPeriodicTimeObserverForInterval:CMTimeMakeWithSeconds(tolerance, NSEC_PER_SEC) queue:NULL usingBlock:
^(CMTime time)
{
[self syncScrubber];
}] retain];
}
}
if (mRestoreAfterScrubbingRate)
{
[mPlayer setRate:mRestoreAfterScrubbingRate];
mRestoreAfterScrubbingRate = 0.f;
}
}
あなたはこのコードが私のために作ったビュー/コントローラの外ではるかに優れていることを知っています。スクラバーコードだけを試してみたことはありませんでした。 –
私はそれを試みます。ありがとう! – headkit