Windows Mobile App - 通过MMS协议播放流?

时间:2009-07-13 16:59:14

标签: .net windows-mobile compact-framework streaming mms

注意:这个问题正在被重新考虑,因为我在上一篇文章中意外点击了社区Wiki,显然这并没有提供足够的声誉来让人们回答它。这是旧问题的链接,请不要复制这些答案(无论如何它们都没有帮助):

Link to Original Question

现在问题是......

我正在尝试编写一个针对Windows Mobile 6.x的Windows Mobile应用程序,该应用程序将流式传输通过MMS协议提供的互联网广播流(仅此一项功能)。

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

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


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

Some MSDN Article about using WMPLib.dll

事实上,如果我导航到移动设备的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有任何建议吗?

提前谢谢。

3 个答案:

答案 0 :(得分:1)

当您使用彩信时,有两种方式可以为您的音乐提供服务:

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

请参阅此link

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

完成后,作为WinMobile 6.x一部分的Windows媒体播放器将能够从服务器调整和播放内容。客户端(WinMobile)方面无需任何操作。

答案 1 :(得分:0)

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

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

作为旁注,当将URL传递给Windows Mobile Media Player时,在URL的末尾添加/ *并查看是否播放该流。如果这不起作用,则流式传输方法可能无法提供有效的Feed。

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

答案 2 :(得分:0)

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