流媒體】jrtplib—VS2010下RTP开源协议库JRTPLIB3.9.1编译

一、JRTPLIB简介

  老外用C++编写的开源RTP协议库,用来进行实时数据传输,可以运行在 Windows、Linux、 FreeBSD、Solaris、Unix和VxWorks 等多种操作系统上,主页为:http://research.edm.uhasselt.be/~jori/page/index.php?n=Main.HomePage

 


二、相关下载

jrtplib:  http://research.edm.uhasselt.be/~jori/page/index.php?n=CS.Jrtplib 

jthread:   http://research.edm.uhasselt.be/~jori/page/index.php?n=CS.Jthread 

cmake:    http://www.cmake.org/cmake/resources/software.html


三、 编译步骤

1    下载jrtplib和jthread并解压缩。阅读README。

 编译jthread生成jthread.lib和jthread_d.lib。

    打开cmake,添加好输入(where..)和输出路径(where to...),完成configure配置(选visual studio 10),配置结果如下图:

  ② 点击generate,生成VS2010工程文件

  ③ 打开工程文件并编译,在debug和release下分别生成jthread.lib和jthread_d.lib

     编译的具体方法为:选择Solution Explorer里的 Solution jthread,点右键,运行"Rebuild Solution";如编译无错误,再选择INSTALL项目,运行"Build"。

  ④ 如果编译成功(如下图),会在C:\Program Files\jthread的include\jthread下生成头文件;在lib下生成lib和cmake文件 

 

    温馨提示:在win7下,你必须拥有管理者权限,否则编译不会通过,因为无法在C:\Program Files创建jthread文件,当然你可以手动创建。

  3  编译jrtplib生成jrtplib.lib和jrtplib_d.lib。

  ① 同2-①,其中configure会稍微麻烦一些,详细配置结果如下:

 

  ② 点击generate,生成VS2010工程文件

  ③ 打开工程文件并编译,在debug和release下分别生成jrtplib_d.lib和jrtplib.lib

    编译成功(如下图),在C:\Program Files\jrtplib下include\jrtplib3下会生成一堆头文件;在lib下会生成jrtplib_d.lib和jrtplib.lib以及cmake文件

    说明:网上提到的一些用VS2008和VC6.0方法中提到了两个细节:  一是要把"jmutex.h"和"jthread.h"两个头文件放入jrtplib/src目录下,二是要把src文件夹下所有头文件中的<jmutex.h>和<jthread.h>语句修改为"jmutex.h"和"jthread.h"。

     我在编译时没有处理这两个细节成功了,后续调试出现相应问题相应修改一下即可。

 


四、 使用实例

1  添加库

①步骤一:

方法1. 将编译生成的jrtplib.lib和jthread.lib库拷贝到“*:\Program Files\Microsoft Visual Studio 10.0\VC\lib”下面

方法2. 将编译生成的四个lib库库拷贝到当前工程的cpp文件下

②步骤二:

方法1. [菜单]“项目->属性->配置属性->连接器->输入->附加依赖项”里填写“jrtplib.lib;jthread.lib;WS2_32.lib”

方法2.  pragma 方式,在stdafx.h文件中 添加

#ifdef DEBUG#pragma comment(lib, "jrtplib_d.lib") #pragma comment(lib,"jthread_d.lib")#pragma comment(lib,"WS2_32.lib")#else#pragma comment(lib, "jrtplib.lib") #pragma comment(lib,"jthread.lib")#pragma comment(lib,"WS2_32.lib")#endif

2  添加头文件

①步骤一:将所有的.h文件放到一起,如myJRTPLIBHeader里面,再添加include

②步骤二:

方法1.“项目->属性->配置属性->C/C++->常规->附加包含目录”

方法2.“工具->选项->项目和解决方案->C++ 目录”,选择对应平台,然后添加所需“包括文件”目录(此法VS2010不通)

 

3  测试代码(sample1)

cpp文件:

// jrtplibTest.cpp : 定义控制台应用程序的入口点。//

#include "stdafx.h"

//  头文件#include "rtpsession.h"#include "rtpudpv4transmitter.h"#include "rtpipv4address.h"#include "rtpsessionparams.h"#include "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;

