С# как воспроизвести MPEG-2 TS?

229
05 мая 2017, 15:30

Пробовал плеер на DirectX 1.0.2902.0 - умирает от MPEG-2 TS (библиотеки Microsoft.DirectX.AudioVideoPlayback.dll и Microsoft.DirectX.dll)

Пробовал плеер на Interop.QuartzTypeLib.dll - умирает от MPEG-2 TS (источник)

Дошел до варианта с MediaElement (источник), грубо закоментировал dialog.Filter = "WMV file (.wm)|*.wmv"; - и о чудо MPEG-2 TS зашевелился, НО плывет и умирает. Как добиться нормального проигрывания MPEG-2 TS?

XAML:

<Grid> 
<Grid.RowDefinitions> 
    <RowDefinition Height="320*"/> 
    <RowDefinition Height="50*"/> 
</Grid.RowDefinitions> 
<MediaElement x:Name="MediaPlayer" Grid.RowSpan="1" LoadedBehavior="Manual"/> 
<StackPanel Orientation="Horizontal" Grid.Row="1" HorizontalAlignment="Center"> 
    <Button x:Name="btnPlay" Content="Play" Click="btnPlay_Click" Width="50" Height="25" Margin="5"/> 
    <Button x:Name="btnStop" Content="Stop" Click="btnStop_Click" Width="50" Height="25" Margin="5"/> 
    <Button x:Name="btnMoveBack" Content="Back" Click="btnMoveBack_Click" Width="50" Height="25" Margin="5"/> 
    <Button x:Name="btnMoveForward" Content="Forward" Click="btnMoveForward_Click" Width="50" Height="25" Margin="5"/> 
    <Button x:Name="btnOpen" Content="Open" Click="btnOpen_Click" Width="50" Height="25" Margin="5"/> 
</StackPanel> 

C#

public MainWindow() 
{ 
    InitializeComponent(); 
    IsPlaying(false); 
} 
private void IsPlaying(bool flag) 
{ 
    btnPlay.IsEnabled = flag; 
    btnStop.IsEnabled = flag; 
    btnMoveBack.IsEnabled = flag; 
    btnMoveForward.IsEnabled = flag; 
} 
private void btnPlay_Click(object sender, RoutedEventArgs e) 
{ 
    IsPlaying(true); 
    if (btnPlay.Content.ToString() == "Play") 
    { 
        MediaPlayer.Play(); 
        btnPlay.Content = "Pause"; 
    } 
    else 
    { 
        MediaPlayer.Pause(); 
        btnPlay.Content = "Play"; 
    } 
} 
private void btnStop_Click(object sender, RoutedEventArgs e) 
{ 
    MediaPlayer.Pause(); 
    btnPlay.Content = "Play"; 
    IsPlaying(false); 
    btnPlay.IsEnabled = true; 
} 
private void btnMoveBack_Click(object sender, RoutedEventArgs e) 
{ 
    MediaPlayer.Position -= TimeSpan.FromSeconds(10); 
} 
private void btnMoveForward_Click(object sender, RoutedEventArgs e) 
{ 
    MediaPlayer.Position += TimeSpan.FromSeconds(10); 
} 
private void btnOpen_Click(object sender, RoutedEventArgs e) 
{ 
    // Configure open file dialog box 
    Microsoft.Win32.OpenFileDialog dialog = new Microsoft.Win32.OpenFileDialog(); 
    dialog.FileName = "Videos"; // Default file name 
    dialog.DefaultExt = ".WMV"; // Default file extension 
    //dialog.Filter = "WMV file (.wm)|*.wmv"; // Filter files by extension  
    // Show open file dialog box 
    Nullable<bool> result = dialog.ShowDialog(); 
    // Process open file dialog box results  
    if (result == true) 
    { 
        // Open document  
        MediaPlayer.Source = new Uri(dialog.FileName); 
        btnPlay.IsEnabled = true; 
    } 
}    

В Windows media player MPEG-2 TS воспроизводится нормально.

И в плеере на MediaElement проблем с mp4 нет.

READ ALSO
Страничный интерфейс или вкладки

Страничный интерфейс или вкладки

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

273
связь между несколькими viewmodels

связь между несколькими viewmodels

У меня есть основная ViewModel которая содержит в себе коллекцию Group ViewModels

313
Имитация нахождения на странице

Имитация нахождения на странице

Есть сайт, суть сайта заключается в том что человек вставляет свою фотографию и сайт накручивает лайкиДо сайта можно достучаться через httр://example

269
С#. WinApi. Рисование на окне

С#. WinApi. Рисование на окне

Нужно написать на С# программу, которая будет определять над каким окном Windows сейчас находится курсор и обводить это окно рамкой (указывая...

303