2009-04-05 4 views
6

В настоящее время я пишу приложение, которое позволит пользователю установить какую-либо форму приложения (возможно, службу Windows), которая откроет порт на своем ПК и предоставит вам конкретный пункт назначения на жестком диске, затем сможет передавать файлы MP3.C#: Потоковая передача аудиофайла с сервера на клиента

У меня будет другое приложение, которое будет подключаться к серверу (будучи компьютером пользователя) и иметь возможность просматривать размещенные данные, подключаясь к этому компьютеру (удаленно, конечно) с учетом порта, а - потоковое mp3-файл с сервер приложения


Я нашел некоторые учебники в интернет, но большинство из них о файловых серверах в C# и их загрузку позволяют загружать весь файл. То, что я хочу, чтобы поток mp3 файл, так что он начинает играть, когда определенное количество байт загрузки (то есть, в то время как его буферизации)


Как я могу идти о в выполнении такой задачи? То, что мне нужно знать конкретно, - это как написать это приложение (позднее я превращусь в службу Windows), который будет прослушивать указанный порт потоковыми файлами, чтобы затем я мог получить доступ к файлам примерно таким образом: http://<serverip>:65000/acdc/wholelottarosie.mp3 и, надеюсь, сможет передать этот файл в WPF MediaPlayer.


[Update]

Я следовал this tutorial о построении файлового сервера и отправки файла с сервера к клиенту. Я что-то делаю?

[Update]

В настоящее время читает этот пост: Play Audio from a Stream using C#, и я думаю, что это выглядит очень многообещающим о том, как я могу играть в потоковом режиме файлов; но я до сих пор не знаю, как я могу фактически передавать файлы с сервера.

ответ

7

Не существует эффективной разницы между потоковой передачей и загрузкой. Это одно и то же. Любая разница чисто семантическая.

Если вы хотите, вы можете «загрузить» MP3 с любого веб-сервера и начать играть в него во время его загрузки. Это просто требует, чтобы вы загружали некоторые данные и сразу же отправляли их в свои процедуры декодирования и воспроизведения.

Аналогичным образом могут быть загружены даже так называемые «потоковые» серверы. Вам просто нужно сохранить байты, поскольку они передаются по каналу в файл.

«Потоковые» приложения - это просто приложения, которые не предназначены для сохранения файлов на диск.

EDIT:

Исключение составляет. Два действительно:

Во-первых, если вы транслируете «живые» аудио, такие как радио или другие типы, где вам не нужна 100-процентная надежность, тогда они передают с использованием UDP. Это может быть сохранено, если вы хотите, но оно более ориентировано на пакет, чем ориентированное на поток.

Во-вторых, когда используется шифрование, в этом случае вы все равно можете сохранить файл, но это было бы бесполезно без алгоритма шифрования и ключей.

+0

Вы можете передавать данные из IIS или использовать сервер «Cassini», чтобы написать свой собственный. Это не сложно. Поместите их в папку на веб-сайте. Просто помните, что пробелы составляют% 20 или + в веб-материалах. например http: //server/john%20Cougar%20Mellencamp.mp3 или http: //server/john+Cougar+Mellencamp.mp3 –

2

Это просто неправда.

Разница между загрузкой файла и потоком мультимедиа HTTP - это заголовок кодировки, который настроен на кодирование для потоковой передачи. Кроме того, загрузка файла имеет заголовок Content-Length, поэтому система получателей может заранее знать размер файла.

Нет заголовка Content-Length с мультимедийным потоком, поэтому нет ожидаемой конечной точки. Скорее всего, только непрерывная серия кусков данных принимается и обрабатывается до тех пор, пока они продолжают появляться.

+0

Думаю, вы предполагаете, что «потоковая передача» означает «живое», бесконечное содержание. Это не обязательно так. Например, Pandora передает отдельные файлы, как и другие музыкальные сервисы. Видео часто «транслируются», но имеют определенные конечные и начальные точки. Поток относится к акту воспроизведения файла по мере его передачи, а не к тому, что он является бесконечным потоком данных. –

+0

@MystereMan - Может быть разрыв между ответом Фреда и вашей интерпретацией. Он не предполагает, что поток не может иметь определенную конечную точку, а скорее, что клиент никогда не узнает, где эта конечная точка будет, пока она не придет туда. Что касается этого, то он может продолжаться бесконечно. – Brian

Смежные вопросы