0

注意:这个问题被重新提出是因为我在上一个问题中不小心点击了社区 Wiki,显然这并没有以声誉的形式为人们提供足够的激励来回答它。这是旧问题的链接,请不要重复这些答案(无论如何它们并不是完全有帮助):

链接到原始问题

现在问题来了……

我正在尝试编写一个针对 Windows Mobile 6.x 的 Windows Mobile 应用程序,它将通过 MMS 协议传输互联网广播流(只是其他功能之一)。

.NET Compact Framework 是否具有可以执行此操作的内置控件或 API?还是我需要开始寻找第三方库?

我有点困惑,为什么 .NET Compact Framework 不支持这一点?我的意思是 MMS 是微软专有的 Windows 流媒体协议。


我实际上也不确定如何通过 http 流式传输 MP3。我试过这个,但没有成功:

一些关于使用 WMPLib.dll 的 MSDN 文章

事实上,如果我导航到移动设备的 Windows Media Player 本身并为其提供我试图以编程方式流式传输的相同 URL,则它是不成功的。但是,这个相同的 URL 在我的台式计算机上的 Windows Media Player 中确实有效。是的,它输入正确。

实际上,我遇到了另一个想法,即在我的自定义应用程序中在 Windows Mobile 上播放 MP3 文件,但它不具备即时流式传输的能力。相反,它会在移动设备上播放之前下载整个文件。这是一些代码:

string url = @"http://blahblah.com/blahblah.mp3";
string tempFilePath = Path.GetTempPath() + "tempFile.mp3";

HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(url);
using (HttpWebResponse response = (HttpWebResponse)request.GetResponse())
{
 byte[] buffer = new byte[1024];
 int bytesRead = 0;

 using (Stream responseStream = response.GetResponseStream())
 {
  using (FileStream fs = new FileStream(tempFilePath, FileMode.Create, FileAccess.ReadWrite))
  {
   while ((bytesRead = responseStream.Read(buffer, 0, buffer.Length)) > 0)
   {
    fs.Write(buffer, 0, bytesRead);
   }
  }
 }
}

SndPlaySync(tempFilePath, 0);

这是 DllImport:

[DllImport("aygshell.dll", SetLastError = true)]
private static extern IntPtr SndPlaySync(string Path, uint Flags);

有人对如何流式传输 MP3 有任何建议吗?

先感谢您。

4

3 回答 3

1

当您使用 MMS 时,有两个选项可以提供您的音乐:

  • 安装 Windows Media Server 并为您的音乐添加发布点
  • 如果你有一个 IIS 服务器,你需要一个 WMS 插件,它允许你通过 HTTP 流式传输 mp3

请参阅此链接

请注意,以上两个是目前可用于通过 MMS 提供媒体的唯一选项。如果你有一些其他的网络服务器,它需要一个像上面提到的用于 IIS 的插件(不太可能找到)。

完成后,作为 WinMobile 6.x 一部分的 windows 媒体播放器将能够从服务器调整和播放内容。客户端(WinMobile)端不需要任何东西。

于 2009-07-14T05:46:34.633 回答
0

据我所知,微软不再支持彩信了!无论如何,我认为实现 MMS 协议不是问题,您可以使用任何可以接收 MMS 流转储套接字的 Windows(非移动)应用程序,并使用 Socket 类在 Windows Mobile 上执行相同操作,主要问题是解码接收到的流!对我来说有两种方法:a)DirectShow 推送源过滤器,它将样本推送到解码器(有时您会遇到设备上不存在所需解码器的情况)b)您可以为 windows mobile(CE)构建 ffmpeg

于 2009-07-15T10:32:24.927 回答
0

使用内置媒体播放器时,Windows Mobile 平台上启用了彩信支持。启用 MMS 播放的第一种也是最简单的方法是在 Windows Mobile 上生成 Media Player 的实例,并将您需要播放的流的 URL 传递给它,您已经提到过这样做。但是,您所指的文章是关于在 Windows 而不是 Windows Mobile 上启动媒体播放器的。从理论上讲,您应该能够像打开 HTTP 链接一样打开有效的 MMS URL,并且移动设备将自动启动 Windows Media Player。

从开发方面来看,我不知道任何允许播放视频流的框架的原生 .Net 库,除了我没有更新的 Silverlight 库。这些可能会在今年晚些时候或明年初用于移动。由于紧凑框架是主框架的子集,我在最近的 2 个 SDK 版本中没有看到任何对流的引用。

附带说明一下,在将 URL 传递给 Windows Mobile Media Player 时,在 URL 的末尾添加 /* 并查看它是否会播放流。如果这不起作用,则流式传输方法可能无法提供有效的提要。

我承认我没有看过新的 Windows Mobile 6.5 SDK,它很可能包含这个功能,但是 MSDN 还没有向我透露任何东西。

于 2009-07-14T07:21:34.880 回答