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 и ещё несколько менее популярных реализаций: 

  1. Дейтаграммные протоколы, такие как UDP (User Datagram Protocol), отправляют поток медиаинформации как поток отдельных маленьких пакетов. Протокол прост и эффективен, но в спецификации протокола нет гарантии доставки данных получателю.

    Как передать аудио в локальной сети без задержки?

    Это сильно затрудняет поиск и исправление получаемых данных принимающим информацию приложением. При потере данных поток может быть отключен.

  2. Протоколы RTSP (Real-Time Streaming Protocol), RTP (Real-time transport protocol) и RTCP (Real-Time Control Protocol) специально разрабатывались для передачи мультимедийной информации по сети. В протоколах предусмотрена возможность контролируемой передачи видеопотока. Последние два построены на основе UDP.
  3. Надежные протоколы, такие как TCP, гарантируют корректность получаемых данных клиентами потокового вещания. Однако передаваемая информация может стать неактуальной при большом количестве ошибок в пакете данных, что также может вызвать значительные задержки на время, затраченное на пересылку поврежденной информации.
  4. Протоколы Unicast отправляют отдельную копию данных каждому клиенту. Unicast подходит для большинства пользователей сети Интернет, но сильно затрудняет масштабирование сервера для бо́льшего количества клиентов. При широковещательной передаче одна копия данных передается всем клиентам сервера.
  5. Протоколы Multicast разработаны для снижения нагрузки с серверов при получении потокового мультимедиа большим количеством клиентов. Эти протоколы отсылают одну порцию данных целой группе клиентов. Одним из потенциальных недостатков групповой передачи данных является отсутствие возможности реализовать функцию «видео по запросу», а также невозможность управлять воспроизведением со стороны пользователя. Однако эта проблема может быть решена внедрением в сеть передачи данных кэширующих серверов и буферизирующего принимаемый поток программного обеспечения.
  6. Протокол RTMP (Real Time Messaging Protocol) разработан компанией Adobe и реализован в Adobe Flash Media Server. На данный момент это наиболее распространённый протокол. Он массово используется во встраиваемых в веб-страницы flash-плеерах.
  7. Протоколы P2P (Peer-to-peer) могут использоваться при распространении предварительно сохраненного мультимедиа контента между компьютерами. Это снимает нагрузку с сервера, однако сеть передачи данных между сервером и одним из клиентов становится узким местом данного варианта реализации потокового вещания информации.

Для организации потокового вещания необходим сервер. Наиболее популярными реализациями являются: Adobe Flash Media Server, Icecast и Red5.
Воспроизводить потоковое вещание могут практически все современные медиа-проигрыватели, однако наиболее часто используются встраиваемый в вэб-страницы flash-плеер и программа SopCast, позволяющая организовать передачу данных по протоколу P2P. Популярные программы QuickTime и Windows Media также имеют возможность воспроизведения потокового видео, но редко используются для этого. Также распространена универсальная программа с открытым исходным кодом VideoLAN, которая позволяет не только получать, но и создавать свои потоки данных.

Используемые источники:

  1. ru.wikipedia.org/wiki/Потоковое_мультимедиа
  2. webopedia.com/TERM/S/streaming.html
  3. en.wikipedia.org/wiki/RealAudio
  4. sapr.ru/Article.aspx?id=10935

Варгасов Д. С.

В этой статье я рассмотрю методы работы с сетью, используя язык Java, а так же приведу теоретические выкладки по теории сетей (если такая есть).

Теория

Структура:

  • Стартовая строка (англ. Starting line) — определяет тип сообщения;
  • Заголовки (англ. Headers) — характеризуют тело сообщения, параметры передачи и прочие сведения;
  • Тело сообщения (англ. Message Body) — непосредственно данные сообщения. Обязательно должно отделяться от заголовков пустой строкой.

Протокол HTTP устроен следующим образом: клиент отправляет запрос, после чего сервер отправляет ответ клиенту. При этом клиент не может узнать список файлов в папке (как это можно сделать в ftp протоколе).
Отправляя запрос, клиент описывает себя через заголовок запроса, указывая свой язык, кодировку, браузер. Эти данные позволяют серверу правильно составить ответ. (см. ниже пример запроса от клиента)

