Добавить в закладки
 
 
 
 
Суббота, 04.05.2024, 09:09

Логин:
Пароль:
 
 
 
 
 
Shared
 
  7777
 
 
Тут типа что то картинки =)
 
 
 
 
 
 
 
 
 
   
 
 
 
 
Тут типа что то картинки =)
 
 
Translate
 
  Тут что то вашее
 
 
 
     
  спидбар )))  
      Теги сайта:
Главная » Статьи » SilverLight

Простой MediaPlayer

На этом уроке мы продолжим рассказ о работе с видео. Сегодня мы попробуем создать простейший МедиаПлеер, который позволит нам проиграть видео (аудио файл). В нашем примере мы будем использовать видео файлы. Сразу скажу, что урок требует минимального знания C#, большинство моментов я объясню, за разъяснением синтаксиса языка, обращайтесь к соответствующим источникам и справочным средствам.

 

Начало

Для урока я использую следующие объекты: MediaElement, Slider (3 штуки), Checkbox, TextBlock (2 штуки), TextBox, Button (3 штуки).

Из этих объектов мы создадим элементарный плеер, сразу уточню, что я не старался сделать красивый и навороченный плеер, я хотел показать просто, как это работает. Если вы все-таки захотите наворотить и приукрасить ваш плеер, пожалуйста, оставляю это на ваше самообразование и фантазию.

Код XAML:

<Canvas Width="640" Height="480">
 <MediaElement x:Name="Video" 
 Stretch="Fill" 
 Source="tech_support.wmv" 
 Canvas.Top="30" Canvas.Left="45" 
 Width="330" Height="180" 
 CurrentStateChanged="Video_CurrentStateChanged"
 />
 <Button x:Name="Play" 
 Click="Play_Click"
 HorizontalAlignment="Center" VerticalAlignment="Center" 
 Width="85" Height="30" 
 Content="Play" 
 Canvas.Top="225" Canvas.Left="45"/>
 <Button x:Name="Pause"
 Click="Pause_Click"
 HorizontalAlignment="Center" VerticalAlignment="Center" 
 Height="30" Width="85"
 Content="Pause" 
 Canvas.Top="225" Canvas.Left="290" />
 <Button x:Name="Stop" 
 Click="Stop_Click"
 HorizontalAlignment="Center" VerticalAlignment="Center" 
 Width="85" Height="30" 
 Content="Stop" 
 Canvas.Top="225" Canvas.Left="171"/>
</Canvas>

Начнем с самого простого добавим на нашу страницу MediaElement (назовем его Video) и укажим в виде источника наш файл, который заранее необходимо добавить в ваш проект. В нашем случае файл называется (tech_support.wmv).

Также создадим три кнопки Play, Pause, Stop. Для каждой кнопки создадим события Click: Play_Click, Pause_Click, Stop_Click.

Создадим для методы для обработки событий:

Код C#:

private void Play_Click(object sender, RoutedEventArgs e)
{
 //Проверяем в каком состоянии находится видео
 //Если Пауза то просто запускаем
 //Если уже проигрывается, то стартуем заново 
 if (Video.CurrentState == MediaElementState.Paused)
 {
 Video.Play();
 }
 else
 {
 Video.Position = new TimeSpan(0);
 Video.Play();
 }
}


private void Pause_Click(object sender, RoutedEventArgs e)
{
 //Просто делаем паузу как на обычных плеерах
 //то есть если пауза, то начинаем играть
 //если проигрывается видео, то ставим паузу
 if (MediaElementState.Paused == Video.CurrentState)
 {
 Video.Play();
 }
 else
 {
 Video.Pause();
 }
}

private void Stop_Click(object sender, RoutedEventArgs e)
{
 //Просто останавливаем проигрывание видео
 this.Video.Stop();
}

запускаем наше приложение и проверяем, убедились, что все кнопки отрабатывают как надо. Уже здесь видно, что всего лишь несколькими строчками кода, мы создали простой медиа плеер.

http://silverlightru.net/

Работа со звуком

Теперь рассмотрим возможности работы со звуком. Добавим следующие элементы на нашу страницу:

Код XAML:

<CheckBox x:Name="Mute" 
 HorizontalAlignment="Center" VerticalAlignment="Center" 
 Width="112" Height="25" 
 Content="ON" 
 Click="Mute_Click" 
 Canvas.Top="275" Canvas.Left="45" TextAlignment="Right"/>
<TextBlock Text="Volume" 
 Canvas.Top="260" Canvas.Left="140"
 FontSize="12" />
