UWP:清除音频流缓存
UWP: clear audio stream cache
我正在开发在线广播应用程序并使用 Microsoft background media sample 作为起点。我已将源设置为我的在线广播的 URI,但是当我开始在运行时更改频道时,它们会从与第一次相同的点开始播放。我认为音频以某种方式缓存。那么如何清除缓存或从实际时间开始播放所选频道而不是第一次启动?
如果您在 MyBackgroundAudioTask.cs 中设置播放列表 = null,然后重新创建播放列表,它会清除缓存并开始直播。这可能是一个笨拙的解决方案,但它似乎确实有效。
UpdatePlaylistMessageExtra UpdatePlaylistMessageExtra;
if (MessageService.TryParseMessage(e.Data, out UpdatePlaylistMessageExtra))
{
if (playbackList != null)
{
playbackList = null;
CreatePlaybackList(UpdatePlaylistMessageExtra.Songs); //Recreate to start from start and not cached stream
Debug.WriteLine("Playbacklist rebinded in BG");
BackgroundMediaPlayer.Current.AutoPlay = true;
}
return;
}
很简单,您只能通过 MediaPlaybackList class 使用媒体播放器进行操作,所以假设您想要切换到上一首曲目并且想要删除当前曲目的缓存,而不是使用 SkipToPrevious 方法
playbackList.CurrentItem.Source.Reset();
所以它看起来像这样
/// <summary>
/// Skip track and update UVC via SMTC
/// </summary>
private void SkipToPrevious()
{
smtc.PlaybackStatus = MediaPlaybackStatus.Changing;
playbackList.CurrentItem.Source.Reset();
playbackList.MovePrevious();
}
我正在开发在线广播应用程序并使用 Microsoft background media sample 作为起点。我已将源设置为我的在线广播的 URI,但是当我开始在运行时更改频道时,它们会从与第一次相同的点开始播放。我认为音频以某种方式缓存。那么如何清除缓存或从实际时间开始播放所选频道而不是第一次启动?
如果您在 MyBackgroundAudioTask.cs 中设置播放列表 = null,然后重新创建播放列表,它会清除缓存并开始直播。这可能是一个笨拙的解决方案,但它似乎确实有效。
UpdatePlaylistMessageExtra UpdatePlaylistMessageExtra;
if (MessageService.TryParseMessage(e.Data, out UpdatePlaylistMessageExtra))
{
if (playbackList != null)
{
playbackList = null;
CreatePlaybackList(UpdatePlaylistMessageExtra.Songs); //Recreate to start from start and not cached stream
Debug.WriteLine("Playbacklist rebinded in BG");
BackgroundMediaPlayer.Current.AutoPlay = true;
}
return;
}
很简单,您只能通过 MediaPlaybackList class 使用媒体播放器进行操作,所以假设您想要切换到上一首曲目并且想要删除当前曲目的缓存,而不是使用 SkipToPrevious 方法 playbackList.CurrentItem.Source.Reset();
所以它看起来像这样
/// <summary>
/// Skip track and update UVC via SMTC
/// </summary>
private void SkipToPrevious()
{
smtc.PlaybackStatus = MediaPlaybackStatus.Changing;
playbackList.CurrentItem.Source.Reset();
playbackList.MovePrevious();
}