Чего я хочу добиться:
- Я хочу начать воспроизведение аудио из потока HTTP и / или AAC в приложении WP7
- Я хочу начать воспроизведение сспецифический экземпляр PhoneApplicationPage, но по-прежнему допускает переход на другие страницы, сохраняя при этом воспроизведение без какого-либо прерывания - т.е. я хочу, чтобы воспроизведение было «областью применения»
- Я хочу иметь возможность «искать» в моих медиафайлах
- Воспроизведение продолжается, пока телефон заблокирован
Что я пробовал:
MediaElement:
Microsoft.Xna.Framework.MediaPlayer:
Microsoft Silverlight Media Framework:
- http://smf.codeplex.com/
- Мой любимый вариант, поскольку он кажется очень исчерпывающим
- Загруженные сборки Silverlight Media Framework 2.3, специфичные для WP7: http://smf.codeplex.com/releases/view/57991#DownloadId=190196
- Я знаю, что это хак,но для того, чтобы что-то работало, в приведенном ниже коде «SMFPlayer» является статическим и добавляется к каждой компоновке страницы при навигации.
- Если «SMFPlayer» не принадлежит страницепри вызове Play () звук не воспроизводится, несмотря на то, что не выдается никаких исключений.
- Воспроизведение по-прежнему сбрасывается между переходами страниц ...
- Код:
using System;
using System.Diagnostics;
using Microsoft.Phone.Controls;
using Microsoft.SilverlightMediaFramework.Core;
using Microsoft.SilverlightMediaFramework.Core.Media;
using Microsoft.SilverlightMediaFramework.Plugins.Primitives;
namespace WindowsPhoneApplication1
{
public partial class MainPage : PhoneApplicationPage
{
public static readonly SMFPlayer Player = new SMFPlayer();
static MainPage()
{
Player.VolumeLevel = 1.0f;
Player.Playlist.Add(new PlaylistItem {MediaSource = new Uri("http://smf.vertigo.com/videos/wildlife.wmv", UriKind.Absolute)});
Player.LogLevel = LogLevel.All;
Player.LogEntryReceived += PlayerLogEntryReceived;
}
// Constructor
public MainPage()
{
InitializeComponent();
}
protected override void OnNavigatedTo(System.Windows.Navigation.NavigationEventArgs e)
{
base.OnNavigatedTo(e);
LayoutRoot.Children.Add(Player);
}
protected override void OnNavigatingFrom(System.Windows.Navigation.NavigatingCancelEventArgs e)
{
base.OnNavigatingFrom(e);
LayoutRoot.Children.Remove(Player);
}
private static void PlayerLogEntryReceived(object sender, CustomEventArgs<LogEntry> e)
{
Debug.WriteLine(e.Value.Severity + e.Value.Message + e.Value.Type);
}
private void button1_Click(object sender, System.Windows.RoutedEventArgs e)
{
this.NavigationService.Navigate(new Uri("/Page1.xaml", UriKind.RelativeOrAbsolute));
}
}
}
Кто-нибудь знает, как я могу удовлетворить свои требования?Пример кода?
С архитектурной точки зрения мне действительно нужна медиа-служба, на которую я могу отправлять потоковые URL-адреса, не заботясь о том, какая страница отображается в данный момент.