В этом уроке я создам простое приложение Media Player для воспроизведения различных видео (например, в формате .wmv). Я собираюсь использовать элемент управления MediaElement в качестве медиа-контейнера для игрока. Я также создам несколько кнопок для управления потоком видео (Play, Pause, Stop) и индикатор выполнения, показывающий текущий прогресс. В конце этого урока я покажу альтернативный способ воспроизведения медиапотока с помощью MediaPlayerLauncher.
Исходный код
Дополнительная информация
1. Создание нового проекта
Прежде всего вам нужно создать новый проект. Для этого откройте Visual Studio 2010 -> Файл -> Новый проект -> выберите там приложение Windows Phone, как показано на рисунке ниже.
2. Добавление значков в решение
Теперь нам нужно добавить три иконки для Media Player: значок воспроизведения, паузы и остановки в наш проект. Вы можете скачать иконки отсюда или создать свои собственные. Убедитесь, что свойство «Build Action» имеет значение « Content », а свойство «Copy to output directory» переключено на « Copy if newer ». Проверьте изображение ниже для лучшего понимания.
3. Изменение XAML: ориентация
В MainPage.xaml переключите атрибут SupportedOrientations элемента PhoneApplicationPage на PortraitOrLandscape .
SupportedOrientations="PortraitOrLandscape" Orientation="Portrait"
4. Изменение XAML: ContentGrid
В MainPage.xaml добавьте элемент управления MediaElement и индикатор выполнения в ContentGrid. Установите для свойства AutoPlay MediaElement значение true. Не забудьте добавить RowDefinitions в сетку, чтобы в будущем можно было автоматически изменять размеры элементов управления.
<Grid x:Name="ContentPanel" Grid.Row="1" Margin="12,0,12,0"> <Grid.RowDefinitions> <RowDefinition Height="*" /> <RowDefinition Height="40" /> </Grid.RowDefinitions> <MediaElement Name="myMediaElement" AutoPlay="True" Grid.Row="0" /> <ProgressBar Name="pbVideo" Grid.Row="1" /> </Grid>
5. Изменение XAML: ApplicationBar
Далее нам нужно создать ApplicationBar в MainPage.xaml. Панель приложений будет содержать 3 кнопки для работы с медиа-контентом: воспроизведение, пауза, остановка. Для этого я использовал следующий XAML:
<phone:PhoneApplicationPage.ApplicationBar> <shell:ApplicationBar IsVisible="True" IsMenuEnabled="True" > <shell:ApplicationBarIconButton IconUri="/icons/play.png" Click="Play_Click" Text="Play"/> <shell:ApplicationBarIconButton IconUri="/icons/pause.png" Click="Pause_Click" Text="Stop"/> <shell:ApplicationBarIconButton IconUri="/icons/stop.png" Click="Stop_Click" Text="Stop"/> </shell:ApplicationBar> </phone:PhoneApplicationPage.ApplicationBar>
6. Добавление функциональности
Наконец, мы должны изменить файл MainPage.xaml.cs, чтобы добавить функциональность для событий. Код очень прост, поэтому я не буду описывать его подробно. Обратите внимание, что я использовал объект DispatcherTimer для обновления индикатора выполнения.
public partial class MainPage : PhoneApplicationPage { // varibles and properties DispatcherTimer currentPosition = new DispatcherTimer(); // Constructor public MainPage() { InitializeComponent(); this.Loaded += new RoutedEventHandler(MainPage_Loaded); } void MainPage_Loaded(object sender, RoutedEventArgs e) { myMediaElement.MediaOpened += new RoutedEventHandler(myMediaElement_MediaOpened); myMediaElement.MediaEnded += new RoutedEventHandler(myMediaElement_MediaEnded); myMediaElement.CurrentStateChanged += new RoutedEventHandler(myMediaElement_CurrentStateChanged); currentPosition.Tick += new EventHandler(currentPosition_Tick); myMediaElement.Source = new Uri("http://ecn.channel9.msdn.com/o9/ch9/4807/574807/ISWPE05SLToolKitForWP_ch9.wmv", UriKind.Absolute); } void myMediaElement_CurrentStateChanged(object sender, RoutedEventArgs e) { if (myMediaElement.CurrentState == MediaElementState.Playing) { currentPosition.Start(); ((ApplicationBarIconButton)ApplicationBar.Buttons[0]).IsEnabled = false; // play ((ApplicationBarIconButton)ApplicationBar.Buttons[1]).IsEnabled = true; // pause ((ApplicationBarIconButton)ApplicationBar.Buttons[2]).IsEnabled = true; // stop } else if (myMediaElement.CurrentState == MediaElementState.Paused) { currentPosition.Stop(); ((ApplicationBarIconButton)ApplicationBar.Buttons[0]).IsEnabled = true; // play ((ApplicationBarIconButton)ApplicationBar.Buttons[1]).IsEnabled = false; // pause ((ApplicationBarIconButton)ApplicationBar.Buttons[2]).IsEnabled = true; // stop } else { currentPosition.Stop(); ((ApplicationBarIconButton)ApplicationBar.Buttons[0]).IsEnabled = true; // play ((ApplicationBarIconButton)ApplicationBar.Buttons[1]).IsEnabled = false; // pause ((ApplicationBarIconButton)ApplicationBar.Buttons[2]).IsEnabled = false; // stop } } void myMediaElement_MediaEnded(object sender, RoutedEventArgs e) { myMediaElement.Stop(); } void myMediaElement_MediaOpened(object sender, RoutedEventArgs e) { pbVideo.Maximum = (int)myMediaElement.NaturalDuration.TimeSpan.TotalMilliseconds; myMediaElement.Play(); } void currentPosition_Tick(object sender, EventArgs e) { pbVideo.Value = (int)myMediaElement.Position.TotalMilliseconds; } private void Play_Click(object sender, EventArgs e) { myMediaElement.Play(); } private void Pause_Click(object sender, EventArgs e) { myMediaElement.Pause(); } private void Stop_Click(object sender, EventArgs e) { myMediaElement.Stop(); } }
Альтернативный способ: использование MediaPlayerLauncher
Еще один способ открыть медиапоток — использовать MediaPlayerLauncher . Этот класс находится в пространстве имен Microsoft.Phone.Tasks. Чтобы открыть поток мультимедиа с помощью MediaPlayerLauncher, вам просто нужно указать свойство Media и вызвать метод Show () (см. Код ниже).
MediaPlayerLauncher mediaPlayerLauncher = new MediaPlayerLauncher() { Media = new Uri("http://ecn.channel9.msdn.com/o9/ch9/4807/574807/ISWPE05SLToolKitForWP_ch9.wmv", UriKind.Absolute) }; mediaPlayerLauncher.Show();
Сразу после вызова метода Show откроется приложение Windows Phone Media Player с отображением указанного видео. Результат будет похож на изображение ниже. Если вы нажмете кнопку «Назад», вы вернетесь к своему приложению.
Источник: http://www.eugenedotnet.com/2010/09/w12-creating-a-simple-media-player-for-windows-phone-7/