亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? avstream.cs

?? 該即時(shí)通訊系統(tǒng)系統(tǒng)能夠?qū)崿F(xiàn)像QQ一樣的通訊功能
?? CS
字號(hào):
using System;
using System.Drawing;
using System.Collections;
using System.ComponentModel;
using System.Windows.Forms;
using System.Data;using System.IO;
using LanMsg.AV;
using System.Runtime.InteropServices;
using System.Net.Sockets;
using System.Net;

namespace LanMsg.AV
{
	/// <summary>
	/// AVChanel 的摘要說明。
	/// </summary>
	public class AVChanel
	{
		private Socket sock;
		private byte[] buffer;
		private ICCompressor cp;//視頻編碼器
		private ICDecompressor dp;//視頻解碼器
		
		private G729 g729;
		private EndPoint rmtEP;
		private int localPort=2469;

		private bool connected;

		public bool Connected
		{
			get{return this.connected;}
		}


		public event AVChanelEventHandler AudioData,VideoData,SteamStart,StreamEnd,StreamError;
		public AVChanel()
		{
			this.rmtEP=new IPEndPoint(IPAddress.Any,0);
		}
		public void Open()//打開scck
		{
			this.sock=new Socket(AddressFamily.InterNetwork,SocketType.Dgram,ProtocolType.Udp);
			while(true)
			{
				try
				{
					this.sock.Bind(new IPEndPoint(IPAddress.Any,this.localPort));
					break;
				}
				catch(System.Exception ex)
				{
					System.Diagnostics.Trace.WriteLine(ex.Message);
					this.localPort++;
				}
			}
			this.ReceiveInternal();//初始化數(shù)據(jù)接收進(jìn)程
			this.IniVideoCompress();//初始化視頻
			this.IniAudioCompress();//初始化音頻
		}

		byte[] UDPbuf=System.Text.Encoding.Default.GetBytes("9");
		public void UDPBurrowNat(System.Net.IPAddress ServerIp,int ServerPort)//UDP打洞
		{
			IPEndPoint server = new IPEndPoint( ServerIp , ServerPort); 
			this.sock.SendTo(UDPbuf,server);
		}


		public void BeginAV(byte[] buf,System.Net.IPAddress ServerIp,int ServerPort)//告訴對(duì)方開始視頻(執(zhí)行聯(lián)接到本地的操作)
		{
			IPEndPoint server = new IPEndPoint( ServerIp , ServerPort); 
			this.sock.SendTo(buf,server);
		}


		public void SendAVtoServerRequest(byte[] buf,System.Net.IPAddress ServerIp,int ServerPort)//發(fā)送AV請(qǐng)求到對(duì)方,要求視頻對(duì)話
		{
			IPEndPoint server = new IPEndPoint( ServerIp , ServerPort); 
            this.sock.SendTo(buf,server);//發(fā)送視頻對(duì)話的請(qǐng)求到對(duì)方
		}

		public void Connect(string rmtip,int port)//連接到對(duì)方IP及端口,要求對(duì)方視頻對(duì)話
		{
			this.rmtEP=new IPEndPoint(IPAddress.Parse(rmtip),port);	
			this.SendRequest();//發(fā)送視頻請(qǐng)求
		}

		private void ReceiveInternal()
		{
			this.buffer=new byte[65535];//緩沖區(qū)數(shù)據(jù)接收塊最大值為65535Mtu
			try
			{
				if(this.sock==null)return;
				this.sock.BeginReceiveFrom(buffer,0,buffer.Length,SocketFlags.None,ref this.rmtEP,new AsyncCallback(this.ACB),null);
			}
			catch
			{
				this.OnStreamError(new AVChanelEventArgs(null));
			}
		}
		private void ACB(System.IAsyncResult iar)//控制塊
		{
			int cnt=0;
			try
			{
				if(this.sock==null)return;
				cnt=this.sock.EndReceiveFrom(iar,ref this.rmtEP);
			}
			catch
			{
				this.OnStreamError(new AVChanelEventArgs(null));
			}
			if(cnt>0)
			{
				byte[] n=new byte[cnt-1];
				Buffer.BlockCopy(this.buffer,1,n,0,cnt-1);
				switch(this.buffer[0])
				{
					case 0://收到對(duì)方發(fā)送過來的音頻數(shù)據(jù),觸發(fā)音頻數(shù)據(jù)到達(dá)事件
						this.OnAudioData(new AVChanelEventArgs(n));
						break;
					case 1://收到對(duì)方發(fā)送過來的視頻數(shù)據(jù),觸發(fā)視頻數(shù)據(jù)到達(dá)事件
						this.OnVideoData(new AVChanelEventArgs(n));
						break;
					case 2:
						if(this.rmtEP==null)
						{
							IPEndPoint rmt=(IPEndPoint)iar.AsyncState;
							this.rmtEP=rmt;
						}
						this.OnStreamStart(new AVChanelEventArgs(null));//開始視頻對(duì)話在,并觸發(fā)事件
						break;
					case 3:
						this.OnStreamEnd(new AVChanelEventArgs(null));//開始視頻對(duì)話,并觸發(fā)事件
						break;
				}
			}
			this.ReceiveInternal();
		}

