首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 移动开发 > 移动开发 >

【RTP】 入门实践小结【精华】

2012-09-24 
【RTP】 入门实践总结【精华】一,windows 下资料http://www.cnblogs.com/skyseraph/archive/2012/04/07/243554

【RTP】 入门实践总结【精华】
一,windows 下资料
      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 WIN32WSADATA dat;WSAStartup(MAKEWORD(2,2),&dat);#endif // WIN32RTPSession 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_THREADRTPTime::Wait(RTPTime(1,0));}sess.BYEDestroy(RTPTime(10,0),0,0);#ifdef WIN32WSACleanup();#endif // WIN32return 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 hereprintf("Got packet !\n");// we don't longer need the packet, so// we'll delete itsess.DeletePacket(pack);}} while (sess.GotoNextSourceWithData());}        }        while(1);sess.EndDataAccess();                      return 0;}
编译:g++ -o receive  receive.cpp  -ljrtp -I /usr/local/include/jrtplib3/



热点排行