Приложение для Windows Mobile - Воспроизведение потока через протокол MMS? - PullRequest
0 голосов
/ 13 июля 2009

ПРИМЕЧАНИЕ: Этот вопрос задается повторно, потому что я случайно нажал на Вики сообщества в предыдущем, и, очевидно, это не давало людям достаточных стимулов в виде репутации, чтобы ответить на них. Вот ссылка на старый вопрос, пожалуйста, не дублируйте эти ответы (они все равно не помогли):

Ссылка на оригинальный вопрос

Теперь вот вопрос ...

Я пытаюсь написать приложение для Windows Mobile, ориентированное на Windows Mobile 6.x, которое будет передавать потоковое интернет-радио, передаваемое по протоколу MMS (среди прочего, только одна функция).

Есть ли в .NET Compact Framework встроенные элементы управления или API, которые будут это делать? Или мне нужно начать искать стороннюю библиотеку?

Я немного запутался, почему это не будет поддерживаться в .NET Compact Framework? Я имею в виду, что MMS является проприетарным потоковым протоколом Windows от Microsoft.


На самом деле я тоже не уверен, как транслировать MP3 через http. Я пробовал это, но это было неудачно:

Некоторые статьи MSDN об использовании WMPLib.dll

На самом деле, безуспешно, если я перехожу к самому Windows Media Player на мобильном устройстве и даю ему тот же URL-адрес, который я пытаюсь программно транслировать. Однако этот же URL-адрес работает из проигрывателя Windows Media на моем настольном компьютере. И да, он введен правильно.

На самом деле я натолкнулся на другую идею воспроизвести файл MP3 на Windows Mobile в моем собственном приложении, но у него нет возможности потоковой передачи на лету. Вместо этого он загружает весь файл перед его воспроизведением на мобильном устройстве. Вот некоторый код:

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 ]

1 голос
/ 14 июля 2009

Когда вы используете MMS, есть два варианта подачи вашей музыки:

  • установите Windows Media Server и добавьте точку публикации своей музыки
  • если у вас есть IIS-сервер, вам нужно получить плагин WMS, который позволит вам транслировать mp3 по HTTP

Ссылка на эту ссылку .

Обратите внимание, что вышеперечисленные два варианта являются единственными доступными в настоящее время для показа мультимедиа через MMS. Если у вас есть какой-либо другой веб-сервер, ему понадобится плагин, подобный тому, который упомянут выше для IIS (вряд ли найдется).

После этого Windows Media Player, входящий в состав WinMobile 6.x, сможет настраивать и воспроизводить файлы с сервера. Ничего не требуется на стороне клиента (WinMobile).

0 голосов
/ 15 июля 2009

Как я знаю, Microsoft больше не поддерживает MMS! Во всяком случае, я думаю, что это не проблема для реализации протокола MMS. Вы можете взять любое приложение Windows (не мобильное), которое может получать сокеты потока MMS и делать то же самое на Windows Mobile, используя класс Socket, основной проблемой будет декодирование полученного потока! Там 2 способа, как для меня: a) DirectShow push исходный фильтр, который будет выдавать сэмплы в декодер (иногда возникает ситуация, когда требуемый декодер не существует на устройстве) б) Вы можете собрать ffmpeg для Windows Mobile (CE)

0 голосов
/ 14 июля 2009

Поддержка MMS включена на платформе Windows Mobile при использовании встроенного медиаплеера. Первый и самый простой способ включить воспроизведение MMS - создать экземпляр Media Player в Windows Mobile и передать ему URL-адрес потока, который необходимо воспроизвести, о чем вы уже упоминали. Однако статья, на которую вы ссылаетесь, касается запуска Media Player в Windows, а не в Windows Mobile. Теоретически вы должны иметь возможность открывать рабочий URL-адрес MMS так же, как вы открываете ссылку HTTP, и мобильное устройство автоматически запускает Windows Media Player.

С точки зрения разработки я не знаю ни одной библиотеки .Net, встроенной в платформу, которая позволяет воспроизводить видеопотоки, за возможным исключением библиотек Silverlight, с которыми я не в курсе. Они могут быть доступны для мобильных устройств в конце этого года или в начале следующего года. Поскольку компактный каркас является подмножеством основного каркаса, я не видел ссылок на потоковую передачу в последних 2 выпусках SDK.

В качестве дополнительного примечания, при передаче URL-адреса в Windows Mobile Media Player добавьте / * в конце URL-адреса и посмотрите, воспроизводит ли он поток. Если это не работает, метод потоковой передачи может не предоставлять действительный канал.

Я признаю, что я не смотрел на новый Windows Mobile 6.5 SDK, и вполне возможно, что он может содержать эту функцию, однако MSDN еще ничего мне не раскрыл.

...