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

2023-11-15

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

SkySeraph Apr 7th 2012

Email:skyseraph00@163.com 



一、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    下载jrtplibjthread并解压缩。阅读README

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

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

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

  ③ 打开工程文件并编译,在debugrelease下分别生成jthread.libjthread_d.lib

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

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

 

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

  3  编译jrtplib生成jrtplib.libjrtplib_d.lib

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

 

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

  ③ 打开工程文件并编译,在debugrelease下分别生成jrtplib_d.libjrtplib.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 // WIN32
return 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

 

 


from: http://www.cnblogs.com/skyseraph/archive/2012/04/07/2435540.html

 

 


作者:skyseraph 
出处:http://www.cnblogs.com/skyseraph/ 
Email/GTalk: zgzhaobo@gmail.com 
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

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

  • 【数据库原理选择题1-4章】

    1 1 数据库系统概述 1 1 DB DBMS 和DBS 三者之间的关系是 A DBMS包括DB和DBS B DB 包括DBMS和DBS C 不能相互包括 D DBS包括DB和DBMS 正确答案 D 2 位于用户和操作系统之间的一层数据管理
  • VS2017 登录账户时,反复让输入密码,而一直无法登陆。

    问题描述 VS2017 登录账户时 反复让输入密码 而一直无法登陆成功 最后显示无法刷新此账户凭据 解决办法 在排除是自己账户或者网络有问题后 通过清理用户数据解决问题 具体步骤如下 使用管理员权限打开命令终端 转到VS安装目录下的 Com
  • torch中的model.eval()、model.train()详解

    个人简介 深度学习图像领域工作者 工作总结链接 https blog csdn net qq 28949847 article details 128552785 链接中主要是个人工作的总结 每个链接都是一些常用demo 代码直接复制运行即
  • 欧几里得距离(欧式距离)

    文章目录 一 定义 二 公式 一 定义 欧几里得度量 欧氏距离 Euclidean Metric Euclidean Distance 指在m维空间中两个点之间的真实距离 或者向量的自然长度 即该点到原点的距离 比如 在二维和三维空间中的欧
  • 液滴/液膜蒸发过程—in文件模拟-后处理分析-Ovito/Python绘图

    关注 M r m a t e r i a l color Violet rm Mr material Mr material
  • FDR计算

    FDR计算 FDR的计算很简单 我折腾了一上午主要是因为遇到了以下几个问题 问题 FDR是什么 有什么用 怎么计算 我把几个模型的P值都合并成一个表了 所以每次运算FDR时 我需挑选特定的对象 我有多个模型 所以我想着要如何构建循环 FDR
  • 机器学习-人为设置函数方法和神经网络方法解决智能五子棋问题

    2 智能决策 2 1 博弈树模型算法 2 1 1 全局估算函数 此次项目中评估函数有两种 1 人为设定函数方法 更具人的经验 对一些特定的棋形在棋盘上进行检索 并且计数 最后赋予相应权值求和得到对棋盘的评价值 典型的棋形有 活一 活二 活三
  • 集成学习-理论概述

    1 集成学习概述 集成学习 ensemble learning 本身不是一个单独的机器学习算法 而是通过构建并结合多个机器学习器来完成学习任务 集成学习的特点 集成方法是一种将几种机器学习技术组合成一个预测模型的元算法 以减小方差 bagg

