Голосовой чат в режиме реального времени по IP с использованием C # - PullRequest
0 голосов
/ 22 марта 2019

Я пытаюсь сделать VOice чат по IP, используя C #.Сначала я подключил два ноутбука.Затем я отправил сообщение между двумя ноутбуками.Тогда я пытаюсь отправить порочное сообщение, это трудно.Я хотел бы получить голосовой ввод с помощью Naudio.Затем я должен сделать выборку и поместить волновой файл в байтовый массив, собрать пакет данных и отправить его.На стороне клиента я должен поймать пакет данных и преобразовать его в звук.Но проблема в том, что я не могу найти какой-либо материал для изучения кода для преобразования и отправки пакета данных.Я ищу в Интернете, но не могу найти ничего, что могу понять.ТАК, пожалуйста, кто-нибудь, помогите мне сделать это.Я вижу много проектов, которые делают люди, но их трудно понять.Я начинаю об этой отправке данных.

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;``
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Threading;
using System.Net;
using System.Net.Sockets;
using System.IO;

namespace Tutorial7
{
   public partial class Form1 : Form
   {
       Socket sock;
       Socket acc;
       public Form1()
       {
           InitializeComponent();
       }

       Socket socket()
       {
           return new Socket(AddressFamily.InterNetwork, SocketType.Stream, 
           ProtocolType.Tcp);
       }

       private void button1_Click(object sender, EventArgs e)
       {
           List<NAudio.Wave.WaveInCapabilities> sources = new 
           List<NAudio.Wave.WaveInCapabilities>();

           for (int i = 0; i < NAudio.Wave.WaveIn.DeviceCount; i++)
           {
               sources.Add(NAudio.Wave.WaveIn.GetCapabilities(i));
           }

           sourceList.Items.Clear();

           foreach (var source in sources)
           {
               ListViewItem item = new ListViewItem(source.ProductName);
               item.SubItems.Add(new ListViewItem.ListViewSubItem(item, 
                   source.Channels.ToString()));
               sourceList.Items.Add(item);
           } 
       }

       NAudio.Wave.WaveIn sourceStream = null;
       NAudio.Wave.DirectSoundOut waveOut = null;
       NAudio.Wave.WaveFileWriter waveWriter = null;

       private void button2_Click(object sender, EventArgs e)
       {
           if (sourceList.SelectedItems.Count == 0) return;

           int deviceNumber = sourceList.SelectedItems[0].Index;

           sourceStream = new NAudio.Wave.WaveIn();
           sourceStream.DeviceNumber = deviceNumber;
           sourceStream.WaveFormat = new NAudio.Wave.WaveFormat(44100, 
           NAudio.Wave.WaveIn.GetCapabilities(deviceNumber).Channels);

           NAudio.Wave.WaveInProvider waveIn = new 
           NAudio.Wave.WaveInProvider(sourceStream);
        }
    }
}

1 Ответ

1 голос
/ 22 марта 2019

Я думаю, вы можете использовать класс System.Net.Sockets.NetworkStream:

Взгляните на: https://docs.microsoft.com/en-us/dotnet/api/system.net.sockets.networkstream?redirectedfrom=MSDN&view=netframework-4.7.2

И это аналогичный вопрос: получить потокобъект сокета в c #

...