1最近要在QT平台上实现流媒体传输,网上大多使用jrtplib 开源库,经过前期的收集资料,这两天终于成功的在QT上成功的运行起来了jrtplib 里面的exmple1.:有图有真相
下面我说说我的步骤:
1 在windows上编译jrtplib 3.9.1和jthread 1.3.1 下载和用CMake编译
2 用VC++6.0 分别运行jthread 和 jrtplib(顺序很重要)
3 你会发现运行后在 jthread 项目下产生jthreadconfig.h(其实你看CMAKElist就明白了)
4 你会发现运行后在 jrtplib 项目下产生rtpconfig.h和rtptypes.h(其实你看CMAKElist就明白了)
5 将文件jthread-1.3.1 里面的jmutex.h jmutexautolock.h jthread.h 和win32 文件夹里面的两个CPP(你会问pthread 里面也有两个CPP 貌似使用在unix 平台)放到jrtplib-3.9.1 文件src文件夹里面。
6 将VC产生的两个jthreadconfig.h rtpconfig.h和rtptypes.h 也放在jrtplib-3.9.1 文件src文件夹里面
7 用QT加载jrtplib-3.9.1 文件src文件夹里面所有的文件 编译——buge来了
buge1 :ui64 无法识别
解决办法:除掉数字后面的ui64 用(unsigned __int64)强制转化
return b*(unsigned __int64)(1000000)+(c* (unsigned __int64)(1000000))/f;
buge2:
RTPNew 函数匹配模糊 因为与系统的new 有冲突:
解决办法:注释掉
//#define RTPNew(a,b) new(a,b) //#elsebuge3:
multicastgroups 函数识别不了
解决办法:看他的定义在rtpudpv4transmitter.cpp 文件里面RTP_SUPPORT_IPV6MULTICAST(支持多广播)下才有效,但是前面不支持导致此处的函数显示没有声明,对比
#ifdef RTP_SUPPORT_IPV4MULTICAST multicastgroups(mgr,RTPMEM_TYPE_CLASS_MULTICASTHASHELEMENT), #endif // RTP_SUPPORT_IPV4MULTICAST
#ifdef RTP_SUPPORT_IPV6MULTICAST// 修改部分 multicastgroups(GetMemoryManager(),RTPMEM_TYPE_CLASS_MULTICASTHASHELEMENT), #endif// RTP_SUPPORT_IPV6MULTICASTbuge4 显示关于socket的函数都识别不了,因为没有加载库 Ws2_32.lib
解决办法:qt是在pro文件中 加入 LIBS += -lWs2_32 即可解决问题
说明:win7系统64bit,VC++6.0SP,QT5.3.1
到此可以睡觉了~~~~~具体成功的项目下载QT下成功例子