【问题标题】:AudioPlayerAgent Streaming - Stop doesnt delete the bufferAudioPlayerAgent Streaming - 停止不会删除缓冲区
【发布时间】:2012-02-01 15:14:18
【问题描述】:

我目前正在开发一个网络广播应用程序,如果用户按下暂停/停止键,流应该会停止,当然,当他再次按下播放时,流应该会继续。

我遇到的问题是, 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();
    }

【问题讨论】:

    标签: c# windows-phone-7 audio-player background-agents


    【解决方案1】:

    好吧.. 只是让你们知道,这就是我所做的。我不知道是否有更好的方法,但这对我有用:

            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;
    

    【讨论】:

    • +1 用于回发。这肯定会在某些时候对我有所帮助。已收藏。
    【解决方案2】:

    停止时放弃所有内容,并在重新开始播放时重新更新,怎么样?您正在使用的功能似乎更适合暂停静态内容。暂停对收音机没有多大意义。

    【讨论】:

    • 一旦您将轨道或任何设置为空,AudioPlayerAgent 就会自行关闭。而且因为这是一个后台任务,在应用关闭时也会运行,所以我无法重新启动它。
    • 哎哟。我会感兴趣地关注这个,因为我们可能会在几个月内写出同样的内容。
    猜你喜欢
    • 1970-01-01
    • 2013-01-11
    • 2015-10-29
    • 1970-01-01
    • 2016-05-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-03
    相关资源
    最近更新 更多