实验三_数字视频流通信传输
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
数字视频流通信传输
一 实验目的
1.了解流传输的原理。
2.理解计算机网络体系结构
3.掌握SOCKET编程
4.了解TI DSP平台下网络开发工具NDK
5. 结合原理对程序进行分析
6.运行.out文件看到视频流传输的效果。
二 实验原理
1.流媒体实现的关键技术就是流式传输。流式传输定义很广泛,现在主要指通过网络传送媒体(如视频、音频)的技术的总称。其特定含义为通过Internet 将影视节目传送到PC机。实现流式传输有两种方法:实时流式传输(Realtime Streaming)和顺序流式传输(progressive Streaming)。一般说来,如视频为实时广播,使用流式传输媒体服务器,或应用如RTSP的实时协议,即为实时流式传输。如使用HTTP服务器,文件即通过顺序流式传输。
2. 要使得计算机在网络中有条不紊地交换数据,就要为网络中数据交换建立统一的规则、标准或约定,称为网络协议;各层协议的集合构成了网络的体系结构。
计算机网络的五层协议体系结构图2.1所示:
图2.1 计算机网络五层协议
①应用层是所有用户所面向的应用程序的统称。ICP/IP协议族在这一层面有着很多协议来支持不同的应用,许多大家所熟悉的基于Internet的应用的实现就离不开这些协议。如我们进行万维网(WWW)访问用到了HTTP协议、文件传输用FTP协议、电子邮件发送用SMTP、域名的解析用DNS协议、远程登录用Telnet协议等等,都是属于TCP/IP应用层的;就用户而言,看到的是由一个个软件所构筑的大多为图形化的操作界面,而实际后台运行的便是上述协议。
②传输层的功能主要是提供应用程序间的通信,TCP/IP协议族在这一层的
协议有TCP和UDP。
③网络层是TCP/IP协议族中非常关键的一层,主要定义了IP地址格式,从而能够使得不同应用类型的数据在Internet上通畅地传输,IP协议就是一个网络层协议。
④网络接口层是TCP/IP软件的最低层,负责接收IP数据包并通过网络发送之,或者从网络上接收物理帧,抽出IP数据报,交给IP层。
3. UDP和TCP使用了应用层接口处的端口(port)与上层的应用进程提供通信,因此在运输协议数据单元(即UDP报文段或TCP用户数据报)的首部中都要写入源端口和目的端口。运输层收到IP层交上来的数据后,要根据其目的端口号决定当通过哪个端口号交给目的进程。
为了在通信时不致发生混乱,必须把端口号和主机的IP地址结合在一起使用。如一个TCP连接由它两个端点来标志,而每一个端点又是由IP地址和端口号决定的。因此将TCP连接的端点称为插口(Socket),或套接字、套接口。
套接字=(IP地址,端口号)
运输层和应用层之间进行交换的数据称为报文(Message),而在运输层和网络层之间进行交换的数据称为数据报(Datagram)。运输层可以使用运输控制协议(TCP)来封装数据,也可以使用数据报协议(UDP)来封装数据。
TCP提供的是面向连接的、可靠的数据流传输。TCP的数据包开头就有详细的IP地址,要求接受方返回“收到”的信息,这样才继续发送。TCP的安全性较高,保证了传输数据的正确性,但由于数据量大,要等待对方的反馈,其速度比不上UDP。UDP提供的是非面向连接的、不可靠的数据流传输。UDP传输中不管其顺序,数据到达收端后再进行排序组装,有数据包丢失等情况,但它的传输效率比较高,速度较快。
图3.1使用TCP协议的Client/Server结构程序模型
图3.2使用UDP协议的Client/Server结构程序模型
由图3.1和3.2可看出,使用TCP协议使用connect()和accetp(),确定了连接成功,从而建立了端口点对点的连接,确保了传输的可靠性。而使用UDP 时,不需建立点到点的连接,只有建立了端口,就可以把数据sendto()发送出去。
4. NDK是TI提供的一个相对完整的TCP/IP Stack及一些网络工具包,还集成了一些常用的网络服务器组件。NDK的编程请参考文档TI C64系列网络开发技术.ppt,PP:19~57.
三 程序设计
本程序是利用TI提供的JPEG的编码与解码库,加之TCP/IP协议栈来实现的视频采集,回放与网络的传输。工作过程如下:
①首先由SEEDVPM642将图像采集,并过行JPEG的压缩;
②可以由TCP/IP传到PC机上进行JPEG的解压与显示,也可以由DSP完成解压,由监视设备进行显示。
(1)程序主要的执行流程jpeg_network\src\main\ jpegmain.c中的main()函数所示,下面对主要函数进行简要的介绍:
tskVideoInputInit();//初始化输入输出设备
tskVideoOutputInit();
tskVideoInputStart();//获得输入数据流,并将图像数据转换为YUV420格式存储,方便后面压缩处理
tskVideoOutputStart();//将图像数据转换为YUV422格式,然后在显示器上播放
tskEncodeInit();//初始化编码器
tskDecodeInit();//初始化解码器
tskEncodeStart();//开始编码
tskDecodeStart();//开始解码
thrControlInit();
thrControlStartup();//获取网页上传输回来的控制信息
UTL_showHeapUsage( intHeap );// cgi编程,实现web网页与服务器的信息交互 UTL_showHeapUsage( extHeap );
(2)NDK网络编程
NDK的使用请参考文档 DM642上TCP_IP协议的实现及性能测试.pdf。下面对程序中NDK编程进行简要的分析。