raf*_*ale 9 c# wpf wcf mediaelement
是否可以使用WPF MediaElement从System.IO.Stream对象播放流式视频?正在从存储媒体文件的WCF服务检索Stream对象.
小智 14
在任何人浪费时间为自己找到它之前:在WPF应用程序中托管Silverlight MediaElement是不可能的.原因是它是PresentationFramework.dll(不可避免的WPF)和System.Windows.dll(Silverlight版本)中出现的多种类型之一,它们具有相同的名称和相同的名称空间,但是类型不同.(有人应该解释为什么我们有微软命名空间!)
小智 14
这可能为时已晚,希望如果您仍在寻找答案,这可能会有所帮助.
是的,您可以使用WPF媒体元素从内存流播放视频.
我使用了一个名为boxed app的第三方组件,感谢BoxedApp提供了一百万 - http://www.boxedapp.com/boxedappsdk/
我必须稍微更新代码以使其适用于byte [].将以下构造函数从BoxedApp复制到CustomFileStream类
public CustomFileStream(byte[] data)
{
_Stream = new MemoryStream(data);
_Length = _Stream.Length;
_data = data;
_Offset = 0;
}
Run Code Online (Sandbox Code Playgroud)
创建一个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();
}
}
Run Code Online (Sandbox Code Playgroud)
- 对于盒装应用程序,请关注样本,就是这样......你在一个快乐的世界......
对于QT Player来说也是如此.
根据响应,如果提供的信息不够,我将添加一个完整的示例.
快乐的编码....
如果你可以让WCF通过a传递媒体对象,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 /库/ cc190669%28V = VS.95%29.aspx
我知道这不是您要的,但是您可以在WPF的窗口中托管VLC ActiveX组件,然后使用该VLC控件连接到流并显示该流。这就是我通过WPF进行流式传输的方式。
编辑:此页面有一个如何在WPF中托管ActiveX控件的示例
| 归档时间: |
|
| 查看次数: |
54626 次 |
| 最近记录: |