C#: потоковая передача аудиофайла с сервера клиенту

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

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


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


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


[обновление]

Я в этом уроке о создании файлового сервера и отправке файла с сервера клиенту. Что я должен сделать что-то рода?

[обновление]

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

2 ответов


нет никакой принципиальной разницы между потоковой передачи и скачивания. Это одно и то же. Любое различие чисто семантическое.

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

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

"потокового" приложения просто приложения, которые не предназначены для сохранения файлов на диск.

EDIT:

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

во-первых, если вы потоковое "живое" аудио, например, радио или другие типы, где вам не нужна 100% надежность, то они поток с помощью UDP. Это все еще может быть сохранено, если вы хотите, но это больше ориентировано на пакет, чем поток ориентированный.

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


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

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

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