2009-04-05 42 views
6

Tôi hiện đang viết một ứng dụng cho phép người dùng cài đặt một số ứng dụng (có thể là Dịch vụ Windows) sẽ mở cổng trên PC của nó điểm đến cụ thể trên đĩa cứng, sau đó sẽ có thể truyền trực tuyến các tệp mp3.C#: Truyền trực tuyến tệp âm thanh từ Máy chủ đến Máy khách

Sau đó, tôi sẽ có một ứng dụng khác sẽ kết nối với máy chủ (máy tính của người dùng) và có thể duyệt dữ liệu được lưu trữ bằng cách kết nối với PC đó (từ xa) cho cổng và các tệp mp3 trực tuyến từ máy chủ để ứng dụng


tôi đã tìm thấy một số hướng dẫn trực tuyến nhưng hầu hết trong số đó là về máy chủ file trong C# và họ tải về cho phép bạn tải về toàn bộ một tập tin. Những gì tôi muốn là để truyền một tập tin mp3 để nó bắt đầu chơi khi một số lượng nhất định các byte được tải về (ví dụ, trong khi nó đang được đệm)


Làm thế nào để đi về trong việc hoàn thành một nhiệm vụ như vậy? Những gì tôi cần biết cụ thể là làm thế nào để viết ứng dụng này (rằng tôi sẽ biến thành một dịch vụ Windows sau này) mà sẽ lắng nghe trên một cổng xác định một tập tin dòng, để sau đó tôi có thể truy cập các tập tin bằng một cái gì đó của loại: http://<serverip>:65000/acdc/wholelottarosie.mp3 và hy vọng có thể truyền tệp đó trong WPF MediaPlayer.


[Cập nhật]

Tôi đã sau this tutorial về việc xây dựng một máy chủ tập tin và gửi các tập tin từ máy chủ cho khách hàng. Là những gì tôi phải làm một cái gì đó của loại?

[Cập nhật]

Hiện nay đọc bài viết này: Play Audio from a Stream using C# và tôi nghĩ rằng nó trông rất hứa hẹn như thế nào tôi có thể chơi các file stream; nhưng tôi vẫn không biết làm thế nào tôi có thể thực sự truyền các tập tin từ máy chủ.

Trả lời

7

Không có sự khác biệt hiệu quả giữa phát trực tuyến và tải xuống. Chúng giống nhau. Bất kỳ sự khác biệt nào hoàn toàn là ngữ nghĩa.

Nếu bạn muốn, bạn có thể "tải xuống" một MP3 từ bất kỳ máy chủ web nào và bắt đầu phát nó trong khi bạn đang tải xuống. Nó chỉ yêu cầu bạn đệm một số dữ liệu và bắt đầu gửi nó đến các giải mã và phát lại các thói quen của bạn ngay lập tức.

Tương tự, thậm chí có thể tải xuống các máy chủ "trực tuyến". Bạn chỉ cần lưu các byte khi chúng đang được gửi qua dây tới một tệp.

Ứng dụng "Truyền trực tuyến" chỉ là các ứng dụng không được thiết kế để lưu tệp vào đĩa.

CHỈNH SỬA:

Có một ngoại lệ. Hai thực sự:

Đầu tiên, nếu bạn đang phát trực tiếp âm thanh "trực tiếp", chẳng hạn như radio hoặc các loại khác mà bạn không cần độ tin cậy 100% thì chúng sẽ phát trực tiếp bằng UDP. Điều này vẫn có thể được lưu nếu bạn muốn, nhưng nó định hướng gói hơn định hướng luồng.

Thứ hai là khi mã hóa được sử dụng, trong trường hợp này bạn vẫn có thể lưu tệp, nhưng sẽ vô dụng nếu không có thuật toán và khóa mã hóa.

+0

Bạn có thể truyền trực tiếp từ IIS hoặc sử dụng máy chủ "Cassini" để tự viết. Nó không khó để làm. Plop chúng trong một thư mục trên trang web. Chỉ cần nhớ rằng khoảng trống là% 20 hoặc + trong nội dung web. như http: //server/john%20Cougar%20Mellencamp.mp3 hoặc http: //server/john+Cougar+Mellencamp.mp3 –

2

Điều này đơn giản là không đúng sự thật.

Sự khác biệt giữa tải xuống tệp và luồng đa phương tiện HTTP là tiêu đề mã hóa, được đặt thành mã hóa chunked cho luồng. Ngoài ra, tệp tải xuống có tiêu đề Nội dung Độ dài, do đó hệ thống người nhận có thể biết trước kích thước tệp.

Không có tiêu đề Content-Length với luồng đa phương tiện, do đó không có điểm kết thúc mong đợi. Thay vào đó, chỉ một chuỗi dữ liệu liên tục được nhận và xử lý, miễn là chúng tiếp tục xuất hiện.

+0

Tôi nghĩ bạn cho rằng "phát trực tiếp" có nghĩa là trực tiếp, không bao giờ kết thúc nội dung. Điều đó không nhất thiết phải đúng. Pandora, ví dụ, stream các tập tin cá nhân, cũng như các dịch vụ âm nhạc khác. Video thường được "phát trực tuyến" nhưng có điểm kết thúc và điểm bắt đầu xác định. Luồng đề cập đến hành động phát một tệp khi nó đang được truyền, không phải là nó là luồng dữ liệu chưa từng có. –

+0

@MystereMan - Có thể có sự ngắt kết nối giữa câu trả lời của Fred và cách diễn giải của bạn. Anh ta không gợi ý rằng luồng không thể có một điểm cuối xác định, mà đúng hơn là khách hàng không bao giờ được biết về nơi mà điểm cuối sẽ đến cho đến khi nó đến đó. Theo như liên quan của nó, nó _could_ đi trên vô tận. – Brian

Các vấn đề liên quan