이 부분에 대해서 방법을 찾고 있는데 현재는 미디어 플레이어의 rate를 설정하는 것처럼 실버라이트2에선 재생 속도를 변경하는 방법이 없는 것 같습니다. 꽁수로 재생시간을 조금씩 더 해보았는데 자연스럽지 않고 소리가 끊기면서 나와 옛날 비디오의 빨리감기를 보는 정도까지만 가능했습니다. 아래는 관련부분 소스입니다.

static double TIMER_INTERVAL = 300;
static double MOVE_MSECONDS = 10000;
static int MOVE_FF = 1;
static int MOVE_RW = -1;

public Page()
{
   
    /** 타이머 설정 */
    timerStoryboard.BeginTime = TimeSpan.Zero;
    timerStoryboard.Duration = new Duration(TimeSpan.FromMilliseconds(TIMER_INTERVAL));
    timerStoryboard.Completed += new EventHandler(timerCompleted);
}

private void ChangeSpeed()
{
    if (playSpeed == 0)
        return;

    double currentPos = mediaPlayer.Position.TotalMilliseconds;
    double newPos = currentPos + (MOVE_MSECONDS * playSpeed);
    double maxPos = mediaPlayer.NaturalDuration.TimeSpan.TotalMilliseconds;
    double downloadPos = Math.Floor(mediaPlayer.DownloadProgress * maxPos);

    mediaPlayer.Pause();
    
    /* 유효범위 검사 */
    if (newPos >= 0 && newPos < downloadPos)
    {
        mediaPlayer.Position = TimeSpan.FromMilliseconds(newPos);
        mediaPlayer.Play();

        timerStoryboard.Begin();
    }
    else
    {
        playSpeed = 0;
    }
}

private void timerCompleted(object sender, EventArgs e)
{
    ChangeSpeed();
}

/** 뒤로보기 클릭 */
private void btnRewind_MouseLeftButtonUp(object sender, MouseButtonEventArgs e)
{
    playSpeed = MOVE_RW;
    ChangeSpeed();
}

/** 빨리보기 클릭 */
private void btnFast_MouseLeftButtonUp(object sender, MouseButtonEventArgs e)
{
    playSpeed = MOVE_FF;
    ChangeSpeed();
}

ChangeSpeed()에서 mediaPlayer.Pause()와 mediaPlayer.Play()를 하지않고 빨리보기를 하면  어느정도 괜찮게 보이지만 역시 소리 부분은 부드럽게 재생이 안되네요. Position을 다시 설정하는 부분에 부하가 있어 밀리세컨드 단위의 세세한 제어는 힘든 것 같습니다. 또한 Progressive Download가 아닌 Streaming일 경우에는 저 방법으로는 대책이 없습니다. 저만 방법을 모르고 삽질중이라는 불길한 예감도 듭니다. ㅠㅠ

'기타' 카테고리의 다른 글

아이폰 3GS  (2) 2009.09.17
블로그를 또 다시 이전했습니다.  (4) 2009.05.11
실버라이트2 동영상 재생 속도  (0) 2009.02.13
sqlite3 둘러보기  (3) 2009.02.02
버그추적 시스템 Mantis 설치  (6) 2009.01.07
애플스크립트(AppleScript) 둘러보기  (4) 2009.01.06