		private void OnAudioData(AVChanelEventArgs e)//音頻到達(dá)事件
		{
			byte[] dst=this.g729.Decode(e.Data);
			if(this.AudioData!=null)this.AudioData(this,new AVChanelEventArgs(dst));
		}

		public byte[] en(byte[] data)//將要發(fā)送的音頻數(shù)據(jù)采用g729標(biāo)準(zhǔn)編碼
		{
			return this.g729.Encode(data);
		}
		public byte[] de(byte[] data)//將收到的音頻數(shù)據(jù)采用g729標(biāo)準(zhǔn)解碼
		{
			return this.g729.Decode(data);
		}

		private void OnVideoData(AVChanelEventArgs e)//視頻到達(dá)事件
		{
			byte[] decompressdata=this.dp.Process(e.Data);//解壓縮
			if(this.VideoData!=null)this.VideoData(this,new AVChanelEventArgs(decompressdata));
		}

		private void OnStreamStart(AVChanelEventArgs e)
		{
			if(!this.Connected)
			{
				this.connected=true;
				if(this.SteamStart!=null)this.SteamStart(this,e);
				this.SendRequest();//發(fā)送視頻對(duì)話要求
			}
		}

		private void SendRequest()//發(fā)送視頻對(duì)話要求
		{
			byte[] b=new byte[1];
			b[0]=2;
			this.Send(b);	
		}

		private void SendBye()
		{
			byte[] b=new byte[1];
			b[0]=3;
			this.Send(b);	
		}

		public void Disconnect()//關(guān)閉聯(lián)接
		{
			if(!this.Connected)return;
			this.SendBye();
			System.Threading.Thread.Sleep(50);
			this.connected=false;
		}
		public void Close()//關(guān)閉SOCK
		{
			if(this.sock!=null)
			{
				lock(this.sock)
				{
					this.sock.Close();
					this.sock=null;
				}
			}
			if(this.dp!=null)
			{
				this.dp.Close();
			}
			if(this.cp!=null)
			{
				this.cp.Close();
			}
		}
		private void OnStreamEnd(AVChanelEventArgs e)//數(shù)據(jù)流結(jié)束事件
		{
			this.connected=false;
			if(this.StreamEnd!=null)this.StreamEnd(this,e);
		}
		private void OnStreamError(AVChanelEventArgs e)
		{
			this.connected=false;
			if(this.StreamError!=null)this.StreamError(this,e);
		}


		private void Send(byte[] bs)//發(fā)送音視頻混合數(shù)據(jù)到對(duì)方
		{
			try
			{
				this.sock.BeginSendTo(bs,0,bs.Length,SocketFlags.None,this.rmtEP,new AsyncCallback(this.SendCallback),null);
			}
			catch
			{
				this.OnStreamError(new AVChanelEventArgs(null));
			}
		}

		public int LocalPort//設(shè)置或獲取本地UDP端口
		{
			get{return this.localPort;}
			set{this.localPort=value;}
		}

		public void SendCallback(System.IAsyncResult iar)
		{
			try
			{
				int cnt=this.sock.EndSendTo(iar);
			}
			catch
			{
				this.OnStreamError(new AVChanelEventArgs(null));
			}
		}
		public void SendAudio(byte[] bs)//發(fā)送音頻數(shù)據(jù)到對(duì)方
		{
			byte[] compresseddata=this.g729.Encode(bs);
			byte[] buf=new byte[compresseddata.Length+1];
			buf[0]=0;
			Buffer.BlockCopy(compresseddata,0,buf,1,compresseddata.Length);
			this.Send(buf);
		}
		public void SendVideo(byte[] bs)//發(fā)送視頻數(shù)據(jù)到對(duì)方
		{
//			byte[] compresseddata=this.cp.Process(bs);
//			MessageBox.Show(compresseddata.Length.ToString());
//			if(compresseddata==null)return;
//			byte[] buf=new byte[compresseddata.Length+1]; 
			byte[] buf=new byte[bs.Length+1];
			buf[0]=1;
//			Buffer.BlockCopy(compresseddata,0,buf,1,compresseddata.Length);
			Buffer.BlockCopy(bs,0,buf,1,bs.Length);
			this.Send (buf);
		}

