Simple media player app in a Windows 8 Apps.
Simple media player app in a Windows 8 Apps.
In
this article we create a simple media player app in a Windows 8
Apps. Windows 8 Apps have a good control for playing videos in
applications. You can play videos in aWindows 8 Apps using C# or any other
supported language. In this section we see a video app in a Windows 8
Apps using C#. We integrated a media control in an application and use
several method to make it a more attractive media player.
To embed a video in your application we use the MediaElement class. We use a media element control of XAML. We also create customized controls to give more functionality like play, pause, volume, enable full-screen mode video. We can set the source of media file either at design time or you can use a FileOpenPicker object to enable the user to choose a file from the local file system.
In this article we are creating a small media app in a Windows 8 Apps using C# with rich user functionality.
To embed a video in your application we use the MediaElement class. We use a media element control of XAML. We also create customized controls to give more functionality like play, pause, volume, enable full-screen mode video. We can set the source of media file either at design time or you can use a FileOpenPicker object to enable the user to choose a file from the local file system.
In this article we are creating a small media app in a Windows 8 Apps using C# with rich user functionality.
Steps for making a video player app
Step 1: Create a media player which is the child of a content control:
<ContentControl x:Name="videoContainer"
KeyUp="VideoContainer_KeyUp"HorizontalContentAlignment="Center"
VerticalContentAlignment="Center" Height="700" Width="900" VerticalAlignment="Top" >
<MediaElement Name="videoMediaElement" PosterSource="videoimage.png" AutoPlay="False"
/>
</ContentControl>
Step 2: Then, we create a panel that contains all the UI controls that interact with the media player such as stop, pause, play; the code is:
Step 2: Then, we create a panel that contains all the UI controls that interact with the media player such as stop, pause, play; the code is:
<StackPanel
Name="TransportControlsPanel"
HorizontalAlignment="Center" Margin="238,599,238,0"
Width="900" Height="173"VerticalAlignment="Top"
>
<StackPanel.Background>
<LinearGradientBrushEndPoint="0.5,1"StartPoint="0.5,0">
<GradientStop Color="Black"/>
<GradientStop Color="#FFA86E6E" Offset="1"/>
</LinearGradientBrush>
</StackPanel.Background>
<StackPanel Height="80">
<Button x:Name="pick" Click="pick_Click_1"HorizontalAlignment="Center" Style="{StaticResourceUploadAppBarButtonStyle}"></Button>
<ProgressBar x:Name="vol" Height="15" Width="112" Margin="0,-50,63,0" Value="30" Background="White" FlowDirection="LeftToRight"HorizontalAlignment="Right"/>
</StackPanel>
<StackPanel Orientation="Horizontal" Height="83" Margin="0,0,-15,0">
<Button x:Name="btnPlay" Click="btnPlay_Click" Style="{StaticResourcePlayAppBarButtonStyle}" />
<Button x:Name="btnPause" Click="btnPause_Click" Style="{StaticResourcePauseAppBarButtonStyle}"/>
<Button x:Name="btnStop" Click="btnStop_Click" Style="{StaticResourceAppBarButtonStyle}"
AutomationProperties.Name="Stop" Content="[]"/>
<Button x:Name="btnReverse" Click="btnReverse_Click" Style="{StaticResourceSkipBackAppBarButtonStyle}"/>
<Button x:Name="btnForward" Click="btnForward_Click" Style="{StaticResourceSkipAheadAppBarButtonStyle}"/>
<Button x:Name="btnMute" Click="btnMute_Click" Style="{StaticResourceAppBarButtonStyle}"
AutomationProperties.Name="Mute" Content="X"/>
<Button x:Name="btnFullScreenToggle" Click="btnFullScreenToggle_Click"
Style="{StaticResourceAppBarButtonStyle}"AutomationProperties.Name="Full
Screen" Content="[-]" />
<Button x:Name="btnVolumeUp" Click="btnVolumeUp_Click"
Style="{StaticResourceAppBarButtonStyle}" AutomationProperties.Name="Volume" Content="+"/>
<Button x:Name="btnVolumeDown" Click="btnVolumeDown_Click" Style="{StaticResourceAppBarButtonStyle}"
AutomationProperties.Name="Volume" Content="--" />
</StackPanel>
</StackPanel>
In the above code we use a fileopenpicker to pick a file from the local system and play it in the media player with many control buttons.
In the above code we use a fileopenpicker to pick a file from the local system and play it in the media player with many control buttons.
Here is the full code of the MainPage.xaml file.
<Page
x:Class="App4.MainPage"
IsTabStop="false"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="using:App4"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d">
<Page.TopAppBar>
<AppBar Background="#E51585E2">
<StackPanel>
<Button x:Name="inn"HorizontalAlignment="Right" Click="btnFullScreenToggle_Click"AutomationProperties.Name="Full
Screen"
Style="{StaticResourceOutAppBarButtonStyle}"></Button>
Style="{StaticResourceOutAppBarButtonStyle}"></Button>
<Button x:Name="exit"HorizontalAlignment="Right" Visibility="Collapsed" Click="btnFullScreenToggle_Click"
AutomationProperties.Name="Exit Full Screen" Style="{StaticResourceOutAppBarButtonStyle}"></Button>
AutomationProperties.Name="Exit Full Screen" Style="{StaticResourceOutAppBarButtonStyle}"></Button>
</StackPanel>
</AppBar>
</Page.TopAppBar>
<Grid Background="#FFD32121" Margin="0,0,-10,-58">
<ContentControl x:Name="videoContainer"
KeyUp="VideoContainer_KeyUp"
HorizontalContentAlignment="Center"
VerticalContentAlignment="Center" Height="700" Width="900" VerticalAlignment="Top" >
<MediaElement Name="videoMediaElement" PosterSource="videoimage.png" AutoPlay="False"
/>
</ContentControl>
<!-- Transport Controls -->
<StackPanel Name="TransportControlsPanel"
HorizontalAlignment="Center" Margin="238,599,238,0"
Width="900" Height="173"VerticalAlignment="Top"
>
<StackPanel.Background>
<LinearGradientBrushEndPoint="0.5,1"StartPoint="0.5,0">
<GradientStop Color="Black"/>
<GradientStop Color="#FFA86E6E" Offset="1"/>
</LinearGradientBrush>
</StackPanel.Background>
<StackPanel Height="80">
<Button x:Name="pick" Click="pick_Click_1"HorizontalAlignment="Center" Style="{StaticResourceUploadAppBarButtonStyle}"></Button>
<ProgressBar x:Name="vol" Height="15" Width="112" Margin="0,-50,63,0" Value="30" Background="White"
FlowDirection="LeftToRight"HorizontalAlignment="Right"/>
FlowDirection="LeftToRight"HorizontalAlignment="Right"/>
</StackPanel>
<StackPanel Orientation="Horizontal" Height="83" Margin="0,0,-15,0">
<Button x:Name="btnPlay" Click="btnPlay_Click" Style="{StaticResourcePlayAppBarButtonStyle}" />
<Button x:Name="btnPause" Click="btnPause_Click" Style="{StaticResourcePauseAppBarButtonStyle}"/>
<Button x:Name="btnStop" Click="btnStop_Click" Style="{StaticResourceAppBarButtonStyle}"
AutomationProperties.Name="Stop" Content="[]"/>
<Button x:Name="btnReverse" Click="btnReverse_Click" Style="{StaticResourceSkipBackAppBarButtonStyle}"/>
<Button x:Name="btnForward" Click="btnForward_Click" Style="{StaticResourceSkipAheadAppBarButtonStyle}"/>
<Button x:Name="btnMute" Click="btnMute_Click" Style="{StaticResourceAppBarButtonStyle}"
AutomationProperties.Name="Mute" Content="X"/>
<Button x:Name="btnFullScreenToggle" Click="btnFullScreenToggle_Click"
Style="{StaticResourceAppBarButtonStyle}"AutomationProperties.Name="Full
Screen" Content="[-]" />
<Button x:Name="btnVolumeUp" Click="btnVolumeUp_Click"
Style="{StaticResourceAppBarButtonStyle}" AutomationProperties.Name="Volume" Content="+"/>
<Button x:Name="btnVolumeDown" Click="btnVolumeDown_Click" Style="{StaticResourceAppBarButtonStyle}"
AutomationProperties.Name="Volume" Content="--" />
</StackPanel>
</StackPanel>
</Grid>
</Page>
Step 3: Here is the code behind for the control buttons:
privatevoidbtnFullScreenToggle_Click(object sender, RoutedEventArgs
e)
{
FullscreenToggle();
}
privatevoidVideoContainer_KeyUp(object sender, KeyRoutedEventArgs
e)
{
if (flag == 1 &&e.Key ==
Windows.System.VirtualKey.Escape)
{
FullscreenToggle();
}
e.Handled = true;
}
}
privatevoidbtnPlay_Click(object sender, RoutedEventArgs
e)
{
if (videoMediaElement.DefaultPlaybackRate != 1)
{
videoMediaElement.DefaultPlaybackRate = 1.0;
}
videoMediaElement.Play();
}
privatevoidbtnPause_Click(object sender, RoutedEventArgs
e)
{
videoMediaElement.Pause();
}
privatevoidbtnStop_Click(object sender, RoutedEventArgs
e)
{
videoMediaElement.Stop();
}
privatevoidbtnForward_Click(object sender, RoutedEventArgs
e)
{
videoMediaElement.DefaultPlaybackRate = 2.0;
videoMediaElement.Play();
}
privatevoidbtnReverse_Click(object sender, RoutedEventArgs
e)
{
videoMediaElement.DefaultPlaybackRate = 1.0;
videoMediaElement.Play(); ;
}
privatevoidbtnVolumeDown_Click(object sender, RoutedEventArgs
e)
{
if (videoMediaElement.IsMuted)
{
videoMediaElement.IsMuted = false;
}
if (videoMediaElement.Volume< 1)
{
videoMediaElement.Volume += .1;
}
vol.Value -= 5;
}
privatevoidbtnMute_Click(object sender, RoutedEventArgs
e)
{
videoMediaElement.IsMuted= !videoMediaElement.IsMuted;
}
privatevoidbtnVolumeUp_Click(object sender, RoutedEventArgs
e)
{
if (videoMediaElement.IsMuted)
{
videoMediaElement.IsMuted = false;
}
if (videoMediaElement.Volume> 0)
{
videoMediaElement.Volume -= .1;
}
vol.Value += 5;
}
privateasyncvoid pick_Click_1(object sender, RoutedEventArgs
e)
{
varopenPicker = newFileOpenPicker();
openPicker.SuggestedStartLocation = PickerLocationId.VideosLibrary;
openPicker.FileTypeFilter.Add(".wmv");
openPicker.FileTypeFilter.Add(".mp4");
var file = awaitopenPicker.PickSingleFileAsync();
if (file != null)
{
var stream = awaitfile.OpenAsync(FileAccessMode.Read);
// mediaControl is a MediaElement defined in XAML
videoMediaElement.SetSource(stream, file.ContentType);
}
}
Step 4: We use an extra feature of the full screen mode:
Step 4: We use an extra feature of the full screen mode:
int flag = 0;
privateSize
_previousVideoContainerSize = newSize();
privatevoidFullscreenToggle()
{
if (flag == 0)
{
TransportControlsPanel.Visibility = Visibility.Collapsed;
_previousVideoContainerSize.Width = videoContainer.ActualWidth;
_previousVideoContainerSize.Height = videoContainer.ActualHeight;
videoContainer.Width = Window.Current.Bounds.Width;
videoContainer.Height = Window.Current.Bounds.Height;
exit.Visibility = Visibility.Visible;
inn.Visibility = Visibility.Collapsed;
flag = 1;
}
In the above code we hide all the UI elements in the app. Then, set the Width and Height properties of the ContentControl, which is the parent of the MediaElement, to the maximum bounds of the display.
Step 5 : Exit from Full Screen mode.
}
In the above code we hide all the UI elements in the app. Then, set the Width and Height properties of the ContentControl, which is the parent of the MediaElement, to the maximum bounds of the display.
Step 5 : Exit from Full Screen mode.
TransportControlsPanel.Visibility = Visibility.Visible;
videoContainer.Width = _previousVideoContainerSize.Width;
videoContainer.Height = _previousVideoContainerSize.Height;
exit.Visibility = Visibility.Collapsed;
inn.Visibility = Visibility.Visible;
In the above code we use two ways to exit from full screen. One is from the ESC key and other from the app bar. Set the previous height and width of media control to make it in the original postion.
Here is the full code of MainPage.xaml.cs file.
using System;
usingSystem.Collections.Generic;
using System.IO;
usingSystem.Linq;
usingWindows.Foundation;
usingWindows.Foundation.Collections;
usingWindows.UI.Xaml;
usingWindows.UI.Xaml.Controls;
usingWindows.UI.Xaml.Controls.Primitives;
usingWindows.UI.Xaml.Data;
usingWindows.UI.Xaml.Input;
usingWindows.UI.Xaml.Media;
usingWindows.UI.Xaml.Navigation;
usingWindows.Storage;
usingWindows.Media;
usingWindows.Storage.Pickers;
namespace App4
{
publicsealedpartialclassMainPage : Page
{
publicMainPage()
{
this.InitializeComponent();
}
protectedoverridevoidOnNavigatedTo(NavigationEventArgs e)
{
}
int flag = 0;
privateSize
_previousVideoContainerSize = newSize();
privatevoidFullscreenToggle()
{
if (flag == 0)
{
TransportControlsPanel.Visibility = Visibility.Collapsed;
_previousVideoContainerSize.Width = videoContainer.ActualWidth;
_previousVideoContainerSize.Height = videoContainer.ActualHeight;
videoContainer.Width = Window.Current.Bounds.Width;
videoContainer.Height = Window.Current.Bounds.Height;
exit.Visibility = Visibility.Visible;
inn.Visibility = Visibility.Collapsed;
flag = 1;
}
else
{
TransportControlsPanel.Visibility = Visibility.Visible;
videoContainer.Width = _previousVideoContainerSize.Width;
videoContainer.Height = _previousVideoContainerSize.Height;
exit.Visibility = Visibility.Collapsed;
inn.Visibility = Visibility.Visible;
}
}
privatevoidbtnFullScreenToggle_Click(object sender, RoutedEventArgs
e)
{
FullscreenToggle();
}
privatevoidVideoContainer_KeyUp(object sender, KeyRoutedEventArgs
e)
{
if (flag == 1 &&e.Key == Windows.System.VirtualKey.Escape)
{
FullscreenToggle();
}
e.Handled = true;
}
privatevoidbtnPlay_Click(object
sender, RoutedEventArgs e)
{
if (videoMediaElement.DefaultPlaybackRate != 1)
{
videoMediaElement.DefaultPlaybackRate = 1.0;
}
videoMediaElement.Play();
}
privatevoidbtnPause_Click(object
sender, RoutedEventArgs e)
{
videoMediaElement.Pause();
}
privatevoidbtnStop_Click(object
sender, RoutedEventArgs e)
{
videoMediaElement.Stop();
}
privatevoidbtnForward_Click(object
sender, RoutedEventArgs e)
{
videoMediaElement.DefaultPlaybackRate = 2.0;
videoMediaElement.Play();
}
privatevoidbtnReverse_Click(object
sender, RoutedEventArgs e)
{
videoMediaElement.DefaultPlaybackRate = 1.0;
videoMediaElement.Play(); ;
}
privatevoidbtnVolumeDown_Click(object sender, RoutedEventArgs
e)
{
if (videoMediaElement.IsMuted)
{
videoMediaElement.IsMuted = false;
}
if (videoMediaElement.Volume< 1)
{
videoMediaElement.Volume += .1;
}
vol.Value -= 5;
}
privatevoidbtnMute_Click(object
sender, RoutedEventArgs e)
{
videoMediaElement.IsMuted= !videoMediaElement.IsMuted;
}
privatevoidbtnVolumeUp_Click(object
sender, RoutedEventArgs e)
{
if (videoMediaElement.IsMuted)
{
videoMediaElement.IsMuted = false;
}
if (videoMediaElement.Volume> 0)
{
videoMediaElement.Volume -= .1;
}
vol.Value += 5;
}
privateasyncvoid pick_Click_1(object sender, RoutedEventArgs
e)
{
varopenPicker = newFileOpenPicker();
openPicker.SuggestedStartLocation = PickerLocationId.VideosLibrary;
openPicker.FileTypeFilter.Add(".wmv");
openPicker.FileTypeFilter.Add(".mp4");
var file = awaitopenPicker.PickSingleFileAsync();
if (file != null)
{
var stream = awaitfile.OpenAsync(FileAccessMode.Read);
// mediaControl is a MediaElement defined in XAML
videoMediaElement.SetSource(stream, file.ContentType);
}
}
}
}
Step 6: Press F5 to run the application and see the output. Select a media file from the upload button:
Step 7: Use the various controls buttons like full screen mode:
Step 8: To exit from full screen mode either press the Esc key or right-click on the screen to display the app bar. Click Exit full Screen button.
Comments
Post a Comment