C #: Потоковая передача аудиофайла с сервера на клиент - PullRequest
6 голосов
/ 06 апреля 2009

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

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


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


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


[Update]

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

[Update]

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

Ответы [ 2 ]

8 голосов
/ 06 апреля 2009

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

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

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

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

EDIT:

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

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

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

2 голосов
/ 18 ноября 2011

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...