实例介绍
【实例简介】
【实例截图】
【核心代码】
using System; using System.Drawing; using System.Collections; using System.ComponentModel; using System.Windows.Forms; using System.Net; using System.Net.Sockets; using System.Threading; using System.IO; using System.Data; using Voice; using VedioCapture; namespace Conference_System { public partial class Form1 : Form { private ClassVedioCapture VC = new ClassVedioCapture(); private WaveOutPlayer m_Player; private WaveInRecorder m_Recorder; private FifoStream m_Fifo = new FifoStream(); private Socket r; private Thread t; private bool connected = false; private byte[] m_PlayBuffer; private byte[] m_RecBuffer; TcpClient myclient; MemoryStream ms; NetworkStream myns; BinaryWriter mysw; Thread myth; TcpListener mytcpl; Socket mysocket; NetworkStream ns; public Form1() { InitializeComponent(); VC.Initialize(this.pictureBox1, this.pictureBox1.Width, this.pictureBox1.Height); myth = new Thread(new System.Threading.ThreadStart(Start_Receiving_Video_Conference)); // Start Thread Session myth.Start(); // Start Receiveing Camera r = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp); t = new Thread(new ThreadStart(Voice_In)); } #region Voice_In() private void Voice_In() { byte[] br; r.Bind(new IPEndPoint(IPAddress.Any, 9001)); while (true) { br = new byte[16384]; r.Receive(br); m_Fifo.Write(br, 0, br.Length); } } #endregion #region Voice_Out() private void Voice_Out(IntPtr data, int size) { //for Recorder if (m_RecBuffer == null || m_RecBuffer.Length < size) m_RecBuffer = new byte[size]; System.Runtime.InteropServices.Marshal.Copy(data, m_RecBuffer, 0, size); //Microphone ==> data ==> m_RecBuffer ==> m_Fifo r.SendTo(m_RecBuffer, new IPEndPoint(IPAddress.Parse("192.168.31.101"), 9000)); } #endregion private void Start_Receiving_Video_Conference() { try { IPHostEntry host = Dns.GetHostEntry(Dns.GetHostName()); IPAddress ip = host.AddressList[1]; // Open The Port mytcpl = new TcpListener(8000); mytcpl.Start(); // Start Listening on That Port mysocket = mytcpl.AcceptSocket(); // Accept Any Request From Client and Start a Session ns = new NetworkStream(mysocket); // Receives The Binary Data From Port pictureBox2.Image = Image.FromStream(ns); mytcpl.Stop(); // Close TCP Session if (mysocket.Connected == true) // Looping While Connected to Receive Another Message { while (true) { Start_Receiving_Video_Conference(); // Back to First Method } } myns.Flush(); } catch (Exception) { } } private void Start_Sending_Video_Conference(string remote_IP, int port_number) { try { ms = new MemoryStream();// Store it in Binary Array as Stream VC.CopyToClipBorad(); Image img = VC.getCaptureImage(); img.Save(ms, System.Drawing.Imaging.ImageFormat.Jpeg); byte[] arrImage = ms.GetBuffer(); myclient = new TcpClient(remote_IP, port_number);//Connecting with server myns = myclient.GetStream(); mysw = new BinaryWriter(myns); mysw.Write(arrImage);//send the stream to above address ms.Flush(); mysw.Flush(); myns.Flush(); ms.Close(); mysw.Close(); myns.Close(); myclient.Close(); } catch (Exception ex) { Capturing.Enabled = false; MessageBox.Show(ex.Message, "Video Conference Error Message", MessageBoxButtons.OK, MessageBoxIcon.Error); } } private void Start() { Stop(); try { WaveFormat fmt = new WaveFormat(44100, 16, 2); m_Player = new WaveOutPlayer(-1, fmt, 16384, 3, new BufferFillEventHandler(Filler)); m_Recorder = new WaveInRecorder(-1, fmt, 16384, 3, new BufferDoneEventHandler(Voice_Out)); } catch { Stop(); throw; } } private void Stop() { if (m_Player != null) try { m_Player.Dispose(); } finally { m_Player = null; } if (m_Recorder != null) try { m_Recorder.Dispose(); } finally { m_Recorder = null; } m_Fifo.Flush(); // clear all pending data } private void Filler(IntPtr data, int size) { if (m_PlayBuffer == null || m_PlayBuffer.Length < size) m_PlayBuffer = new byte[size]; if (m_Fifo.Length >= size) m_Fifo.Read(m_PlayBuffer, 0, size); else for (int i = 0; i < m_PlayBuffer.Length; i ) m_PlayBuffer[i] = 0; System.Runtime.InteropServices.Marshal.Copy(m_PlayBuffer, 0, data, size); // m_Fifo ==> m_PlayBuffer==> data ==> Speakers } private void sendVideo_Click(object sender, EventArgs e) { Capturing.Enabled = true; } private void Capturing_Tick(object sender, EventArgs e) { Start_Sending_Video_Conference(text_IP.Text, int.Parse(text_Camera_send_port.Text)); } private void Form1_FormClosing(object sender, FormClosingEventArgs e) { try { //myth.Abort(); mytcpl.Stop(); ns.Flush(); ns.Close(); //t.Abort(); r.Close(); Stop(); myclient.Close(); ms.Close(); myns.Close(); mysw.Close(); this.Close(); } catch (Exception) { } } private void button1_Click(object sender, EventArgs e) { if (connected == false) { t.Start(); connected = true; } Start(); } } }
好例子网口号:伸出你的我的手 — 分享!
相关软件
小贴士
感谢您为本站写下的评论,您的评论对其它用户来说具有重要的参考价值,所以请认真填写。
- 类似“顶”、“沙发”之类没有营养的文字,对勤劳贡献的楼主来说是令人沮丧的反馈信息。
- 相信您也不想看到一排文字/表情墙,所以请不要反馈意义不大的重复字符,也请尽量不要纯表情的回复。
- 提问之前请再仔细看一遍楼主的说明,或许是您遗漏了。
- 请勿到处挖坑绊人、招贴广告。既占空间让人厌烦,又没人会搭理,于人于己都无利。
关于好例子网
本站旨在为广大IT学习爱好者提供一个非营利性互相学习交流分享平台。本站所有资源都可以被免费获取学习研究。本站资源来自网友分享,对搜索内容的合法性不具有预见性、识别性、控制性,仅供学习研究,请务必在下载后24小时内给予删除,不得用于其他任何用途,否则后果自负。基于互联网的特殊性,平台无法对用户传输的作品、信息、内容的权属或合法性、安全性、合规性、真实性、科学性、完整权、有效性等进行实质审查;无论平台是否已进行审查,用户均应自行承担因其传输的作品、信息、内容而可能或已经产生的侵权或权属纠纷等法律责任。本站所有资源不代表本站的观点或立场,基于网友分享,根据中国法律《信息网络传播权保护条例》第二十二与二十三条之规定,若资源存在侵权或相关问题请联系本站客服人员,点此联系我们。关于更多版权及免责申明参见 版权及免责申明
网友评论
我要评论