视频通信系统的基本原理学习.docx
《视频通信系统的基本原理学习.docx》由会员分享,可在线阅读,更多相关《视频通信系统的基本原理学习.docx(10页珍藏版)》请在冰豆网上搜索。
![视频通信系统的基本原理学习.docx](https://file1.bdocx.com/fileroot1/2023-1/31/aeda443c-fc99-400f-ba76-251ed8aee387/aeda443c-fc99-400f-ba76-251ed8aee3871.gif)
视频通信系统的基本原理学习
实验七视频通信系统的基本原理
张慧彬
2013-8-29
机器人研究中心
目录
一.TCP/IP体系结构和socket网络编程2
二.视频通信程序基本框架4
三.程序分析及演示程序5
四.实验总结及心得9
一.TCP/IP体系结构和socket网络编程
1.TCP/IP体系结构
(1)主机-网络层
在TCP/IP参考模型中,主机-网络层是参考模型的最低层,它负责通过网络发送和接收IP数据报。
TCP/IP参考模型允许主机连入网络时使用多种现成的与流行的协议,例如局域网协议或其他一些协议。
在TCP/IP的主机-网络层中,它包括各种物理网协议,例如局域网的Ethernet、局域网的TokenRing、分组交换网的X.25等。
当这种物理网被用作传送IP数据包的通道时,我们就可以认为是这一层的内容。
这体现了TCP/IP协议的兼容性与适应性,它也为TCP/IP的成功奠定了基础。
(2)互联网络层
在TCP/IP参考模型中,互联网络层是参考模型的第二层,它相当于OSI参考模型网络层的无连接网络服务。
互联网络层负责将源主机的报文分组发送到目的主机,源主机与目的主机可以在一个网上,也可以在不同的网上。
互联网络层的主要功能包括以下几点。
①处理来自传输层的分组发送请求。
在收到分组发送请求之后,将分组装入IP数据报,填充抱头,选择发送路径,然后将数据报发送到相应的网络输出线。
②处理接收的数据报。
在接收到其他主机发送的数据报之后,检查目的地址,如需要转发,则选择发送路径,转发出去;如目的地址为本结点IP地址,则除去抱头,将分组交送传输层处理。
③处理互联的路径、流程与拥塞问题。
TCP/IP参考模型中网络层协议是IP(InternetProtrol)协议。
IP协议是一种不可靠、无连接的数据报传送服务的协议,它提供的是一种“尽力而为(best-effort)”的服务,IP协议的协议数据单元是IP分组。
(3)传输层
在TCP/IP参考模型中,传输层是参考模型的第3层,它负责在应用进程之间的端到端通信。
传输层的主要目的是在互联网中源主机与目的主机的对等实体间建立用于会话的端到端连接。
从这点上来说,TCP/IP参考模型与OSI参考模型的传输层功能是相似的。
在TCP/IP参考模型中的传输层,定义了以下这两种协议。
①传输控制协议(transmissioncontrolprotocol,,TCP)
TCP协议是一种可靠的面向连接的协议,它允许将一台主机的字节流(bytestream)无差错的传送到目的主机。
TCP协议将应用层的字节流分成多个字节段(bytesegment),然后将一个个的字节段传送到互联网络层,发送到目的主机。
当互联网络层将接收到的字节段传送给传输时,传输层再将多个字节段还原成字节流传送到应用层。
TCP协议同时要完成流量控制功能,协调收发双方的发送与接收速度,达到正确传输的目的。
②用户数据协议(userdatagramprotocol,UDP)
UDP协议是一种不可靠的无连接协议,它主要用于不要求分组顺序到达的传输中,分组传输顺序检查与排序由应用层完成。
(4)应用层
在TCP/IP参考模型中,应用层是参考模型的最高层。
应用层包括了所有的高层协议,并且总是不断有新的协议加入。
目前,应用层协议主要有以下几种:
1远程登录协议(Telnet);
2文件传送协议(filetransferprotocol,FTP);
3简单邮件传送协议(simplemailttransferprotocol,SMTP);
4域名系统(domainnamesystem,DNS);
5简单网络管理协议(simplenetworkmanagementprotocol,SNMP);
6超文本传送协议(hypertexttransferprotocol,HTTP).
2.socket网络编程
(1)基本概念
两台计算机通过网络进行通信
图1
(2)基于UDP的socket编程(面向无连接)
服务器端(接收端)程序:
创建套接字(socket)→将套接字绑定到一个本地地址和端口上(bind)→等待接收数据(recvfrom)→关闭套接字。
客户端(发送端)程序:
创建套接字(socket)→向服务器发送数据(sendto)→关闭套接字。
(3)基于TCP的socket编程(面向连接)
服务器端程序:
创建套接字(socket)→将套接字绑定到一个本地地址和端口上(bind)→将套接字设为监听模式,准备接收客户请求(listen)→等待客户请求到来;当请求到来后,接受连接请求,返回一个新的对应于此次连接的套接字(accept)→用返回的套接字和客户端进行通信(send/recv)→返回,等待另一客户请求→关闭套接字。
客户端程序:
创建套接字(socket)→向服务器发出连接请求(connect)→和服务器端进行通信(send/recv)→关闭套接字。
二.视频通信程序基本框架
1.一般视频通信的基本框架
2,VideoNet程序系统基本框架
发送端接收端
网络
三.程序分析及演示程序
1.录音和播放音频
//创建并启动记录器线程
record=newRecordSound(this);
record->CreateThread();
//创建并启动播放器线程
play=newPlaySound1(this);
play->CreateThread();
//开始记录
record->PostThreadMessage(WM_RECORDSOUND_STARTRECORDING,0,0);
//开始播放
play->PostThreadMessage(WM_PLAYSOUND_STARTPLAYING,0,0);
//在音频记录,数据将在OnSoundData可用
//回调函数的RecordSound类。
在这里你可以将你的
//代码来发送数据到远程主机…
//执行接收到的数据从远程主机
play->PostThreadMessage(WM_PLAYSOUND_PLAYBLOCK,size,(LPARAM)data);
//结束录制
record->PostThreadMessage(WM_RECORDSOUND_STOPRECORDING,0,0);
//停止播放绘画过程
play->PostThreadMessage(WM_PLAYSOUND_STOPPLAYING,0,0);
//最后停止录音线程
record->PostThreadMessage(WM_RECORDSOUND_ENDTHREAD,0,0);
//停止执行的线程…
play->PostThreadMessage(WM_PLAYSOUND_ENDTHREAD,0,0);
2.视频捕捉
//创建类的实例
vidcap=newVideoCapture();
//这是以后用来调用显示函数的
//主对话框类当帧捕获
vidcap->SetDialog(this);
//这确实很多工作包括连接到驱动程序
//和设置所需的视频格式。
返回TRUE,如果
//成功地连接到videocapture装置。
vidcap->Initialize();
//如果成功,那么你可以得到BITMAPINFO相连
//结构相关联的视频格式。
这是后来
//用来显示捕获的框架……
this->m_bmpinfo=&vidcap->m_bmpinfo;
//现在你可以开始捕获…
vidcap->StartCapture();
//一旦捕获开始帧将抵达回调函数
//OnCaptureVideo”的VideoCapture类。
在这里调用显示
//函数来显示帧。
//停止捕获
vidcap->StopCapture();
//如果你的工作是在....只是摧毁它..
vidcap->Destroy();
3.显示捕获视频帧
//初始化DIB绘制……
HDRAWDIBhdib=:
:
DrawDibOpen();
//然后调用这个函数将合适的参数....
:
:
DrawDibBegin(hdib,...);
//现在如果你准备好了和帧数据
//调用这个函数来显示帧
:
:
DrawDibDraw(hdib,...);
//最后...终结
:
:
DrawDibEnd(hdib);
:
:
DrawDibClose(hdib);
4.编码器和译码器库
//初始化压缩机
CParamcparams;
cparams.format=CPARAM_QCIF;
InitH263Encoder(&cparams);
//如果你需要转换从RGB24YUV420,然后调用这个
InitLookupTable();
//设置回调函数
//OwnWriteFunction是全局函数称为
//在编码返回编码数据……
WriteByteFunction=OwnWriteFunction;
//对压缩数据必须在YUV420格式…
//因此压缩前调用此方法
ConvertRGB2YUV(IMAGE_WIDTH,IMAGE_HEIGHT,data,yuv);
//....Compressthe“框架”
cparams.format=CPARAM_QCIF;
cparams.inter=CPARAM_INTRA;
cparams.Q_intra=8;
cparams.data=yuv;//数据在YUV格式…
CompressFrame(&cparams,&bits);
//你可以压缩数据的回调函数
//那你可以再一次运行调试……
//最后终止编码器
//ExitH263Encoder();
分析成功之后将程序运行如下图:
图2
在输入IP地址可以进行视频、文字信息的交流:
图3
四.实验总结及心得
本次实验我们学习了视频通信的基本原理,基本了解了它的基本原理,但是不能够深度的理解,在对VC++网络通信、VFW的相关知识学习时才知道我的自学能力并不强。
在以后的学习中应该认真对待,对每一个知识认真研究,争取做到深度理解。
对TCP/IP体系结构有所了解,但是对于socket网络编程的一些函数还是不懂,在今后我一定再努力一点学好这个程序。
实现自己的网路变成做一个自己的视频通信系统。