<Slider x:Name="VolumeSlider" 
 HorizontalAlignment="Center" VerticalAlignment="Center" 
 Height="20" Width="155"
 Canvas.Top="275" Canvas.Left="90" 
 MouseLeftButtonUp="VolumeSlider_MouseLeftButtonUp"
 />
<TextBlock Text="Balance" 
 Canvas.Top="260" Canvas.Left="295" 
 FontSize="12" />
<Slider x:Name="BalanceSlider" 
 HorizontalAlignment="Center" VerticalAlignment="Center" 
 Height="20" Width="116"
 Canvas.Top="275" Canvas.Left="259" 
 MouseLeftButtonUp="BalanceSlider_MouseLeftButtonUp"
 />

Mute (CheckBox) – Отвечает за включение/отключение звука. Для него необходимо добавить событие Click: Mute_Click. И его обработчик, где стоит простая проверка отмечен ли CheckBox или нет, а также меняем свойство Content на on/ off, чтобы было более наглядно:

Код C#:

private void Mute_Click(object sender, RoutedEventArgs e)
{
 if (!(bool)Mute.IsChecked)
 {
 Video.IsMuted = false;
 Mute.Content = "ON";
 
 }
 else
 {
 Video.IsMuted = true;
 Mute.Content = "OFF";
 }
}

VolumeSlider (Slider) – отвечает за уровень громкости. Минимальное значение для слайдера 0, а максимальное 1. По умолчанию при загрузке видео, значение устанавливается в 0,5. Все эти значения можно установить непосредственно в XAML, но так как я экспериментировал, эти значения я присвоил в событие Page_Load.

Код С#:

//Добавляем следующие строчки в событие Page_Load
VolumeSlider.Value = 0.5;
VolumeSlider.Minimum = 0;
VolumeSlider.Maximum = 1;
VolumeSlider.SmallChange = 0.1;
VolumeSlider.LargeChange = 0.2;

Для нашего VolumeSlider, пропишем событие MouseLeftButtonUp – в котором будем присваиваться свойству Volume MediaElement-a, значение VolumeSlider.

Код С#:

private void VolumeSlider_MouseLeftButtonUp(object sender, MouseButtonEventArgs e)
{
 Video.Volume = VolumeSlider.Value;
}

BalanceSlider(Slider) – отвечает за баланс между потоками правого и левого выходного устройства. По умолчанию равно 0, минимальное значение (левое) - -1. максимальное (правое) – 1. Все эти значения можно установить непосредственно в XAML, но так как я экспериментировал, эти значения я присвоил в событие Page_Load.

Код С#:

//Добавляем следующие строчки в событие Page_Load
BalanceSlider.Value = 0;
BalanceSlider.SmallChange = 0.1;
BalanceSlider.LargeChange = 0.1;
BalanceSlider.Minimum = -1;
BalanceSlider.Maximum = 1;

Добавим обработчик события MouseLeftButtonUp – в котором будем присваивать свойству Balance MediaElement-a, значение BalanceSlider.

Код С#:

private void BalanceSlider_MouseLeftButtonUp(object sender, MouseButtonEventArgs e)
{
 Video.Balance = BalanceSlider.Value;
}

Запускаем приложение и проверям. Попробуйте попередвигать слайдеры, и убедитесь, что все работает правильно ,если что-то работает не правильно перепроверьте еще раз ваш код.

http://silverlightru.net/

Делаем прокрутку и таймер

Теперь сделаем для нашего видео плеера полосу прокрутки и таймер. Это самый сложный момент нашей задачи.
Для этого нам понадобится Silder и TextBox:

Код XAML:

<Slider x:Name="TimerSlider" 
 HorizontalAlignment="Center" VerticalAlignment="Center" 
 Height="20" Width="263"
 Canvas.Top="315" Canvas.Left="45" 
 MouseLeftButtonUp="TimerSlider_MouseLeftButtonUp" 
 MouseLeftButtonDown="TimerSlider_MouseLeftButtonDown"
/>
<TextBox x:Name="Clock" 
 Height="27" Width="53" 
 Canvas.Left="322" Canvas.Top="308" 
 Text="00:00" 
 HorizontalAlignment="Center" VerticalAlignment="Center" TextAlignment="Center" />

TimerSlider (Slider) - будет указывать длительность проигрывания видео. Максимальное значение равно - 1, минимальное – 0. Все эти значения можно установить непосредственно в XAML, но так как я экспериментировал, эти значения я присвоил в событие Page_Load.

Код С#:

