admin / 25.04.2018
Содержание
Последнее обновление: 27.01.2012
Для данной программы загрузим библиотеку NAudio и добавим в проект ссылку на нее. При запуске приложения, но автоматически начнет прослушивать все входящие голосовые сообщения. Поместим на форму кнопку, нажав на которую, мы будем запускать ввод с микрофона и передачу данных с микрофона по определенному адресу. Адрес, на который мы будем передавать наш голос, будем вводить в текстовое поле. В общем такой небольшой голосовой чат.
using System; using System.ComponentModel; using System.Windows.Forms; using System.Threading; using System.Net; using System.Net.Sockets; using NAudio.Wave; using NAudio.CoreAudioApi; namespace VoiceChat { public partial class Form1 : Form { //Подключены ли мы private bool connected; //сокет отправитель Socket client; //поток для нашей речи WaveIn input; //поток для речи собеседника WaveOut output; //буфферный поток для передачи через сеть BufferedWaveProvider bufferStream; //поток для прослушивания входящих сообщений Thread in_thread; //сокет для приема (протокол UDP) Socket listeningSocket; public Form1() { InitializeComponent(); //создаем поток для записи нашей речи input = new WaveIn(); //определяем его формат — частота дискретизации 8000 Гц, ширина сэмпла — 16 бит, 1 канал — моно input.WaveFormat = new WaveFormat(8000, 16, 1); //добавляем код обработки нашего голоса, поступающего на микрофон input.DataAvailable += Voice_Input; //создаем поток для прослушивания входящего звука output = new WaveOut(); //создаем поток для буферного потока и определяем у него такой же формат как и потока с микрофона bufferStream = new BufferedWaveProvider(new WaveFormat(8000, 16, 1)); //привязываем поток входящего звука к буферному потоку output.Init(bufferStream); //сокет для отправки звука client = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp); connected = true; listeningSocket = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp); //создаем поток для прослушивания in_thread = new Thread(new ThreadStart(Listening)); //запускаем его in_thread.Start(); } //Обработка нашего голоса private void Voice_Input(object sender, WaveInEventArgs e) { try { //Подключаемся к удаленному адресу IPEndPoint remote_point = new IPEndPoint(IPAddress.Parse(textBox1.Text), 5555); //посылаем байты, полученные с микрофона на удаленный адрес client.SendTo(e.Buffer, remote_point); } catch (Exception ex) { MessageBox.Show(ex.Message); } } //Прослушивание входящих подключений private void Listening() { //Прослушиваем по адресу IPEndPoint localIP = new IPEndPoint(IPAddress.Parse(«127.0.0.1»), 5555); listeningSocket.Bind(localIP); //начинаем воспроизводить входящий звук output.Play(); //адрес, с которого пришли данные EndPoint remoteIp = new IPEndPoint(IPAddress.Any, 0); //бесконечный цикл while(connected == true) { try { //промежуточный буфер byte[] data = new byte[65535]; //получено данных int received = listeningSocket.ReceiveFrom(data, ref remoteIp); //добавляем данные в буфер, откуда output будет воспроизводить звук bufferStream.AddSamples(data, 0, received); } catch (SocketException ex) {} } } private void button1_Click(object sender, EventArgs e) { input.StartRecording(); } private void Form1_FormClosing(object sender, FormClosingEventArgs e) { connected = false; listeningSocket.Close(); listeningSocket.Dispose(); client.Close(); client.Dispose(); if (output != null) { output.Stop(); output.Dispose(); output = null; } if (input != null) { input.Dispose(); input = null; } bufferStream = null; } } }
Потоковая передача данных — технология, называемая также «потоковое мультимедиа» — представляет собой набор средств и методов для обеспечения непрерывного получения пользователем аудиовизуальных данных от провайдера потокового вещания. Технологии потоковой передачи данных становятся все более важными с развитием сети интернет, поскольку большинство пользователей пока не имеет достаточно высокой скорости доступа для быстрой загрузки больших файлов мультимедиа. Используя эту технологию, программа или браузер клиента может начать воспроизведение мультимедиа данных, не дожидаясь загрузки всего мультимедийного материала. Так как звук и изображение отправляются абонентам в виде потока данных, такая передача называется «потоковой».
Для решения проблемы быстрого доступа к медиа-файлам через Интернет используется сочетание агрессивной компрессии с потоковой передачей данных. Сетевые протоколы пересылают файлы «пакетами» — фрагментами данных, непригодными для непрерывного проигрывания. Для обеспечения работоспособности технологии приложения для приёма-передачи данных реализуют по клиент-серверной технологии, при которой сервер собирает поток и, при получении запроса от клиента, отправляет этот поток ему. Клиент же получает данные, обрабатывает их и преобразовывает в звук и изображение. Если клиент получает данные недостаточно быстро, их воспроизведение не будет гладким, то есть будет обрываться или замирать. Возможна и обратная ситуация, когда приложение получает данные быстрее, чем воспроизводит. Для преодоления этой проблемы приложения, осуществляющие потоковую передачу медиа-данных, сохраняют полученные пакеты данных в памяти («буферизируют»), вследствие чего обеспечивается проигрывание файла с постоянной скоростью. Компрессия данных является компромиссом между качеством передаваемых данных и скоростью самого компьютера, а также скоростью доступа в интернет.
Изначально потоковая передача данных применялась для передачи аудио (интернет-радио и т.п.) Первая аудио-трансляция в интернете была произведена в США в августе 1994 г. Пионером в этой области стала компания RealNetworks (носившая тогда название Progressive Networks) основанная в 1995 г., а их формат RealAudio постепенно завоевал популярность и превратился в общепринятый стандарт, наравне с такими популярными сегодня форматами, как Flash или MP3. В последних версиях RealAudio предусматриваются динамическая компрессия, которая может переключаться в зависимости от качества соединения, а также обработка аудиоданных в реальном времени на стороне клиента (например, очистка и восстановление полученного звука). Компанией RealNetworks был также разработан формат RealVideo (1997 г.), однако в Российском сегменте интернета он не получил сильного распространения.
У аудиоверсий форматов QuickTime (первый релиз 2 декабря 1991 г.) и Windows Media имеются особенности, связанные с потоковой передачей данных. Так, при кодировании файлов в формат Windows Media Audio (WMA) используется непосредственно операционная система, вследствие чего, при желании, файлы можно закодировать так, что открыть их смогут только определенные пользователи. Технология DRM (Digital Rights Management, или система управления правами на цифровые данные) позволяет поставщикам данных различного содержания шифровать файлы таким образом, чтобы открыть их можно было лишь при наличии специального ключа (вполне естественно, что эту технологию особенно пылко приветствуют представители музыкальной индустрии). Помимо Windows Media DRM существует и другая, немного отличная от нее система шифрования и дистрибуции под названием Liquid Audio, которая поддерживается и программой Windows Media Player, и программой RealPlayer.
С увеличением скорости доступа в интернет у пользователей появилась возможность организовать не только аудио, но и видео-трансляции. Однако первая трансляция была произведена американским телеканалом ABC ещё в 1994 г. Для приёма передач использовался клиент CU-SeeMe, разработанный в 1992 г. Однако клиент CU-SeeMe не стал популярным. По способу организации потока различают протоколы «последовательные» (Progressive Streaming) и «в реальном времени» (Real-time Streaming). Передачу последовательным способом организовать проще, поскольку видео загружается на жёсткий диск пользователя и воспроизводится уже с него. Для его передачи достаточно воспользоваться обычным вэб-сервером. При организации передачи данных в реальном времени необходим специальный потоковый сервер (Unreal Media Server, Adobe Flash Media Server и тп.). Для воспроизведения потокового видео сейчас наиболее популярны протоколы RTSP, Multicast, RTMP, а также P2P и ещё несколько менее популярных реализаций:
Это сильно затрудняет поиск и исправление получаемых данных принимающим информацию приложением. При потере данных поток может быть отключен.
Для организации потокового вещания необходим сервер. Наиболее популярными реализациями являются: Adobe Flash Media Server, Icecast и Red5.
Воспроизводить потоковое вещание могут практически все современные медиа-проигрыватели, однако наиболее часто используются встраиваемый в вэб-страницы flash-плеер и программа SopCast, позволяющая организовать передачу данных по протоколу P2P. Популярные программы QuickTime и Windows Media также имеют возможность воспроизведения потокового видео, но редко используются для этого. Также распространена универсальная программа с открытым исходным кодом VideoLAN, которая позволяет не только получать, но и создавать свои потоки данных.
Используемые источники:
Варгасов Д. С.
В этой статье я рассмотрю методы работы с сетью, используя язык Java, а так же приведу теоретические выкладки по теории сетей (если такая есть).
Структура:
Протокол HTTP устроен следующим образом: клиент отправляет запрос, после чего сервер отправляет ответ клиенту. При этом клиент не может узнать список файлов в папке (как это можно сделать в ftp протоколе).
Отправляя запрос, клиент описывает себя через заголовок запроса, указывая свой язык, кодировку, браузер. Эти данные позволяют серверу правильно составить ответ. (см. ниже пример запроса от клиента)
В ответ, клиент получает header, в котором описывается сервер, и body, содержащий саму страницу, содержащую html размету (см. пример ответа от сервера).
Класс, который реализует вышеуказанные бесчинства, вы можете скачать с нашего сайта.
Если вас интересует только готовый код, который позволит загрузить произвольную веб-страницу, то ниже написан именно он:
Ну а теперь обратимся к более энциклопедическому повествованию, для этого стоит изучить java.net. О нем и пойдем речь дальше…
Следующие классы обеспечивают реализацию сетевых приложений. Все packege можно разделить на две категории:
A Low Level API (низкоуровневый API), который имеет дело со следующими абстракциями:
A High Level API (высокоуровневый API), который имеет дело со следующими абстракциями:
Как следует из названия, это просто идентификатор и не обеспечивает непосредственно средств для получения доступа к ресурсу.
Addresses используются повсеместно в java.net APIs как идентификатор хостов или сокетов. InetAddress класс представляющий IP (Internet Protocol) адрес, у него существует два подкласса:
Но в большинстве случаев, нет нужны указывать конкретно subclasses, так как InetAddress абстракция покрывает все требуемую функциональность.
Ниже описано приложение, состоящие из двух частей «сервера» (AppServer) и «клиента» (ClientApp). Вначале требуется запустить сервер (AppServer), который будет реагировать на обращение к указанному в настройках порту (в примере 9090), затем, каждый раз запуская «клиент» мы будем подключаться к порту и получать в ответ текущее время.
Класс NetworkInterface обеспечивает APIs функциональность всех сетевых интерфейсов (например Подключение к сети Ethernet или конечная точка PPP) к локальным компьютерам.
Именно через этот класс вы можете проверить поддержку IPv6 у компьютера.
Класс позволяет «разобрать» url на составные части.
Именно «на базе» URL мы можем открыть соединение с удаленным сервером. Для этого следует вызвать openConnection() или openStream(). Можно так же отметить, что URLConnection поддерживает Proxy.
URLConnection позволяет взаимодействовать с удаленным сервером.
It indicates end of boundary. // End of multipart/form-data. writer.append(«—» + boundary + «—«).append(CRLF); } }
Документация URLConnection.pdf
↑ Расскажите друзьям о статье
Как транслировать звук с ПК на Андроид по WiFi Скачать https://play.google.com/store/apps/details?id=com.vnd.wifiaudio
Don Andron: Ссылки не актуальные
эл хасп: Но сервер найти не могу.
Дмитрий Леду: Как транслироваьь с одного Андроида на другой. Вот что сверхактуально. Старых японских магов ещё очень много и качество звука там просто пиздец.
Алексей Сандовский: нет програмы
USER 123: У меня звук задерживается
Проект ХЭ: Спасибо тебе огромное, все работает чётко))
КАНАЛ ЗАКРЫТ:https://download.freedownloadmanager.org/Windows-PC/WiFi-Speaker/FREE.html новая ссылка
Yevgeniy Lobushko: Вы воспроизводили звуковой файл, который был у вас на жёстком диске ПК. А если нужно, например, чтобы ноут воспроизводил ролик с ютьюба (т.е. уже он работает по WiFi на приём трафика из интернета) и передавать звук на смартфон (по тому же WiFi), так возможно организовать?
П.с. а нельзя ли организовать передачу звука по блютуз?
Спасибо.
ツPeachy:http://wifiaudio.boards.net/thread/2/wifiaudio-support-links-download-application Сыллка на скачивание для компьютере
Lucky Boy: в играх работает?
волк волчок: Как называется программа которая показывает смартфон на монитор пк?)))))
Василий Котов: Вот кстати не битая ссылка http://wifiaudio.boards.net/
Lapituse: Скинь нормально через яндекс диск пк версию.Айтишник. У нас Россия а не Америка бл.
Eclipse Ace: Со смарт тв прокатит данная фича?
Евгений Новоселов: А с андроида на андроид, можно транслировать??
Андрей Сергеевич: вай фай один должен включен,на пк и на андройде?
danilka 88: а че там в видео говорят,а то у меня звука нет
Ярослав Томилов: а что на счёт качества передачи звука?
если запускать Flac?
Будет разница между кабелем и вай фаем по качеству)?
Андрей Петров: Хороший лайфхак. Можно теперь не скачивать аудио а запустить на компе
Обратный Флэш: Есть такое на айфон?
FILED UNDER : IT