Aplikacja działająca na zasadzie krótkofalówki.

0

Zamierzam zrobić w C# w oparciu o Windows Forms aplikację Klient-Serwer działającą na zasadzie krótkofalówki. Do obsługi mikrofonu wykorzystałem NAudio. Na tę chwilę udało mi się zrobić aplikację umożliwiającą przeprowadzenie przez sieć rozmowy głosowej między dwoma komputerami oraz komunikator w oparciu o serwer i WebSocket, gdzie wielu użytkowników przesyła tę samą wiadomość do wielu użytkowników w tym samym czasie. Niestety nie udało mi się tych dwóch połączyć w jedno. Czy da się przesyłać strumień audio prze WebSocket? Chcę osiągnąć rozwiązanie działające w taki sposób, że jak jeden użytkownik mówi coś do mikrofonu, to wszyscy, pozostali go słyszą w prawie rzeczywistym czasie.

Edycja.
Widzę, że SignalR będzie moim przyjacielem przy tym zadaniu.

1

Nie jestem pewien, czy w tym przypadku jest to możliwe, ale myślę, że warto zainteresować się transmisją UDP typu "multicast". W końcu multicast jest wymyślony właśnie po to, żeby poprzez jedną czynność wysłać informację do wielu węzłów naraz.

Przez WebSocket da się przesłać audio nawet wtedy, gdy jest to TCP, tylko będzie trochę większe opóźnienie. Oprócz samego połączenia, wystarczy ogarnąć generowanie komunikatów w czasie rzeczywistym, np. co 100 ms zawierający 4410 próbek (w przypadku próbkowania 44100), a po stronie odbiorczej, generowanie dźwięku na podstawie otrzymanych próbek.

Przy generowaniu dźwięku, należy jeszcze dodać kontrolę średniego odstępu czasowego między momentem otrzymania komunikatu, a momentem rozpoczęcia odtwarzania. Niektóre karty dźwiękowe odtwarzają nieco szybciej lub wolniej niż powinny, co może być odczuwalne po kilku godzinach ciągłej pracy. W takiej sytuacji wystarczy co jakiś czas zdublować lub pominąć jedną próbkę dźwięku, nie będzie to słyszalne.

1 użytkowników online, w tym zalogowanych: 0, gości: 1