2012-02-01 4 views
1

В настоящее время я разрабатываю приложение для веб-радио, и если пользователь нажимает клавишу паузы/остановки, поток должен останавливаться и, конечно, когда он снова нажимает кнопку воспроизведения, поток должен продолжаться.AudioPlayerAgent Streaming - Stop не удаляет буфер

Проблема у меня есть, что player.Stop() только останавливает дорожку. Если вы снова нажмете «Продолжить», первые 5 секунд не будут прочитаны из потока, но из буфера, тогда он не воспроизводит звук для нескольких секунд, а затем начинает читать из потока снова.

Это роковое для приложения для веб-радио. Как я могу это исправить? Или как я могу удалить буфер?

protected override void OnPlayStateChanged(BackgroundAudioPlayer player, AudioTrack track, PlayState playState) 
    { 
     switch (playState) 
     { 
      case PlayState.TrackReady: 
       player.Play(); 
       break; 
      case PlayState.Stopped: 
       player.Stop(); 
       break; 
      case PlayState.Paused: 
       player.Stop(); 
       break; 
     } 

     NotifyComplete(); 
    } 

ответ

2

Хорошо, просто, чтобы вы, ребята, знали, это то, что я сделал. Я не знаю, есть ли какой-нибудь лучший способ, но это работает для меня:

 protected override void OnPlayStateChanged(BackgroundAudioPlayer player, AudioTrack track, PlayState playState) 
    { 
     switch (playState) 
     { 
      case PlayState.Stopped: 
       track.BeginEdit(); 
       track.Tag = track.Source.OriginalString; 
       track.Source = new Uri("http://127.0.0.1", UriKind.Absolute); 
       track.EndEdit(); 

       player.Track = track; 
       break; 


     protected override void OnUserAction(BackgroundAudioPlayer player, AudioTrack track, UserAction action, object param) 
    { 
     switch (action) 
     { 
      case UserAction.Play: 
       if (player.PlayerState != PlayState.Playing) 
       { 
        try 
        { 
         player.Play(); 
        } 
        catch(Exception) 
        { 
         track.BeginEdit(); 
         track.Source = new Uri(player.Track.Tag, UriKind.Absolute); 
         track.EndEdit(); 

         player.Track = track; 
         player.Play(); 
        } 
       } 
       break; 
      case UserAction.Stop: 
      case UserAction.Pause: 
       if (player.Track.Source.OriginalString != "http://127.0.0.1/") 
       { 
        player.Stop(); 
       } 
       break; 
+0

+1 для отправки назад. Это наверняка будет полезно для меня в какой-то момент. Избранные. – spender

0

Как насчет того, чтобы все, когда вы остановились, и снова открывали его при возобновлении воспроизведения? Кажется, что функциональность, которую вы используете, больше подходит для приостановки статического контента. Пауза не имеет большого смысла с радио.

+1

Как только вы установили дорожку или что-то ненужное, AudioPlayerAgent закрывается. И поскольку это фоновая задача, которая также запускается, когда приложение закрыто, я не могу его перезапустить. – Martin

+0

Ouch. Я буду следить за этим с интересом, поскольку мы, вероятно, будем писать то же самое через несколько месяцев. – spender