Я пишу TCP сервер-клиент приложение, часть которого которое реализует воспроизведение выбранного сервером .mp3 файла на всех подключённых клиентах. Почитав, решил использовать библиотеку NAudio для обработки аудио. Вообще я новичок в работе со звуком.
Вот код передачи mp3:
public void PlayFromFile(string fileName, UserList _clients)
{
Mp3FileReader reader = new Mp3FileReader(fileName);
Mp3Frame frame;
// For each frame
while ((frame = reader.ReadNextFrame()) != null)
{
foreach (var client in _clients)
{
NetworkStream outputStream = client.GetStream();
outputStream.Write(frame.RawData, 0, frame.RawData.Length);
}
}
}
Подскажите, правильный ли выбран подход для отправки пакетов приложениям-клиентам и если да - как лучше всего ловить и воспроизводить данные на стороне клиента?
Заранее спасибо.
Подход неправильный по нескольким причинам.
Вы никак не отделяете разные фреймы друг от друга - в итоге получатель не сможет определить где заканчивается один и начинается другой. Напомню, что протокол TCP работает не с отдельными пакетами, а с потоком.
Вы используете TCP. TCP - это не лучший протокол для передачи в ситуации когда вам нужна стабильная задержка, но не нужна гарантия доставки. Для передачи реалтайм-аудио и видео лучше использовать UDP, а еще лучше - RTP.
Вы декодируете звук перед передачей по сети. Передача его в сжатом виде намного эффективнее...
Виртуальный выделенный сервер (VDS) становится отличным выбором
В моей программе доступ к функции должно иметь только определенное количество потоковЕсть следующий код:
Хочу выводить нажатые клавиши пользователем, в том числе сочетанияПробовал разные Key Lisener/Hook (они работают по одному и тому же принципу), но везде...
Как сделал выборку листов при импорте из Excel файла в бд laravelНа данный момент мой импорт: