【问题标题】:C#: Streaming an Audio file from a Server to a ClientC#:将音频文件从服务器流式传输到客户端
【发布时间】:2010-10-17 17:09:48
【问题描述】:

我目前正在编写一个应用程序,该应用程序将允许用户安装某种形式的应用程序(可能是 Windows 服务),该应用程序将在其 PC 上打开一个端口并在硬盘上给定一个特定目标,然后能够流式传输 mp3 文件。

然后我将拥有另一个应用程序,它将连接到服务器(作为用户的电脑)并能够通过连接到给定端口的那台电脑(当然是远程)来浏览托管数据,并且 从服务器到应用程序


我在网上找到了一些教程,但其中大部分是关于 C# 文件服务器的,它们的下载允许您下载整个文件。我想要的是流式传输 mp3 文件,以便在下载一定数量的字节时开始播放(即,在缓冲时)


我该如何完成这样的任务?我需要特别知道的是如何编写这个应用程序(稍后我将变成一个 Windows 服务),它将在指定端口上侦听流文件,以便我可以通过某种方式访问​​文件:@ 987654323@ 并希望能够在 WPF MediaPlayer 中流式传输该文件。


[更新]

我正在关注this tutorial 构建文件服务器并将文件从服务器发送到客户端。是我必须做的那种事情吗?

[更新]

目前正在阅读这篇文章:Play Audio from a Stream using C#,我认为我如何播放流文件看起来很有希望;但我仍然不知道如何真正从服务器流式传输文件。

【问题讨论】:

    标签: c# wpf audio streaming


    【解决方案1】:

    流式传输和下载之间没有有效的区别。他们是一样的。任何区别都纯粹是语义上的。

    如果您愿意,您可以从任何网络服务器“下载”一个 MP3,并在下载的同时开始播放。它只要求您缓冲一些数据并立即开始将其发送到您的解码和播放例程。

    同样,即使是所谓的“流媒体”服务器也可以下载。您只需要保存字节,因为它们通过线路发送到文件。

    “流式传输”应用程序只是并非旨在将文件保存到磁盘的应用程序。

    编辑:

    有一个例外。两个真的:

    首先,如果您正在流式传输“实时”音频,例如广播或其他不需要 100% 可靠性的类型,则它们使用 UDP 流式传输。如果您愿意,这仍然可以保存,但它更面向数据包而不是面向流。

    第二个是使用加密的时候,这种情况下你可能还可以保存文件,但是没有加密算法和密钥就没有用了。

    【讨论】:

    【解决方案2】:

    这根本不是真的。

    文件下载和 HTTP 多媒体流之间的区别在于编码头,它被设置为流的分块编码。另外,一个文件下载有一个Content-Length头,所以接收方系统可以提前知道文件的大小。

    多媒体流没有 Content-Length 标头,因此没有预期的终点。相反,只要它们继续出现,就会接收和处理一系列连续的数据块。

    【讨论】:

    • 我认为您假设“流媒体”意味着直播,永无止境的内容。这不一定是真的。例如,Pandora 像其他音乐服务一样流式传输单个文件。视频通常是“流式传输”的,但有明确的结束点和起点。流是指在传输文件时播放文件的行为,而不是说它是一个永无止境的数据流。
    • @MystereMan - Fred 的回答与您的解释之间可能存在脱节。他并不是说流不能有一个定义的端点,而是客户端永远不会知道端点在哪里,直到它到达那里。就它而言,它可以无休止地继续下去。
    猜你喜欢
    • 2014-01-19
    • 1970-01-01
    • 2020-11-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多