新闻简介:
我们已经为在.NET中创建有趣的和引人入胜的网络视频监察应用提供了多种解决方案. 在这篇文章里, 我们让这个想法得到扩展,可以让更多的客户端同时在web上分享网络视频图像
关 键 词:
vb.net
视频
.NET
英文原文:http://www.devx.com/dotnet/Article/33637
译者Jack 五邑技术网
在我早期为DevX写的两篇文章中, "旧摄像头玩新把戏:在您的.NET程序中应用视频捕捉" 和 "用网络视频和伺服器构建一个强大的安防系统," 我已展示如何将你的网络摄像头与你的.NET程序线路合,并利用它来实现监视的目的. 然而,使用这些解决方案,只能在本地的电脑上看运行网络摄像头的图像. 这一次我们要实现一个有趣的扩大应用,使视频可以通过因特网远程观看.
然后在这篇文章里我将教你您怎么使用socket通信从服务器到远程客户发送一个在线视频图像。这篇文章中的样例包括:
- 服务器端播放从网络摄像头上视频捕获的图像
-
客户端从服务器接收直播图像
服务器将允许多个客户端同时连接到它。尤其, 这是对您能使用它在您的办公室监测您的家或孩子的家庭环境的有用应用程序.
创造服务器端
首先我要创造服务器端。使用Visual Studio 2005 , 创造一种新Windows 应用程序并命名为RemoteMonitoring 。在默认的Form1中, 增加PictureBox 控件(参见 图 1) 和设置它的属性如下:
- Size—449, 253
- SizeMode—StretchImage
![]() 图 1. 添加一个PictureBox控件到Form1. |
![]() 图 2. 现在您能在应用程序中预览来自助网络摄像头的图像 |
切换到后台代码窗口并导入以下namespace:
Imports System.Runtime.InteropServices
定义用于显示摄像头图像的常量和变量轮:
Public Class Form1
'---constants for capturing the video from webcam---
Const WM_CAP_START = &H400S
Const WS_CHILD = &H40000000
Const WS_VISIBLE = &H10000000
Const WM_CAP_DRIVER_CONNECT = WM_CAP_START + 10
Const WM_CAP_DRIVER_DISCONNECT = WM_CAP_START + 11
Const WM_CAP_EDIT_COPY = WM_CAP_START + 30
Const WM_CAP_SEQUENCE = WM_CAP_START + 62
Const WM_CAP_FILE_SAVEAS = WM_CAP_START + 23
Const WM_CAP_SET_SCALE = WM_CAP_START + 53
Const WM_CAP_SET_PREVIEWRATE = WM_CAP_START + 52
Const WM_CAP_SET_PREVIEW = WM_CAP_START + 50
Const SWP_NOMOVE = &H2S
Const SWP_NOSIZE = 1
Const SWP_NOZORDER = &H4S
Const HWND_BOTTOM = 1
'---used as a window handle---
Dim hWnd As Integer
定义常量后,你需要为视频捕捉功能定义函数,可以在avicap32.dll库中找到,而以下三个函数(可以在user32.dll找到)被应用于多个不同的窗口.
'--The capGetDriverDescription function retrieves the version
' description of the capture driver--
Declare Function capGetDriverDescriptionA Lib "avicap32.dll" _
(ByVal wDriverIndex As Short, _
ByVal lpszName As String, ByVal cbName As Integer, _
ByVal lpszVer As String, _
ByVal cbVer As Integer) As Boolean
'--The capCreateCaptureWindow function creates a capture window--
Declare Function capCreateCaptureWindowA Lib "avicap32.dll" _
(ByVal lpszWindowName As String, ByVal dwStyle As Integer, _
ByVal x As Integer, ByVal y As Integer, _
ByVal nWidth As Integer, _
ByVal nHeight As Short, ByVal hWnd As Integer, _
ByVal nID As Integer) As Integer
'--This function sends the specified message to a window or
' windows--
Declare Function SendMessage Lib "user32" Alias "SendMessageA" _
(ByVal hwnd As Integer, ByVal Msg As Integer, _
ByVal wParam As Integer, _
<MarshalAs(UnmanagedType.AsAny)> ByVal lParam As Object) _
As Integer
'--Sets the position of the window relative to the screen buffer--
Declare Function SetWindowPos Lib "user32" Alias "SetWindowPos" _
(ByVal hwnd As Integer, _
ByVal hWndInsertAfter As Integer, ByVal x As Integer, _
ByVal y As Integer, _
ByV