GET /wiki/страница HTTP/1.1 Host: edunow.su User-Agent: Mozilla/5.0 (X11; U; Linux i686; ru; rv:1.9b5) Gecko/2008050509 Firefox/3.0b5 Accept: text/html Connection: close

В ответ, клиент получает header, в котором описывается сервер, и body, содержащий саму страницу, содержащую html размету (см. пример ответа от сервера).

HTTP/1.1 200 OK Date: Wed, 11 Feb 2009 11:20:59 GMT Server: Apache X-Powered-By: PHP/5.2.4-2ubuntu5wm1 Last-Modified: Wed, 11 Feb 2009 11:20:59 GMT Content-Language: ru Content-Type: text/html; charset=utf-8 Content-Length: 1234 Connection: close <html><body><a href="http://example.com/about.html#contacts">Click here</a></body></html>

Класс, который реализует вышеуказанные бесчинства, вы можете скачать с нашего сайта.

Готовый сниппет

Если вас интересует только готовый код, который позволит загрузить произвольную веб-страницу, то ниже написан именно он:

import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.net.URL; import java.net.URLConnection; public class Main { public static void main(String[] args) throws Exception{ try{ System.out.println(getPage(«http://edunow.su»)); } catch (IOException e){ System.out.println(e.getMessage()); } } /** * Загружает веб-страницу * @param page_url URL веб-страницы * @return исходный код страницы * @throws IOException */ static String getPage(String page_url) throws IOException { URL url = new URL(page_url); URLConnection urlConnection = url.openConnection(); BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(urlConnection.getInputStream())); StringBuilder lines = new StringBuilder(); String line; while ( (line=bufferedReader.readLine()) != null){ lines.append(line).append(» «); } return lines.toString(); } }

Ну а теперь обратимся к более энциклопедическому повествованию, для этого стоит изучить java.net. О нем и пойдем речь дальше…

Описание Package java.net

Следующие классы обеспечивают реализацию сетевых приложений. Все packege можно разделить на две категории:
A Low Level API (низкоуровневый API), который имеет дело со следующими абстракциями:

  • Addresses, которые являются сетевыми идентификаторами, пример IP addresses
  • Sockets, которые являются основным двунаправленным механизмом передачи данных
  • Interfaces, которые описывают сетевые интерфейсы

A High Level API (высокоуровневый API), который имеет дело со следующими абстракциями:

  • URIs, которые представляют Universal Resource Identifiers.

    Как следует из названия, это просто идентификатор и не обеспечивает непосредственно средств для получения доступа к ресурсу.

  • URLs, представляют Universal Resource Locators, который является одновременно старше концепции URI, и среднее, чтобы получить доступ к ресурсам.
  • Connections, который представляет подключение к ресурсу, на который указывает URLs. Этот абстрактный класс делегирует большую часть работы к базовым обработчикам протоколов, таким как HTTP или FTP.
  • HttpURLConnection подкласс URLConnection, который предоставляет некоторые дополнительные функциональные возможности, характерные для протокола HTTP.

Low Level API (Низкоуровневый API)

Addresses

Addresses используются повсеместно в java.net APIs как идентификатор хостов или сокетов. InetAddress класс представляющий IP (Internet Protocol) адрес, у него существует два подкласса:

  • Inet4Address для IPv4 адресов
  • Inet6Address for IPv6 адресов

Но в большинстве случаев, нет нужны указывать конкретно subclasses, так как InetAddress абстракция покрывает все требуемую функциональность.

Sockets

Ниже описано приложение, состоящие из двух частей «сервера» (AppServer) и «клиента» (ClientApp). Вначале требуется запустить сервер (AppServer), который будет реагировать на обращение к указанному в настройках порту (в примере 9090), затем, каждый раз запуская «клиент» мы будем подключаться к порту и получать в ответ текущее время.

AppServer.javaimport java.io.*; import java.net.ServerSocket; import java.net.Socket; import java.util.Date; public class AppServer { /* описываем порт, который будем «слушать» */ static final int PORT = 9090; public static void main(String[] args) throws Exception{ System.out.println(«сервер запущен»); // ServerSocket listener = new ServerSocket(PORT); try { while (true) { Socket socket = listener.accept(); try { PrintWriter out = new PrintWriter(socket.getOutputStream(), true); out.println(new Date().toString()); } finally { socket.close(); } } } finally { listener.close(); } } }
ClientApp.javaimport java.io.*; import java.net.Socket; import java.net.UnknownHostException; public class ClientApp { /* куда будем подключаться */ static final String serverIP = «127.0.0.1»; static final int PORT = 9090; public static void main(String[] args) { try { Socket s = new Socket(serverIP, PORT); BufferedReader input = new BufferedReader(new InputStreamReader(s.getInputStream())); String answer = input.readLine(); System.out.println(answer); } catch (UnknownHostException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } }

Пример приложения: «Чат»

AppServer.javaimport java.io.*; import java.net.ServerSocket; import java.net.Socket; import java.util.HashSet; public class AppServer { private static final int PORT = 9001; private static HashSet
ClientApp.javaimport javax.swing.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.io.*; import java.net.Socket; import java.net.UnknownHostException; public class ClientApp { BufferedReader in; PrintWriter out; JFrame frame = new JFrame(«ChatApp»); JTextField textField = new JTextField(40); JTextArea messageArea = new JTextArea(8, 40); public ClientApp() { // GUI textField.setEditable(false); messageArea.setEditable(false); frame.getContentPane().add(textField, «North»); frame.getContentPane().add(new JScrollPane(messageArea), «Center»); frame.pack(); // Add Listeners textField.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { out.println(textField.getText()); textField.setText(«»); } }); } private String getServerAddress() { return JOptionPane.showInputDialog( frame, «Enter IP Address of the Server:», «Welcome to the Chatter», JOptionPane.QUESTION_MESSAGE); } private String getName() { return JOptionPane.showInputDialog( frame, «Choose a screen name:», «Screen name selection», JOptionPane.PLAIN_MESSAGE); } private void run() throws IOException { // Make connection and initialize streams String serverAddress = getServerAddress(); Socket socket = new Socket(serverAddress, 9001); in = new BufferedReader(new InputStreamReader( socket.getInputStream())); out = new PrintWriter(socket.getOutputStream(), true); // Process all messages from server, according to the protocol. while (true) { String line = in.readLine(); if (line.startsWith(«SUBMITNAME»)) { out.println(getName()); } else if (line.startsWith(«NAMEACCEPTED»)) { textField.setEditable(true); } else if (line.startsWith(«MESSAGE»)) { messageArea.append(line.substring(8) + » «); } } } public static void main(String[] args) throws Exception { ClientApp client = new ClientApp(); client.frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); client.frame.setVisible(true); client.run(); } }

Interfaces

Класс NetworkInterface обеспечивает APIs функциональность всех сетевых интерфейсов (например Подключение к сети Ethernet или конечная точка PPP) к локальным компьютерам.

Именно через этот класс вы можете проверить поддержку IPv6 у компьютера.

High Level API (Высокоуровневый API)

URI

Класс позволяет «разобрать» url на составные части.

URIDemo.javaimport java.net.URI; public class URIDemo { public static void main(String[] args) throws Exception { String path = «http://edunow.su/site/content?cat=1»; URI uri = new URI(path); // System.out.println(«Input = » + path + » «); System.out.println(«Scheme = » + uri.getScheme()); System.out.println(«Host = » + uri.getHost()); System.out.println(«Path = » + uri.getPath()); System.out.println(«Query = » + uri.getQuery()); } }
OutputInput = http://edunow.su/site/content?cat=1 Scheme = http Host = edunow.su Path = /site/content Query = cat=1

URL

Именно «на базе» URL мы можем открыть соединение с удаленным сервером. Для этого следует вызвать openConnection() или openStream(). Можно так же отметить, что URLConnection поддерживает Proxy.

URLDemo.javaimport java.io.IOException; import java.io.InputStream; import java.net.URL; import java.net.URLConnection; public class URLDemo { public static void main(String[] args) throws IOException { String path = «http://edunow.su/site/content?cat=1»; URL url = new URL(path); // URLConnection urlConnection = url.openConnection(); InputStream inputStream = url.openStream(); } }
Пример использования proxy: ProxyDemo .javaimport java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.net.InetSocketAddress; import java.net.Proxy; import java.net.URL; import java.net.URLConnection; public class ProxyDemo { public static void main(String[] args) throws IOException { String path = «http://2ip.ru/»; URL url = new URL(path); // Proxy proxy = new Proxy(Proxy.Type.HTTP, new InetSocketAddress(«192.227.172.145″, 8089)); URLConnection conn = new URL(path).openConnection(proxy); // BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(conn.getInputStream())); StringBuilder lines = new StringBuilder(); String line; while ( (line=bufferedReader.readLine()) != null){ lines.append(line).append(» «); } System.out.println(lines.toString()); } }

Connection

URLConnection позволяет взаимодействовать с удаленным сервером.

URLConnectionDemo .javaimport java.io.*; import java.net.URL; import java.net.URLConnection; public class URLConnectionDemo { public static void main(String[] args) throws IOException { String path = «http://edunow.su/»; String charset = «UTF-8»; // URLConnection connection = new URL(path).openConnection(); connection.setDoOutput(true); // Triggers POST. connection.setRequestProperty(«Accept-Charset», charset); connection.setRequestProperty(«Content-Type», «application/x-www-form-urlencoded;charset=» + charset); connection.setRequestProperty(«User-Agent», «Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.2.3) Gecko/20100401»); // Do as if you’re using Firefox 3.6.3. InputStream response = connection.getInputStream(); // … } }

Пример: Upload File

Upload FileString param = «value»; File textFile = new File(«/path/to/file.txt»); File binaryFile = new File(«/path/to/file.bin»); String boundary = Long.toHexString(System.currentTimeMillis()); // Just generate some unique random value. String CRLF = » «; // Line separator required by multipart/form-data. URLConnection connection = new URL(url).openConnection(); connection.setDoOutput(true); connection.setRequestProperty(«Content-Type», «multipart/form-data; boundary=» + boundary); try (OutputStream output = connection.getOutputStream()) { try (PrintWriter writer = new PrintWriter(new OutputStreamWriter(output, charset), true)) { // Send normal param. writer.append(«—» + boundary).append(CRLF); writer.append(«Content-Disposition: form-data; name=»param»»).append(CRLF); writer.append(«Content-Type: text/plain; charset=» + charset).append(CRLF); writer.append(CRLF).append(param).append(CRLF).flush(); // Send text file. writer.append(«—» + boundary).append(CRLF); writer.append(«Content-Disposition: form-data; name=»textFile»; filename=»» + textFile.getName() + «»»).append(CRLF); writer.append(«Content-Type: text/plain; charset=» + charset).append(CRLF); // Text file itself must be saved in this charset! writer.append(CRLF).flush(); Files.copy(textFile.toPath(), output); output.flush(); // Important before continuing with writer! writer.append(CRLF).flush(); // CRLF is important! It indicates end of boundary. // Send binary file. writer.append(«—» + boundary).append(CRLF); writer.append(«Content-Disposition: form-data; name=»binaryFile»; filename=»» + binaryFile.getName() + «»»).append(CRLF); writer.append(«Content-Type: » + URLConnection.guessContentTypeFromName(binaryFile.getName())).append(CRLF); writer.append(«Content-Transfer-Encoding: binary»).append(CRLF); writer.append(CRLF).flush(); Files.copy(binaryFile.toPath(), output); output.flush(); // Important before continuing with writer! writer.append(CRLF).flush(); // CRLF is important!

Передача звука по локальной сети (стр. 4 из 5)

It indicates end of boundary. // End of multipart/form-data. writer.append(«—» + boundary + «—«).append(CRLF); } }

HttpURLConnection

HttpURLConnection connection = null; try { URL url = new URL(«www.google.com»); connection = (HttpURLConnection) url.openConnection(); connection.connect(); connection.getInputStream(); // do something with the input stream here } catch (MalformedURLException e1) { e1.printStackTrace(); } catch (IOException e1) { e1.printStackTrace(); } finally { if(null != connection) { connection.disconnect(); } }

Документация URLConnection.pdf


Дополнительные материалы

↑ Расскажите друзьям о статье


Comments system Cackle

Как транслировать звук с ПК на Андроид по 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?
Будет разница между кабелем и вай фаем по качеству)?

Андрей Петров: Хороший лайфхак. Можно теперь не скачивать аудио а запустить на компе

Обратный Флэш: Есть такое на айфон?

Video on this topic

FILED UNDER : IT

Submit a Comment

Must be required * marked fields.

:*
:*