//Добавляем следующие строчки в событие Page_Load
TimerSlider.Value = 0;
TimerSlider.Minimum = 0;
TimerSlider.Maximum = 1;
TimerSlider.LargeChange = 0.05;
TimerSlider.SmallChange = 0.01;

Также зададим событие MouseLeftButtonUp и MouseLeftButtonDown, в которых будем устанавливать текущее значение нашему Video.

Код С#:

private void TimerSlider_MouseLeftButtonUp(object sender, MouseButtonEventArgs e)
{
 Video.Position = new TimeSpan.FromSeconds(Convert.ToInt64(TimerSlider.Value * Video.NaturalDuration.TimeSpan.TotalSeconds));
 Clock.Text = string.Format("{0:00}:{1:00}", Video.Position.Minutes, Video.Position.Seconds);
 Video.Play();
}

private void TimerSlider_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{
 Video.Pause();
}

Как видите, теперь мы можем перемещать видео в любой момент. И при этом наш таймер указывает на позицию куда мы его переместили. Но это конечно же не совсем то, что нам хотелось бы видеть. В обычных видео плеерах, значение слайдера, изменяется вместе с проигрыванием видео.
Для решения этой задачи нам необходимо создать таймер, который мы будем запускать в начале и каждый раз проверять позицию видео, и присываивать ее нашему TextBox –у и Slider – у.

Нам необходимо подключить NameSpace

Код С#:

using System.Windows.Threading;

Затем создать поле у нашего класса:

Код С#:

public DispatcherTimer VideoTimer;

прописываем в Page_Load:

Код С#:

VideoTimer = new DispatcherTimer();
VideoTimer.Interval = TimeSpan.FromMilliseconds(50);
VideoTimer.Tick += new EventHandler(VideoTimer_Tick);

И создаем два события:

Код С#:

void VideoTimer_Tick(object sender, EventArgs e)
{
 if (Video.NaturalDuration.TimeSpan.TotalSeconds &gt; 0)
 {
 Clock.Text = string.Format("{0:00}:{1:00}", Video.Position.Minutes, Video.Position.Seconds);
 TimerSlider.Value = Video.Position.TotalSeconds / Video.NaturalDuration.TimeSpan.TotalSeconds;
 }
}

void Video_CurrentStateChanged(object sender, RoutedEventArgs e)
{
 if (Video.CurrentState == MediaElementState.Playing)
 {
 VideoTimer.Start();
 }
 else
 {
 VideoTimer.Stop();
 }
}

http://silverlightru.net/

Заключение

Наш простой видеоплеер готов, возможно я его сделал не самым оптимальным образом и самым функциональным. Надеюсь на ваши дополнения и замечания. И ваши примеры. Теперь осталось только попробывать создать свои видео плеер. И например, прикрутить плей лист. Это не такая уж и сложная задача, которую возможно мы рассмотрим в будущих уроках.

Категория: SilverLight | Добавил: Y@rikus (02.06.2008) | Автор: Y@roslav E W
Просмотров: 3339 | Комментарии: 6 | Рейтинг: 0.0/0
Всего комментариев: 2
0  
2 Saliou   (10.08.2013 11:37) [Материал]
There is a critical shortage of inaomrftive articles like this.
0  
1 flash   (27.08.2012 22:33) [Материал]
Вобще не понял как тут всё ты написал. Сколько не пробую не получается. Выводит ошибки. Вобще какой проэкт открывать? Нужно ли добавлять библиотеку? В визуал студио как это всё начирикать???
Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]
 
 
Блок навигации
   


Разделы
 
SilverLight [5]
CorelDRAW [3]
3D Studio Max [0]
Macromedia Flash [1]
Photoshop [6]
 


Свежий софт
 
Автораздача ICQ

Каждый день в 14.00


Номер и пароль:


Не успел взять ICQ номерок?

Каждый день здесь появляется новый номер ICQ.
 


ТОП-5 пользователей
   


Теги
 

Для красивого отображения Облака
необходим
Adobe Flash Player 9
или выше
Скачать Adobe Flash Player

 


Наши друзья
 
МОУСОШ №11 Г.Пензы с углубленным изучением предметов гуманитарно-правого профиля. 
 
 


Статистика
 

Хостинг от uCoz

Онлайн всего: 1
Гостей: 1
Пользователей: 0

 


 
 
 
 
Home   |   Register   |   Add news   |   Site rules   |   Statistics   |   Feedback   |   Ping
COPYRIGHT © 2024 Y@rikus
 
баннер   баннер