【问题标题】:Playing streaming video in WPF在 WPF 中播放流媒体视频
【发布时间】:2015-01-26 23:43:52
【问题描述】:

我编写了一个流媒体文件的 WCF 服务。我现在正在编写一个使用此服务的 WPF 应用程序,并且刚刚发现 MediaElement 不接受 Stream 对象作为源属性的输入参数。

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

简而言之,我正在寻找的是文档或示例中的内容,这些文档或示例演示了 WPF 中的流式传输,并且如果可能的话,也很容易实现。解决方案不一定是完美的;我所需要的只是有效的东西。

【问题讨论】:

    标签: c# wpf streaming


    【解决方案1】:

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

    其他选项(尽管您似乎已经排除了它们):

    不确定这是否适合您,但有用于多媒体的商业库,包括从 WPF 中的流中播放视频:

    【讨论】:

    • WCF 服务使用 TCP 绑定,并作为托管 Windows 服务在 IIS 外部运行。我能否使用 TcpListener 而不是 HttpListener 以某种方式获取传入 Stream 的 URL?
    • 我假设您的 WCF 服务返回一个 IStream - 如果此假设成立,那么您只需使用 WCF 代理类来获取 Stream,然后将该流提供给我提到的库和或“使用 HttpListener 将其中继到应用程序内部的 http URL,并告诉 MediaElement 使用该 http URL……我强烈建议使用其中一个库……
    • 我以前从未使用过 HttpListener 类,所以我不太明白如何将流中继到 HTTP URL。你是这个意思吗? pastebin.com/iELVyybp
    • 这是第一步,该代码中有一些怪癖(问题)和效率低下。但我再次强烈反对这种溃败,因为使用 HttpListener 是一个权限/权利问题(它基本上是一个“嵌入式 HTTP 服务器”)取决于您的用户拥有的权限/权利...
    • 在这种情况下,您是否绝对确定 Visioforge 的媒体播放器 SDK 将允许 WPF 应用程序播放 WCF 服务返回的 IStream?
    【解决方案2】:

    有一种方法可以使用伪文件来实现这一点,即模拟文件系统调用。

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

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

    例如这里描述了这种方法(文件调用只是映射到适当的 IStream 方法:ReadFile -> Read、SetFilePointer -> Seek、CreateFile -> Clone 等):http://boxedapp.com/encrypted_video_streaming.html

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-04-13
      • 1970-01-01
      • 1970-01-01
      • 2012-11-20
      相关资源
      最近更新 更多