2011-08-21 222 views
9

我写过一个WCF服务,用于流媒体文件。我正在编写一个使用此服务的WPF应用程序,并且只是发现MediaElement不接受Stream对象作为源属性的输入参数。在WPF中播放流式视频

我一直在搜索过去两天无休止地看过几种选择,包括WPF内的Silverlight视口,VLC ActiveX控件,VideoRendererElement和WPFMediaKit。不幸的是,由于缺乏文档和/或示例,我一直受到阻碍,到目前为止还没有取得任何进展。事实上,这是我第一次使用WPF也无济于事。

简而言之,我正在寻找的是随文档或示例演示WPF中的流,并且如果可能的话,也很容易实现。解决方案不一定非常完美;我所需要的是有用的东西。

回答

5

您可以在您的WPF应用程序内托管一个HttpListener,并通过由HttpListener提供至MediaElement.Source的URL提供您从WCF服务收到的流。

其他选项(但你似乎已经排除出来):

不知道这是一个选择,但也有商业库适用于多媒体,包括来自WPF视频播放的视频流:

+0

的WCF服务使用TCP绑定和作为托管Windows服务在IIS之外运行。我能够使用TcpListener而不是HttpListener以某种方式获取传入流的URL吗? – rafale

+0

我假设你的WCF服务返回一个IStream - 如果这个假设是真的,那么你只需使用WCF代理类来获取流,然后将该流提供给我提到的库或者“转发”到一个http URL在你的应用程序中使用HttpListener并告诉MediaElement使用那个http URL ...我强烈建议使用其中的一个库,尽管... – Yahia

+0

我从来没有使用过HttpListener类,所以我不太明白我的意图将一个流中继到一个HTTP URL。你是这个意思吗? http://pastebin.com/iELVyybp – rafale

0

有一种方法来实现这一目标用pseudofiles,即文件系统调用模拟。

当路径通过时,媒体播放器首先打开文件(调用CreateFile),然后从中读取数据(调用ReadFile),移动文件中的位置(调用SetFilePointer)。

它只是在视频文件中移动并读取所需的块。

例如这里描述的这种方法(文件调用只映射到相应的IStream方法:ReadFile的 - >阅读,SetFilePointer - >寻找,的CreateFile - >克隆等):http://boxedapp.com/encrypted_video_streaming.html