//// This function checks if there was a RTP error. If so, it displays an error// message and exists.//void checkerror(int rtperr){if (rtperr < 0)    {        std::cout << "ERROR: " << RTPGetErrorString(rtperr) << std::endl;        exit(-1);    }}

//// The main routine//int main(void){#ifdef WIN32    WSADATA dat;    WSAStartup(MAKEWORD(2,2),&dat);#endif // WIN32

RTPSession sess;    uint16_t portbase,destport;    uint32_t destip;    std::string ipstr;int status,i,num;

// First, we'll ask for the necessary information

std::cout << "Enter local portbase:" << std::endl;    std::cin >> portbase;    std::cout << std::endl;

std::cout << "Enter the destination IP address" << std::endl;    std::cin >> ipstr;

// 获得接收端的IP地址和端口号    destip = inet_addr(ipstr.c_str());if (destip == INADDR_NONE)    {        std::cerr << "Bad IP address specified" << std::endl;return -1;    }

// The inet_addr function returns a value in network byte order, but// we need the IP address in host byte order, so we use a call to// ntohl    destip = ntohl(destip);

std::cout << "Enter the destination port" << std::endl;    std::cin >> destport;

std::cout << std::endl;    std::cout << "Number of packets you wish to be sent:" << std::endl;    std::cin >> num;

// Now, we'll create a RTP session, set the destination, send some// packets and poll for incoming data.

RTPUDPv4TransmissionParams transparams;    RTPSessionParams sessparams;

// IMPORTANT: The local timestamp unit MUST be set, otherwise//            RTCP Sender Report info will be calculated wrong// In this case, we'll be sending 10 samples each second, so we'll// put the timestamp unit to (1.0/10.0)    sessparams.SetOwnTimestampUnit(1.0/10.0);        

sessparams.SetAcceptOwnPackets(true);    transparams.SetPortbase(portbase);// 创建RTP会话    status = sess.Create(sessparams,&transparams);        checkerror(status);

RTPIPv4Address addr(destip,destport);// 指定RTP数据接收端    status = sess.AddDestination(addr);    checkerror(status);

