winform 通过摄像头将本级的监控视频传送到远端机器显示

 

原作者:http://www.cnblogs.com/gossip/archive/2008/10/24/1318843.html

 

 

程序分为服务器端和客户端,需要引入DirectX.Capture和DShowNET类库,有需要的朋友可以E-Mail: yiai027@163.com  ,下面分别从服务器端和客户端解释代码:

 

服务器端:


 1 TcpListener tcpListen = null;
 2 MemoryStream ms = null;
 3 
 4 
 5 private void Form1_Load(object sender, EventArgs e)
 6 {
 7 //start new thread   启动新的线程
 8 Thread t = new Thread(new ThreadStart(start));
 9 t.Start();
10 }
11 
12 
13 
14   private void start()
15         {
16 
17             IPEndPoint ipendPoint = new IPEndPoint(IPAddress.Parse("127.0.0.1"), 8002);
18             tcpListen = new TcpListener(ipendPoint);
19             tcpListen.Start();  //start listen  开始监听
20             Socket s = tcpListen.AcceptSocket();
21 
22 
23             //accept remote info
24             while (true)
25             {
26 
27                 Byte[] receiveBytes = new Byte[1000000];
28                 Int32 i = s.Receive(receiveBytes);
29                 ms = new MemoryStream(receiveBytes);//translate bytes to memorystream
30                 ShowPicture(ms);  //show image from memorystream
31 System.Drawing.Imaging.ImageFormat.Jpeg);  //通过调用委托函数将流中的图片信息显示到界面的picturebox控件中
32 
33                 Byte[] sendBytes = new Byte[100];
34                 Int32 j = s.Send(Encoding.UTF8.GetBytes("FaceBack"));
35             }
36         }
37 
38 
39 
40 
41         delegate void ShowPictureDele(MemoryStream ms);
42         private void ShowPicture(MemoryStream ms)
43         {
44             // 判断是否在线程中访问   chinese      
45             if (!this.pictureBox1.InvokeRequired)
46             {
47                 // 不是的话直接操作控件
48                 pictureBox1.Image = Image.FromStream(ms);
49                 ms.Close();
50             }
51             else
52             {
53                 // 是的话启用delegate访问
54                 ShowPictureDele showProgress = new ShowPictureDele(ShowPicture);
55                 // 如使用Invoke会等到函数调用结束,而BeginInvoke不会等待直接往后走
56                 this.BeginInvoke(showProgress, new object[] { ms });
57             }
58         }

 

 

 

客户端: 

 

Code

 

现在有个问题,改程序可以将摄像头捕获到的视频在远端机器上显示,但必须给一个路径将捕获的视频存储到本地硬盘,虽然视频可以压缩,但还是需要占用大量的空间,希望各位能够解决这个问题,不用在本地存储,只要捕获--发送即可

posted @ 2008-10-24 16:14  Richard-Wang  阅读(457)  评论(0编辑  收藏  举报