rtp
dows 下资料
http://www.cnblogs.com/skyseraph/archive/2012/04/07/2435540.html
一,安装Cmake
二,在 jrtplib-3.9.1_1 中运行 cmake . 生成Makefile
三,然后 make
接着 make install
头文件被安装在 /usr/local/include/jrtplib3/ 所以编译程序时候需要添加 -I /usr/local/include/jrtplib3/
库文件被安装在 /usr/local/lib/libjrtp.a 所以编译程序时候需要添加 -ljrtp
四,编译 example1
g++ -o test example1.cpp -ljrtp -I /usr/local/include/jrtplib3/
报错:./test: error while loading shared libraries: libjrtp.so.3.9.1: cannot open shared object file: No such file or directory
分析:已经将 jrtp 安装完毕,为什么找不到动态库呢?
解决:将 usr/local/lib/libjrtp.so.3.9.1 拷贝到 usr/lib 下面就可以执行了
五,调试
报错:The specified port base is not an even number
分析:jrtp 不支持奇数端口
附:
发送端代码:send.cpp
- /*
- Here's a small IPv4 example: it asks for a portbase and a destination and
- starts sending packets to that destination.
- */
- #include "jrtplib3/rtpsession.h"
- #include "jrtplib3/rtpudpv4transmitter.h"
- #include "jrtplib3/rtpipv4address.h"
- #include "jrtplib3/rtpsessionparams.h"
- #include "jrtplib3/rtperrors.h"
- #ifndef WIN32
- #include <netinet/in.h>
- #include <arpa/inet.h>
- #else
- #include <winsock2.h>
- #endif // WIN32
- #include <stdlib.h>
- #include <stdio.h>
- #include <iostream>
- #include <string>
- using namespace jrtplib;
- void checkerror(int rtperr)
- {
- if (rtperr < 0) //如果为负数 则返回失败信息
- {
- std::cout << "ERROR: " << RTPGetErrorString(rtperr) << std::endl;
- exit(-1);
- }
- }
- int main(void)
- {
- #ifdef WIN32
- WSADATA dat;
- WSAStartup(MAKEWORD(2,2),&dat);
- #endif // WIN32
- RTPSession sess;
- uint16_t portbase=8000,destport=7800;
- uint32_t destip;
- std::string ipstr="127.0.0.1";
- int status,i,num=10;
- destip = inet_addr(ipstr.c_str());//IP地址的建立
- if (destip == INADDR_NONE)
- {
- std::cerr << "Bad IP address specified" << std::endl;
- return -1;
- }
- destip = ntohl(destip);
- RTPUDPv4TransmissionParams transparams;
- RTPSessionParams sessparams;
- sessparams.SetOwnTimestampUnit(1.0/10.0);
- sessparams.SetAcceptOwnPackets(true);
- transparams.SetPortbase(portbase);
- status = sess.Create(sessparams,&transparams);
- checkerror(status);//检查RTP会话创建过程是否失败
- RTPIPv4Address addr(destip,destport);//套接字
- status = sess.AddDestination(addr);//设置数据发送的目标地址(允许有多个目的地址)
- checkerror(status);
- for (i = 1 ; i <= num ; i++)
- {
- printf("\nSending packet %d/%d\n",i,num);
- status = sess.SendPacket((void *)"1234567890",10,0,false,10);
- checkerror(status);
- // #ifndef RTP_SUPPORT_THREAD
- // status = sess.Poll();
- // checkerror(status);
- // #endif // RTP_SUPPORT_THREAD
- RTPTime::Wait(RTPTime(1,0));
- }
- sess.BYEDestroy(RTPTime(10,0),0,0);
- #ifdef WIN32
- WSACleanup();
- #endif // WIN32
- return 0;
- }
编译:g++ -o send send.cpp -ljrtp -I /usr/local/include/jrtplib3/
接受端代码:
- #include "jrtplib3/rtpsession.h"
- #include "jrtplib3/rtpudpv4transmitter.h"
- #include "jrtplib3/rtpipv4address.h"
- #include "jrtplib3/rtpsessionparams.h"
- #include "jrtplib3/rtperrors.h"
- #ifndef WIN32
- #include <netinet/in.h>
- #include <arpa/inet.h>
- #else
- #include <winsock2.h>
- #endif // WIN32
- #include <stdlib.h>
- #include <stdio.h>
- #include <iostream>
- #include <string>
- using namespace jrtplib;
- // 错误处理函数
- void checkerror(int rtperr)
- {
- if (rtperr < 0) //如果为负数 则返回失败信息
- {
- std::cout << "ERROR: " << RTPGetErrorString(rtperr) << std::endl;
- exit(-1);
- }
- }
- int main(int argc, char** argv)
- {
- RTPSession sess;
- int localport;
- int portbase = 7800;
- int status;
- // 创建RTP会话
- RTPUDPv4TransmissionParams transparams;
- RTPSessionParams sessparams;
- sessparams.SetOwnTimestampUnit(1.0/10.0);
- sessparams.SetAcceptOwnPackets(true);
- transparams.SetPortbase(portbase);
- status = sess.Create(sessparams,&transparams);
- checkerror(status);
- uint32_t destip;
- std::string ipstr="127.0.0.1";
- int destport=7800;
- destip = inet_addr(ipstr.c_str());//IP地址的建立
- if (destip == INADDR_NONE)
- {
- std::cerr << "Bad IP address specified" << std::endl;
- return -1;
- }
- destip = ntohl(destip);
- RTPIPv4Address addr(destip,destport);//套接字
- sess.AddToAcceptList(addr);
- std::cout<<"Begin receive: \n";
- sess.BeginDataAccess();
- do{
- status = sess.Poll();
- checkerror(status);
- if (sess.GotoFirstSourceWithData())
- {
- do
- {
- RTPPacket *pack;
- while ((pack = sess.GetNextPacket()) != NULL)
- {
- // You can examine the data here
- printf("Got packet !\n");
- // we don't longer need the packet, so
- // we'll delete it
- sess.DeletePacket(pack);
- }
- } while (sess.GotoNextSourceWithData());
- }
- }
- while(1);
- sess.EndDataAccess();
- return 0;
- }
编译:g++ -o receive receive.cpp -ljrtp -I /usr/local/include/jrtplib3/