随机推荐

  • IDEA中如何导入module并成功运行

    在写Java项目的时候我们通常需要导入module 需要注意的是导入过程需要以下两大步骤 否则会出现无法运行的情况 以下我以导入 service edu 模块为例 一 将module文件拷贝到工程目录下 直接将需要导入的module文件 s
  • 李宏毅深度学习——优化方法

    记录了关于梯度的历史 SGD SGD with Momentum 防止gradient为0 SGD停止不动了 sgd with momentum 前面的移动会累加到下一步 sgd with momentum 前面的移动会累加到下一步 所以小
  • 【07节】Python3+Selenium4自动化 unittest 测试框架详解

    文章目录 1 unittest 框架介绍 2 创建单元测试步骤 3 unittest 模块介绍 3 1 TestCase 类 3 1 1 TestCase 类常用方法 3 1 2 TestCase 类其他方法 3 2 setUp 与 tea
  • 【cpu or gpu】【tensorflow】怎么查看用的是CPU还是GPU

    方法1 from tensorflow python client import device lib print device lib list local devices 参考博客 可用设备为 name device CPU 0 dev
  • 设计模式之桥接模式

    文章目录 一 手机操作问题 1 传统方案解决手机操作问题 2 传统方案解决手机操作问题分析 二 桥接模式 1 基本介绍 2 原理类图 三 桥接模式解决手机操作的问题 1 类图 2 代码 2 抽象类 抽象类子类 行为类接口 接口实现类 客户端
  • 关于api-ms-win-crt-runtimel1-1-0.dll缺失问题的解决方法

    1 问题描述 在win7系统中安装一个截图软件Snipaste时 出现api ms win crt runtimel1 1 0 dll缺失问题 如下图 2 问题原因 在网上查找资料 发现说是在C window system 或者C wind
  • 八十六.快速排序与归并排序(查找与排序(二))——JAVA

    查找与排序 一 查找与排序 三 查找与排序 四 一 分治法 分治法 将原问题划分成若干个规模较小而结构与原问题一致的子问题 递归地解决这些子问题 然后再合并其结果 就得到原问题的解 容易确定运行时间 是分支算法的优点之一 分治模式在每一层递
  • UE TSubclassOf

    定义 TSubclassOf
  • opencv中Mat矩阵的合并与拼接

    opencv如何将两个矩阵按行或者按列合并 在Matlab中将两个矩阵合并非常方便 按行合并 如A B C 按列合并如A B C 其实opencv有自带函数 vconcat和hconcat函数 用于矩阵的合并与图像的拼接 vconcat B
  • React中获取元素(ref获取方式)

    受控组件 在react中 input标签的部分属性受到react控制 如onChange是基于input 和change 事件进行封装 非受控组件 对于没有经历过封装的一些属性或者方法 可以通过ref去获取这个dom元素 再去获取或触发其自
  • 快速学会linux上的chrony服务

    文章目录 chrony服务 1 安装与配置 2 同步网络时间服务器 3 配置时间服务器 将本机作为服务器 4 chronyc命令 5 强制时区 chrony服务 Chrony 是一个开源自由的网络时间协议 NTP 的客户端和服务器软软件 它
  • 智慧井盖监测管理系统解决方案

    一 方案概述 近年来 随着城市化的不断发展 城市地下管道设施的一步步完善 井盖作为城市基础设施中必不可少的一部分 其重要性也逐渐凸显 然而 在实际应用中 井盖监测和管理并不容易 如井盖地理位置分散 数量庞大 传统的巡检方式成本高 效率低 不
  • java定时器Timer的使用

    在JDK库中Timer类主要负责计划任务的功能 也就是在指定的时间开始执行某一个任务 Timer类的主要作用就是设置计划任务 但是封装任务的类的是TimerTask类 下面展示几个例子 在指定的日期执行一次某一任务 import java
  • C语言常用math函数

    算法笔记 第2章 fabs double x 对double型变量取绝对值 floor double x 和ceil double x 对double型变量进行向下取整和向上取整 pow double r double p 计算 r p r
  • 几种集中式管理框架比较

    最近因为项目管理上的需要 调研集中式管理工具 百度Disconf 携程Apollo 阿里ACM 三者都可以满足集中式配置 并提供监听 实时改变配置 关于3个框架的使用以及搭建请自行参考官方API文档 不再叙述 对比了3个框架的配置 如下 d
  • 精确时钟同步协议ptp/IEEE-1588v2协议-------(1)简介

    本文目录 1 从角色的角度来区分 2 从时钟类型的角度来区分 2 1 在IEEE 1588 2002中定义了普通时钟 OC ordinary clock 和边界时钟 BC boundary clock 这二种类型的时钟 2 2 在IEEE
  • 【neo4j】win10上利用neo4j-admin导入csv

    原因 我需要导入CN DBpedia到Neo4j中 包含900万 的百科实体以及6700万 的三元组关系 普通逐条插入可能速度太慢 所以要使用neo4j admin命令来进行导入 CN DBpedia原始数据直提供了txt格式的三元组数据
  • java系统增加查找算法详解

    题干 数学老师小y 想写一个成绩查询系统 包含如下指令 insert name score 向系统中插入一条信息 表示名字为name的学生的数学成绩为score find name 表示查找名字为name的学生的数学成绩 注意有些同学可能会
  • Rancher基础使用

    Rancher基础使用 安装 以下安装是在centos7 环境下 注意 生产环境建议在 Kubernetes 集群上安装 Rancher 因为在多节点集群中 Rancher Server 可以实现高可用 这种高可用配置可以提升访问下游集群的
  • 【流媒體】jrtplib—VS2010下RTP开源协议库JRTPLIB3.9.1编译

    流媒體 jrtplib VS2010下RTP开源协议库JRTPLIB3 9 1编译 SkySeraph Apr 7th 2012 Email skyseraph00 163 com 一 JRTPLIB简介 老外用C 编写的开源RTP协议库