是否可以使用WPF MediaElement从System.IO.Stream对象播放流视频?正在从存储媒体文件的WCF服务中检索Stream对象。使用MediaElement播放流中的视频
回答
如果您可以让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的窗口中托管一个VLC ActiveX组件,然后使用该VLC控件连接到该流并显示该流。这就是我通过WPF获得流媒体工作的方式。
编辑:this page has an example of how to host an ActiveX control inside WPF
在任何人浪费时间发现了这一点,为自己:这是不可能举办的Silverlight的MediaElement在WPF应用程序。原因是它是PresentationFramework.dll(WPF中不可避免的)和System.Windows.dll(Silverlight版本)中出现的许多类型中的一种,它们具有相同的名称和相同的名称空间,但是是不同的类型。 (有人应该解释为什么我们有命名空间到微软!)
这是真的。不幸的是,我不得不以艰难的方式找到这一点。 :( – rafale
我知道这是一个古老的答案,但不是“在同一名称空间中具有相同名称的多个不同类型”是否存在引用别名的原因? –
始终可以制作Silverlight网站并在其中使用MediaElement并在WPF应用程序中添加WebBrowser控件和源代码到该Silverlight网站并完成 –
它可能为时已晚,希望这可能有助于,如果你仍然在寻找答案。
是的,你可以使用WPF媒体元素从内存流中播放视频。
我使用一个名为盒装应用第三方组件,一百万个感谢BoxedApp - http://www.boxedapp.com/boxedappsdk/
我要更新的代码一点点,使之成为一个字节[]工作。下面的构造函数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播放器也是一样的。
根据回答,如果提供的信息不够,我会添加一个完整的示例。
快乐编码....
很好的答案,非常感谢! – Mafii
由于WPF MediaElement的内部使用Windows媒体播放器。如果您将媒体播放器的缓冲区设置从默认缓冲区设置更改为自定义。打开Windows媒体播放器工具选项性能。
当您选择“缓冲区”选项并将“秒的内容”设置为2.以下注册表值将被添加到媒体播放器下。 HKEY_CURRENT_USER \ SOFTWARE \微软\ MediaPlayer的\首 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
- 1. WPF中的MediaElement播放视频流?
- 2. 使用Silverlight MediaElement播放Vimeo视频
- 3. 使用MediaElement播放视频问题
- 4. MediaElement未播放视频
- 5. 在MediaElement中连续播放视频块
- 6. WPF MediaElement视频播放撕裂
- 7. C#MediaElement有时无法播放视频
- 8. 如何使用mediaElement或mediaPlayerElement播放受保护的视频
- 9. 如何使用WPF的MediaElement平滑播放视频序列?
- 10. 使用MediaStreamSource进行视频播放,WP7上的MediaElement
- 11. 使用UIWebView播放流视频问题
- 12. 使用Qt播放RTP视频流?
- 13. MediaElement播放视频,但没有视频显示
- 14. 使用WPF MediaElement放大视频
- 15. 在视频播放中播放视频
- 16. 的MediaElement加载视频播放器在音频标签
- 17. PyQt5 - 无法播放流中的视频
- 18. 在视频中间的网流播放
- 19. Android视频播放器视频流(目前正在使用ExoPlayer)
- 20. 如何使用html5视频标签播放HDS视频流
- 21. a + v的RTMP流只播放音频,不播放视频
- 22. 在WPF中播放流式视频
- 23. iOS从内存流中播放视频
- 24. 使用Silverlight播放视频
- 25. 使用AVPlayer播放视频
- 26. 使用MPMoviePlayer播放视频
- 27. 使用Kentico播放视频
- 28. 使用jsp播放视频
- 29. 如何播放RTMP视频流中的视频url在Android
- 30. 播放传入的视频流
我可以看到一个运行VLC作为ActiveX组件的WPF应用程序的例子吗?我想看看它看起来是什么样子,以及在我真的去做它之前让它运行的内容。 – rafale
嗨,斯图尔特,你可以发布你的例子使用VLC的地方,以便我可以看看。谢谢。 –