2009-04-05 4 views
6

Attualmente sto scrivendo un'applicazione che consentirà a un utente di installare una qualche forma di un'applicazione (forse un servizio di Windows) che aprirà una porta sul suo PC e dato un particolare destinazione sul disco rigido, sarà quindi in grado di riprodurre file mp3.C#: Streaming di un file audio da un server a un client

Avrò quindi un'altra applicazione che si collegherà al server (essendo il PC dell'utente) e sarà in grado di navigare i dati ospitati collegandosi a quel PC (remotamente of course) data la porta, e file mp3 in streaming dal server per l'applicazione


ho trovato alcuni tutorial online, ma la maggior parte di loro sono su file server in C# e scaricare permettono di scaricare un intero file. Quello che voglio è per lo streaming di un file mp3 in modo che inizia a suonare quando un certo numero di byte sono download (vale a dire, mentre viene tamponata)


Come faccio ad andare su nella realizzazione di un tale compito? Quello che ho bisogno di sapere in modo specifico è come scrivere questa applicazione (che trasformerò in un servizio di Windows in seguito) che ascolterà su una porta specificata un file di flusso, così posso accedere ai file con qualcosa del tipo: http://<serverip>:65000/acdc/wholelottarosie.mp3 e si spera che sia in grado di trasmettere il file in un WPF MediaPlayer.


[Update]

Stavo seguendo this tutorial di costruire un server di file e l'invio del file dal server al client. È quello che devo fare qualcosa del genere?

[Update]

sta leggendo questo post: Play Audio from a Stream using C# e penso che sembra molto promettente quanto a come posso riprodurre i file in streaming; ma ancora non so come posso effettivamente trasmettere i file dal server.

risposta

7

Non c'è alcuna differenza effettiva tra lo streaming e il download. Sono la stessa cosa Qualsiasi differenza è puramente semantica.

Se lo si desidera, è possibile "scaricare" un MP3 da qualsiasi server Web e avviare la riproduzione durante il download. Richiede solo il buffer di alcuni dati e l'invio immediato alle routine di decodifica e riproduzione.

Analogamente, anche i cosiddetti server "streaming" possono essere scaricati. Devi solo salvare i byte mentre vengono inviati attraverso il filo a un file.

Le applicazioni "Streaming" sono solo app che non sono progettate per salvare i file sul disco.

MODIFICA:

C'è un'eccezione. Due in realtà:

Innanzitutto, se si esegue lo streaming di audio "live", come radio o altri tipi in cui non è necessario il 100% di affidabilità, vengono trasmessi in streaming tramite UDP. Questo può ancora essere salvato, se lo desideri, ma è più orientato ai pacchetti rispetto allo stream oriented.

Il secondo è quando viene utilizzata la crittografia, nel qual caso è comunque possibile salvare il file, ma sarebbe inutile senza l'algoritmo e le chiavi di crittografia.

+0

È possibile eseguire lo streaming da IIS o utilizzare il server "Cassini" per scrivere il proprio. Non è difficile da fare. Ritirale in una cartella sul sito Web. Ricorda solo che gli spazi sono% 20 o + nelle cose del web. come http: //server/john%20Cougar%20Mellencamp.mp3 o http: //server/john+Cougar+Mellencamp.mp3 –

2

Questo semplicemente non è vero.

La differenza tra il download di un file e un flusso multimediale HTTP è l'intestazione di codifica, che è impostata sulla codifica chunked per un flusso. Inoltre, il download di un file ha un'intestazione Content-Length, in modo che il sistema destinatario possa conoscere in anticipo le dimensioni del file.

Non c'è un'intestazione Content-Length con uno streaming multimediale, pertanto non è previsto alcun endpoint. Piuttosto, solo una serie continua di blocchi di dati vengono ricevuti ed elaborati, fino a quando continuano ad apparire.

+0

Penso che tu stia partendo dal presupposto che "streaming" significhi contenuto live, senza fine. Questo non è necessariamente vero. Pandora, ad esempio, trasmette file singoli, come fanno altri servizi musicali. I video sono spesso "trasmessi in streaming" ma hanno punti finali e di partenza definiti. Stream si riferisce all'atto di riprodurre un file mentre viene trasmesso, non che si tratti di un flusso infinito di dati. –

+0

@MystereMan - Potrebbe esserci una disconnessione tra la risposta di Fred e la tua interpretazione. Non sta suggerendo che lo stream non può avere un endpoint definito, ma piuttosto che il client non viene mai informato di dove sarà quel endpoint fino a quando non arriva lì. Per quanto ci riguarda, potrebbe andare avanti all'infinito. – Brian