for (i = 1 ; i <= num ; i++)    {        printf("\nSending packet %d/%d\n",i,num);

// send the packet        status = sess.SendPacket((void *)"1234567890",10,0,false,10);        checkerror(status);

sess.BeginDataAccess();

// check incoming packets        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());        }

sess.EndDataAccess();

#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 // WIN32return 0;}

4  下载

  在VS2010+Win7下编译好的JRTPLIB库及相关头文件下载:(刚传CSDN,现在打不开,等等,明天补上...)

补充:下载(猛击

 


Ref/Related

http://research.edm.uhasselt.be/~jori/page/index.php?n=CS.Jrtplib

http://research.edm.uhasselt.be/jori/jrtplib/documentation/index.html

http://blog.csdn.net/nickche300/article/details/6408099

http://blog.csdn.net/sunloverain2/article/details/5398694

http://blog.csdn.net/aaronalan/article/details/5153604

 

时间: 2024-07-31 08:23:11

流媒體】jrtplib—VS2010下RTP开源协议库JRTPLIB3.9.1编译的相关文章

VS2010下创建静态链接库和动态链接库

下面介绍一下用VS2010如何创建静态链接库和动态链接库,并测试创建的库. 1.静态链接库 打开VS2010,新建一个项目,选择win32项目,点击确定,选择静态库这个选项,预编译头文件可选可不选. 在这个空项目中,添加一个.h文件和一个.cpp文件.名字我们起为static.h和static.cpp static.h文件: [cpp] view plaincopy #ifndef LIB_H   #define LIB_H      extern "C" int sum(int a,

【流媒體】live555—VS2010 下live555编译、使用及测试

Ⅰ live555简介 Live555 是一个为流媒体提供解决方案的跨平台的C++开源项目,它实现了对标准流媒体传输协议如RTP/RTCP.RTSP.SIP等的支持.Live555实现了对多种音视频编码格式的音视频数据的流化.接收和处理等支持,包括MPEG.H.263+.DV.JPEG视频和多种音频编码.同时由于良好的设计,Live555非常容易扩展对其他格式的支持.目前,Live555已经被用于多款播放器的流媒体播放功能的实现,如VLC(VideoLan).MPlayer. 该项目的源代码包括

惠普中小企業金牌服務媒體沙龍在北京舉行

主題為"商海遠航,金牌保障"的http://www.aliyun.com/zixun/aggregation/8668.html">惠普中小企業金牌服務媒體沙龍在北京舉行,中國惠普打印與信息產品集團金牌服務商務拓展經理鄧羽伲女士為到場媒體深入介紹了惠普金牌服務為用戶所提供的高效.專業服務內容及其所涵蓋的豐富產品線,尤其是近期面向中小企業用戶所推出的力度空前的促銷活動,并就目前中小企業用戶的實際IT需求與IT服務市場狀況與在場媒體進行了深入探討. 中國惠普打印與信息產品集

盘点Linux下的开源云平台&amp;&amp;云存储服务

15个您可能不知道的开源云平台 桉树云服务环境 Eucalyptus 开源协议及语言 GPL Java C/C++ 1 2 1 2 官方网站 http://www.eucalyptus.com/participate 介绍 Elastic Utility Computing Architecture for Linking Your Programs To Useful Systems (Eucalyptus) 是一种开源的软件基础结构,用来通过计算集群或工作站群实现弹性的.实用的云计算.它最初

危机下的开源大势

本文讲的是危机下的开源大势,[IT168 资讯]经过多年的不断努力,开源软件已经完全有能力为饱受金融危机困扰的企业带来转机,应用开源软件成为企业在信息化建设中的一种有益尝试,尤其是在移动和云计算领域,开源成为了重要选择. 全球性金融危机的深入影响,使得很多企业开始整合自己的IT基础设施,"复用"."重用"在不同的应用场景被反复提及,企业寄希望于在自己已经搭建好的应用系统上做更多的事情.同时,成本投入的锐减,使得企业的信息化建设陷入了泥潭,很多企业的信息化建设被停滞或

危机下的开源大势 Linux发展需完整产业链

本文讲的是危机下的开源大势 Linux发展需完整产业链,[IT168 资讯]全球性金融危机的深入影响,使得很多企业开始整合自己的IT基础设施,"复用"."重用"在不同的应用场景被反复提及,企业寄希望于在自己已经搭建好的应用系统上做更多的事情.同时,成本投入的锐减,使得企业的信息化建设陷入了泥潭,很多企业的信息化建设被停滞或放缓.经济因素甚至成为了制约信息化建设继续向前的桎梏,企业开始将目光投向了一个存在多年但并未受到足够重视的领域,开始关注和了解源自开源社区开发模式

io流-IO流 自定义readLine 无法读取下一行

问题描述 IO流 自定义readLine 无法读取下一行 5C import java.io.*;public class Demo { public static void main(String[] args) throws IOException { BufferedWriter bfw = new BufferedWriter(new FileWriter(""b.txt"")); bfw.write(""sdasdaadrn"

配置-VS2010下建立fortran工程找不到go to definition

问题描述 VS2010下建立fortran工程找不到go to definition 好吧,这是一个蛋疼的问题.如题目所说的,我在VS2010下建立fortran工程后无法使用go to definition之类的功能,根本找也找不到这个,但是编写的程序能够正常使用.而我建立c++工程一切正常...我是在服务器上做的事情,另外一个用户就一切正常,求问这到底是怎么一回事情T_T

VC6下DLL,VS2010下用,运行调试异常。

问题描述 VC6下DLL,VS2010下用,运行调试异常. VC6下开发的DLL,在VC6下开发应用程序可以使用前述DLL,工程转换到VS2010之后也可以使用,但是在VS2010下直接使用前述DLL,编译可以通过,但是运行调试时报内存访问异常.请问大侠,该如何解决? 解决方案 两个可能性,一个是本来程序就有内存的问题,但是vc2010对内存的检查更严格,所以问题得以暴露. 另一个可能是单字节双字节的问题,或者一些结构体长度定义不同,你内存分配硬编码了长度,而不是用sizeof求值,导致内存分配