日期:2014-05-18  浏览次数:20793 次

对avicap32.dll调用 想写一个基于网络摄像头的程序 可以两个人视屏聊天的
我想写一个关于视频聊天的程序,在网上搜了很多最后觉得使用这个
http://blog.csdn.net/zzmdegm/article/details/1915364 的例二(例一也用了,但是觉得例二合适点)
我想实现的是在本地开启摄像头显示自己,然后把这个视屏流发送给客户端,让视频也在客户端显示自己。
于是问题就来了:
网络上的方法是:在客户端不断的截图,然后发送到客户端,客户端监听到后不断的显示
但是我用了下面的类后,然后跟踪,发现在FrameCallBacker(***)中会得到视频信息,会被保存,所以我想只要把这个视频信息发送给客户端,客户端就可以显示了这是类中的一个函数,
C# code

 private void FrameCallBacker(IntPtr lwnd, IntPtr lpVHdr)
        {
            showVideo.VIDEOHDR videoHeader = new showVideo.VIDEOHDR();
            byte[] VideoData;
            videoHeader = (showVideo.VIDEOHDR)showVideo.GetStructure(lpVHdr, videoHeader);
            //难道在这里?下面的VideoData会得到视屏信息 我想只要发送这个就可以了
            VideoData = new byte[videoHeader.dwBytesUsed];//在这里赋值
            showVideo.Copy(videoHeader.lpData, VideoData);
            //在这里显示
            if (this.RecievedFrame != null)
                this.RecievedFrame(VideoData);
        }


注释那些是我跟踪后判断的,不一定判断正确,我第一次使用API,所以很多都不清楚,我先把这个类贴出来,后面贴上窗体的代码,目的就是想让大家帮帮我:
1 我是不是只需要把VideoData传过去,就可以了,如果这个思路是对的,那么,我在客户端怎么操作(这是我最想要的结果,我在客户端怎么处理,其实我还是不明白这个VideoData数组怎么保存的)
2 如果还有其他的处理方式,请不吝赐教啊
具体的类就在这个连接
http://blog.csdn.net/zzmdegm/article/details/1915364的例二

------解决方案--------------------
是这样的哥哥,首先你要知道你一次获取到一张的图片的BYTE[]的大小,还要知道这个图片的格式例如IMG什么的
,然后你最好是先实现在本地将BYTE【】数组里的数据转换成你要播放的格式并显示出来。能再本地播放了,在转换成数据流发送到客户端,在客户端,循环接受一个完成的BYTE【】数组,也就是说用TCP一次发送的数据只能有1024,而你的图片可能超过1024,这怎么办?自己想想应该能解决,当你确定这个图片的数据都发送过去了以后,将这个BYTE【】转换成你想要的图片格式就行了。虽然说的不清楚希望能给点分我很穷 邪邪
------解决方案--------------------
這裡不是有現成例子和控件嗎?
http://www.datastead.com/products/tvideograbber/download.html
------解决方案--------------------
关注了
------解决方案--------------------
http://www.leadtools.com/sdk/multimedia-suite.htm?linkid=top

更強大