5 ответов:
Если вы можете заставить WCF доставить медиа-объект через
http-URL (GET), то вы можете просто назначить этот URL свойствуMediaElement.Source- см. http://msdn.microsoft.com/en-us/library/system.windows.controls.mediaelement.source.aspx.Для случаев, когда такой URL недоступен/возможен:
Назначение потока в настоящее время невозможно - хотя есть некоторые хаки, чтобы это произошло, для примера на основе DirectShow см. http://social.msdn.microsoft.com/forums/en-US/wpf/thread/6191ef1a-0010-4294-a5b4-451bbadca33a/ и http://jmorrill.hjtcentral.com/Home/tabid/428/EntryId/15/WPF-Hackery-Part-I.aspx .
Другой вариант-каким-то образом разместитьSilverlight MediaElementи использовать методSetSource, который может взять поток и воспроизвести его... см. http://silverlightviewport.codeplex.com/SourceControl/list/changesets и http://msdn.microsoft.com/en-us/library/cc190669%28v=vs.95%29.aspx
Может быть уже слишком поздно, Надеюсь, это поможет, если вы все еще ищете ответ.
Да вы можете воспроизводить видео из потока памяти с помощью WPF media element.
Я использовал сторонний компонент под названием boxed app, миллион благодарностей BoxedApp - http://www.boxedapp.com/boxedappsdk/
Мне нужно немного обновить код, чтобы он работал для byte []. Скопируйте приведенный ниже конструктор в класс CustomFileStream из BoxedApp
public CustomFileStream(byte[] data) { _Stream = new MemoryStream(data); _Length = _Stream.Length; _data = data; _Offset = 0; }Создать приложение wpf и добавьте элемент мультимедиа и кнопку и скопируйте приведенный ниже код
public MainWindow() { BoxedAppSDK.NativeMethods.BoxedAppSDK_Init(); InitializeComponent(); } private void button2_Click(object sender, RoutedEventArgs e) { var MyFileStream = new CustomFileStream(File.ReadAllBytes(@"wildlife.wmv")); IntPtr ptr = BoxedAppSDK.NativeMethods.BoxedAppSDK_CreateVirtualFileBasedOnIStream( @"1.wmv", BoxedAppSDK.NativeMethods.EFileAccess.GenericWrite, BoxedAppSDK.NativeMethods.EFileShare.Read, IntPtr.Zero, BoxedAppSDK.NativeMethods.ECreationDisposition.New, BoxedAppSDK.NativeMethods.EFileAttributes.Normal, IntPtr.Zero, MyFileStream); using (new SafeFileHandle(ptr, true)) { mediaElement1.Source = new Uri(Path.GetFullPath("1.wmv")); mediaElement1.LoadedBehavior = MediaState.Manual; mediaElement1.Play(); } }- для коробочного приложения, пожалуйста, следуйте образцам, и все.. вы находитесь в счастливом мире...
То же самое и для QT Player.
Основываясь на ответе, я добавлю полный пример, если предоставленной информации недостаточно.
Счастливое кодирование....
Прежде чем кто-либо потратит часы, выясняя это для себя: невозможно разместить Silverlight MediaElement в приложении WPF. Причина этого в том, что это один из нескольких типов, которые появляются в PresentationFramework.dll (неизбежная для WPF) и System.Окна.dll (версии Silverlight), которые имеют одинаковые имена и одинаковые пространства имен, но являются разными типами. (Кто-то должен объяснить, почему у нас есть пространства имен для microsoft!)
Я знаю, что это не то, что вы просили, но вы можете разместить компонент VLC ActiveX внутри окна в WPF, а затем использовать этот элемент управления VLC для подключения к потоку и отображения потока. Вот как я получил потоковую работу через WPF.
Edit: на этой странице приведен пример размещения элемента управления ActiveX внутри WPF
As WPF mediaelement внутренне использует проигрыватель windows media. Если вы измените настройки буфера медиаплеера с настройки буфера по умолчанию на пользовательские. Откройте проигрыватель windows media Tools Инструменты Параметры производительность.
Когда вы выбираете опцию "буфер" и устанавливаете "секунды содержимого" на 2. В разделе медиа-плеер будут добавлены следующие значения реестра. Раздел реестра HKEY_CURRENT_USER\программное обеспечение\Майкрософт\медиаплеер\предпочтения UseDefaultBufferTime=0 CustomBufferTime=2000
Вы можете использовать dotnet класс реестра для внесения изменений. Обратитесь по этой ссылке: https://social.msdn.microsoft.com/Forums/vstudio/en-US/1b4b8fb9-ff8f-4861-8e99-4a7a4fc75596/setting-windows-media-player-properties-in-wpf?forum=wpf#ac879a7f-37bc-4ccc-854d-ab6e047086e5
Comments