Windows与ARM平台的基于JRTPLIB的RTP通信及其问题解决
按照以上两篇文章在WINDOWS,ARM上成功测试好JRTPLIB后,(当然要在arm端ping通windows主机地址,同时关闭双方的防火墙)下面就介绍如何测试WINDOWS,ARM之间的RTP通信。
在jrtplib解压后的目录里有example文件夹,里面的程序可以提供测试用。
Example1可以用来发送数据,example2可以用来发送接收。Example3,4用来接收。
这里我使用example1用来发送数据,example4用来接收,
首先在windows端运行example4,
Enter local portbase:9000
Number of seconds you wish to wait:100(可大一点,以免后面操作时间不够)
在arm端运行example1按照提示输入
Enter local portbase:8000(创建RTP会话端口)
Enter the destination IP address:10.0.0.116(我的WINDOWS IP地址)
Enter the destination port:9000(目标端口)
Number of packets you wish to be sent:10(不能超过Int型的4字节数:32767)
这样之后,在windows下收不到数据
解决办法:在网上查了很多资料,一种说法是正确的:PC端使用的字节序是little endian,arm端使用的是big endian,这样会造成ARM端虽然像PC发送了数据,但PC端识别不了。。。
需要把jrtplib文件夹 /src下的rtpconfig_unix.h文件中的#define big endian删除掉。
然后重新编译库文件,并将Libjrtp-3.7.1.so,libjthread-1.2.1.so拷贝到/nfs/usr/lib中,
网上很多文章到此就可以了,只需把解压后的JRTPLIB文件夹中的example1复制到nfs下执行即可看到arm与Pc端成功通信。
但是,我这仍然不行,挣扎了一个多星期,最后才突发想到 是不是要重新编译下例程example1.cpp,于是执行命令
arm_v5t_le-g++ -o example11 ./example2.cpp -I/home/jrtp/include/jrtplib3 -I/opt/jrtplib-jthread/include/jrtplib3(JRTP头文件路径) -L/opt/jrtplib-jthread/include/jthread -ljthread -ljrtp –lpthread
编译成功,然后拷贝example11(用来发送)到nfs下执行,按照上面说的在PC下执行接收程序,这样测试终于成功了。。。
兴奋。。。