		private void IniVideoCompress()
		{
			COMPVARS pp=new COMPVARS();
			pp.cbSize=Marshal.SizeOf(pp);
			pp.dwFlags=1;
			pp.fccHandler=FOURCC.MP42;;
			pp.fccType=FOURCC.ICTYPE_VIDEO;
			pp.lDataRate=120;
			pp.lKey=15;
			pp.lQ=-1;
			pp.lQ=1000;

			COMPVARS p2=pp;
			
			BITMAPINFOHEADER bmi=new BITMAPINFOHEADER();

			bmi.biCompression =(int) BI.BI_RGB;
			bmi.biWidth = 160;
			bmi.biHeight = 120;
			bmi.biPlanes = 1;
			bmi.biBitCount = 24;
			bmi.biXPelsPerMeter = 0;
			bmi.biYPelsPerMeter = 0;
			bmi.biClrUsed = 0;
			bmi.biClrImportant = 0;
			bmi.biSizeImage=115200;
			bmi.biSize=Marshal.SizeOf(bmi);
			BITMAPINFO bi=new BITMAPINFO();
			bi.bmiHeader=bmi;
			
			BITMAPINFOHEADER bmi2=new BITMAPINFOHEADER();
			bmi2.biCompression =FOURCC.MP42;
			bmi2.biWidth = 160;
			bmi2.biHeight = 120;
			bmi2.biPlanes = 1;
			bmi2.biBitCount = 24;
			bmi2.biXPelsPerMeter = 0;
			bmi2.biYPelsPerMeter = 0;
			bmi2.biClrUsed = 0;
			bmi2.biClrImportant = 0;
			bmi2.biSize=40;
			bmi2.biSizeImage=115200;
			BITMAPINFO bi2=new BITMAPINFO();
			bi2.bmiHeader=bmi2;

			this.dp=new ICDecompressor(new COMPVARS(),bi2,FOURCC.MP42);
			this.dp.Open();
			
			this.cp=new ICCompressor(pp,bi,FOURCC.MP42);
			this.cp.Open();
		}


