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 编译库jrtplib、jthread并配置到编译环境
(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 运行一个例子程序
(1)vs2010新建一个空项目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
- JRTPLIB的编译和第一个测试例子
- 我的Firefox插件开发之旅(5)——编译和测试第一个Plugin例子:npruntime
- 我的Firefox插件开发之旅(5)——编译和测试第一个Plugin例子:npruntime
- Firefox插件开发(5)——编译和测试第一个Plugin例子:npruntime
- 编译和测试火狐第一个插件
- 我的Firefox插件开发之旅(5)——编译和测试第一个Plugin例子:npruntime(转载)
- 我的第一个ACE测试例子(Linux和Windows)
- (转载)我的第一个ACE测试例子(Linux和Windows)
- 编译jrtplib第一个例子
- 编译jrtplib第一个例子
- jrtplib和jthread的交叉编译
- java第一个类的测试小例子
- SparkR的第一个测试例子Spark Pi计算
- 编译jrtplib和jthread
- 第一个应用 和 测试交叉编译工具链
- 第一个Makefile文件(可以用来编译前面红黑树的实现程序和测试程序)
- jrtplib的编译问题
- JRTPLib的编译步骤
- 两周仅增长1%,iOS 8采用率增长缓慢
- 使用面向对象的技术创建高级 Web 应用程序
- install m2e plug-in for eclipse
- BZOJ 3211 花神游历各国 树状数组+并查集
- 通过崩溃trace来查找问题原因
- JRTPLIB的编译和第一个测试例子
- root密码
- Android Studio User Manual
- IT忍者神龟之笔刷安装说明
- 大数据应用的未来挑战和发展趋势
- gtest
- git 的使用(6)-git远程仓库
- IOS开发网络篇之──ASIHTTPRequest下载示例(支持断点续传)
- 数据结构(JAVA)---JAVA中的对象与指针