JRTPLIB的编译和第一个测试例子

来源:互联网 发布:生化危机人工智能图片 编辑:程序博客网 时间:2024/05/17 07:28

1 编译jrtplib

JRTPLIB是一个很牛的老外用C++写的一个开源的RTP协议库,用它可以进行数据的实时传输,具体接口封装协议请查看其他相关文档

我现在用的是jrtplib-3.7.1版本。

jrtplib只是一个库,不是可执行程序,我们只需要它编译好的jrtplib.lib文件放到我们的VC++编译环境中就可以在我们自己的程序中使用了。

1.1 jthread工程文件添加

下载jthread-1.2.1,打开src目录,把jmutex.h和jthread.h复制到jrtplib-3.7.0/src目录。

1.2 编译库jrtplibjthread并配置到编译环境

(1)打开jrtplib.dsw,把#include <jmutex.h> 改成#include "jmutex.h";#include <jthread.h> 改成#include "jthread.h",编译就可以通过了。

(这里会有33个警告jrtplib.lib - 0 error(s), 33 warning(s),不用管它,算是编译器的一个BUG吧,用Win32 Debug才会出现的警告。)

(2)Debug复制jrtplib.lib到C:\Program Files\Microsoft Visual Studio 10.0\VC\lib(我用的是vs2010,如果是其他编译器,将之放到相应库文件夹)目录中。

(3)这时再把之前下载的jthread编译,在debug目录中把jthread.lib也复制到C:\Program Files\Microsoft Visual Studio 10.0\VC\lib(我用的是vs2010,如果是其他编译器,将之放到相应库文件夹).这样jrtplib就算编译配置完成了。


2 运行一个例子程序

1vs2010新建一个空项目jrtptest1,把jrtplib-3.6.0/examples目录下的example1.cpp复制到工程目录下。

(2)把jrtplib-3.6.0/src目录中的头文件复制到工程目录下。

(3把jrtplib.lib和jthread.lib引入到工程当中去,还有网络通信少不了的ws2_32.lib库,在源码的头顶处加上

#pragma comment(lib,"jrtplib.lib")

#pragma comment(lib,"jthread.lib")

#pragma comment(lib,"ws2_32.lib")

4) 编译.可能会遇到的错误如下。

a若链接错误,这时还得改一个地方,也是最后一个地方,Project -> setting -> C/C++ ,Category中选择Code Generation,然后在Userun-time library中选择Multithreaded DLL,因为我们用到了多线程的链接库,得修改这个地方。

b报错:vc中error LNK2001:unresolved external symbol _WinMain@16

原因:用vc打开了一个.c/.cpp 文件,然后直接编译这个文件,这个文件中使用了WinMian而不是main作为入口函数(vc这时的默认设置是针对控制台程序的)。

解决方法:

1.进入project->setting->c/c++, 在category中选择preprocessor,在processor definitions中删除_CONSOLE, 添加_WINDOWS

2.进入project->setting->Link, 在Project options中将 /subsystem:console改为/subsystem:windows.

3. 仍然出现那个问题的话,反过来设置就应该可以了。把设置里面的windows改为console。(我是将windows 改为console,最后运行成功)

c、遇到“XX_unix.h”找不到,直接把相关的unix.h注释掉就好了。    

(5)测试运行

第一个提示 Enter local portbase:,一个主机端口,我输入了8989。(这里会出现错误,后面会讲到。)

第二个提示 Enter the destination IP address 输入目标IP地址,我输入了127.0.0.1本机。

第三个提示 Enter the destionation port 目标端口,直接输入8888。

第四个提示Number of packets you wish to be sent:发送包个数,输入10个,回车。

此时错误来了:ERROR: The specified port base is not an even number,主机端口错了...原因是jrtplib只能用偶数的端口号....重新试了一下,输入 6666 127.0.0.1 8888 10 ,终于可以发了。

但是还有一个问题,就是发的时候为什么收不到,源码中有接收的。原来把本地端口号和目标端口号一致就可以接收得到了。输入8888 127.0.0.1 8888 10,再测试。

Sending packet 1/10

Got packet !

Sending packet 2/10

Sending packet 3/10

Got packet !

Got packet !

Sending packet 4/10

Sending packet 5/10

Got packet !

Got packet !

Sending packet 6/10

Got packet !

Sending packet 7/10

Got packet !

Sending packet 8/10

Got packet !

Sending packet 9/10

Got packet !

Sending packet 10/10

Got packet !

Press any key to continue

是数据传输需要一定的时间吧,有时候发一次包并不能立即收到.第一个例子就这样顺利编译完成。


参考:http://blog.sina.com.cn/s/blog_6a0a1ba30100jv0e.html


0 0