利用VC++实现局域网实时视频传输
2010-07-06 20:43:44 来源:WEB开发网核心提示:2、视频帧的发送实时视频传输为了实时,要不断地将压缩好的数据发送到接受端,利用VC++实现局域网实时视频传输(2),所以在发送端创建一个线程,专门用来发送数据,等待下一次调用回调函数,这种策略称之为“停等”策略,同时主线程仍然不停的采集数据并进行压缩,发送线程的工作流程如图3所示
2、视频帧的发送
实时视频传输为了实时,要不断地将压缩好的数据发送到接受端。所以在发送端创建一个线程,专门用来发送数据。同时主线程仍然不停的采集数据并进行压缩。发送线程的工作流程如图3所示。
图3 发送线程工作流程
不妨假设创建的线程名为sendThread,核心代码实现如下:
while(1)
{
isOK=true; //准备就绪
SuspendThread(sendThread); //挂起线程
isOK=false; //线程正在发送数据
int length=frameLength; //待发数据长度
if(length<50000) {//判断数据是否正常
int n=0;
int sendCount=0;
while(length>0) {
n=send(sock,(char*)imageBuf+sendCount,length,0); //发送数据,
//imageBuf是指针,指向待发数据帧
if(n==SOCKET_ERROR) //网络出现异常,则退出线程
break;
length-=n;
sendCount+=n;
}
}
}
线程中发送的数据帧是按照上一节中的方法组建好的数据帧。这种方法能够保证正在发送的当前帧能够完整地到达接收端。
注意此线程中刚开始或者每当发送完一帧以后,线程就转到挂起状态,等待外界唤醒。这个任务由回调函数完成,在回调函数中,判定如果发送线程准备就绪(处于挂起状态),则进行图像压缩,然后唤醒线程发送压缩完的数据,否则直接跳出,等待下一次调用回调函数,这种策略称之为“停等”策略,在后面有详细介绍。
更多精彩
赞助商链接