		private void IniAudioCompress()//初始化G729編碼標(biāo)準(zhǔn)的音頻編碼器
		{
			this.g729=new G729();
			this.g729.InitalizeDecode();
			this.g729.InitalizeEncode();
		}
		public delegate void AVChanelEventHandler(object sender,AVChanelEventArgs e);
		public class AVChanelEventArgs:System.EventArgs
		{
			public byte[] Data;
			public AVChanelEventArgs(byte[] data)
			{
				this.Data=data;
			}
		}
	}
}

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
成人免费高清视频在线观看| 天堂在线亚洲视频| 国产老肥熟一区二区三区| 日韩欧美亚洲国产精品字幕久久久 | 91精品免费观看| 免费在线看成人av| 久久综合精品国产一区二区三区 | 精品一区二区三区不卡| 久久综合九色综合97婷婷女人| 国产成人精品免费视频网站| 国产精品动漫网站| 欧美色图片你懂的| 精品一区二区在线观看| 中文av字幕一区| 欧美日韩在线播放| 极品美女销魂一区二区三区 | 亚洲日本电影在线| 欧美日韩在线播放三区四区| 久久国产精品72免费观看| 国产午夜精品一区二区三区视频 | 国产成人精品免费视频网站| 中文字幕在线视频一区| 欧美天堂一区二区三区| 日韩av电影天堂| 国产色产综合产在线视频| 日本精品视频一区二区| 蜜桃视频在线观看一区| 国产精品久线在线观看| 欧美色综合影院| 久久精品72免费观看| 国产精品白丝在线| 91精品国产欧美一区二区18| 成人短视频下载| 日韩和欧美一区二区| 日本一区二区免费在线| 欧美日韩视频专区在线播放| 国产精品中文字幕日韩精品| 一区二区三区电影在线播| 欧美一区二区三区喷汁尤物| 成人视屏免费看| 青青草91视频| 136国产福利精品导航| 日韩一区二区不卡| 91久久精品国产91性色tv| 精品亚洲porn| 午夜成人在线视频| 自拍偷在线精品自拍偷无码专区| 日韩欧美国产成人一区二区| 欧洲视频一区二区| 成人一区二区视频| 欧美aa在线视频| 亚洲亚洲精品在线观看| 国产精品久久777777| 精品国产一区二区三区久久影院| 日本电影欧美片| www.视频一区| 国产老女人精品毛片久久| 日韩国产精品久久| 亚洲欧美日韩小说| 国产精品久久久久精k8| 国产亚洲福利社区一区| 精品剧情v国产在线观看在线| 欧美日韩免费视频| 91久久精品一区二区三| 成人av在线电影| 国产不卡视频在线观看| 国产一区视频导航| 另类综合日韩欧美亚洲| 免费欧美在线视频| 天使萌一区二区三区免费观看| 亚洲影院在线观看| 亚洲已满18点击进入久久| 亚洲女厕所小便bbb| 亚洲品质自拍视频网站| 亚洲欧美色图小说| 一区二区视频免费在线观看| 亚洲欧美国产高清| 亚洲国产视频一区二区| 亚洲国产综合人成综合网站| 亚洲精品中文在线影院| 日韩伦理电影网| 日韩伦理av电影| 亚洲精品成人精品456| 亚洲男人的天堂在线aⅴ视频| 国产精品丝袜91| 国产精品久久777777| 国产精品久久久久久妇女6080| 中文字幕高清一区| 日韩理论电影院| 亚洲国产日产av| 日韩av不卡在线观看| 久久99国产精品麻豆| 国产精品自拍av| 99久久国产综合精品色伊| 成人18精品视频| 欧美性大战xxxxx久久久| 欧美午夜影院一区| 欧美日本国产视频| 欧美成人官网二区| 国产日本亚洲高清| 亚洲欧美偷拍卡通变态| 亚洲国产毛片aaaaa无费看| 日本不卡一区二区三区| 国产资源精品在线观看| 成人h版在线观看| 欧美美女直播网站| 精品av久久707| 亚洲欧洲av在线| 亚洲成人av在线电影| 久久精品国产99国产精品| 国产mv日韩mv欧美| 欧美午夜电影在线播放| 久久综合久久综合亚洲| 亚洲三级在线免费观看| 日韩电影免费在线观看网站| 国产一区二区调教| 色国产精品一区在线观看| 日韩免费性生活视频播放| 国产精品美女久久久久久久| 亚洲成人在线观看视频| 国产精品一色哟哟哟| 欧美丝袜丝nylons| 国产欧美精品一区二区色综合朱莉| 一区二区三区欧美日| 紧缚捆绑精品一区二区| 色婷婷综合久久| 2023国产精华国产精品| 亚洲永久精品国产| 粉嫩aⅴ一区二区三区四区五区| 欧美日韩你懂得| 国产调教视频一区| 奇米在线7777在线精品| 91久久香蕉国产日韩欧美9色| 久久一区二区视频| 亚洲国产精品久久人人爱| 福利一区二区在线观看| 日韩欧美不卡一区| 亚洲va天堂va国产va久| jlzzjlzz亚洲女人18| 2023国产精华国产精品| 日韩国产精品大片| 在线观看三级视频欧美| 欧美激情一区在线观看| 久久99精品久久久久久久久久久久| 在线免费观看日韩欧美| 中文字幕一区二区三区乱码在线| 激情丁香综合五月| 91精品国产色综合久久不卡蜜臀| 亚洲激情六月丁香| 99久久精品99国产精品| 国产网站一区二区| 国产精品自拍在线| 精品盗摄一区二区三区| 日韩精品成人一区二区在线| 在线观看日韩av先锋影音电影院| 国产精品的网站| 成人精品免费网站| 亚洲国产高清在线| 国产成人免费在线观看不卡| 精品国产一区二区三区不卡 | 国产中文字幕精品| 欧美大尺度电影在线| 人禽交欧美网站| 欧美一区日韩一区| 热久久国产精品| 日韩女优制服丝袜电影| 日本中文字幕不卡| 日韩精品中文字幕一区 | 精品久久久久久最新网址| 蜜臀av亚洲一区中文字幕| 欧美一区二区三区电影| 日韩va欧美va亚洲va久久| 日韩丝袜美女视频| 久久国产精品第一页| 久久久不卡影院| 粉嫩av一区二区三区| 综合久久给合久久狠狠狠97色 | 精品在线播放免费| 精品国产乱码久久久久久图片| 国产综合色视频| 中文字幕在线观看不卡视频| 91色九色蝌蚪| 亚洲黄色在线视频| 欧美人狂配大交3d怪物一区| 日本强好片久久久久久aaa| 欧美电影免费观看高清完整版在线| 精品一区二区在线免费观看| 国产亚洲欧美日韩俺去了| 99国产精品一区| 亚洲3atv精品一区二区三区| 日韩欧美一区电影| 国产成人高清在线| 亚洲综合成人在线| 日韩欧美久久久| 成人国产一区二区三区精品| 一区二区三区四区不卡视频| 日韩亚洲欧美高清| 成人午夜短视频| 午夜视黄欧洲亚洲| 久久综合久久综合久久综合|