jrtplib接收rtcp_qt tcpsocket 接收数据

jrtplib接收rtcp_qt tcpsocket 接收数据一.前言JRTPLIB是C++语言编写的RTP库,它帮助我们封装了RTP协议细节,用户通过提供好的接口可以设置RTP包信息并发送到指定地址,也可以接收RTP包取出信息。本文仅介绍如何使用JRTPLIB发送/接收RTP数据包,我在这篇博客又介绍了如何使用JRTPLIB构造RTP数据包来荷载H264码流数据。二.下载编译安装gitclonehttps://github.com/j0r1/JRTPLIB.git…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

一. 前言

        JRTPLIB 是 C++ 语言编写的 RTP 库,它帮助我们封装了 RTP 协议细节,用户通过提供好的接口可以设置 RTP 包信息并发送到指定地址,也可以接收 RTP 包取出信息。

        本文仅介绍如何使用 JRTPLIB 发送/接收 RTP 数据包,我在这篇博客又介绍了如何使用 JRTPLIB 构造 RTP 数据包来荷载 H264 码流数据。

二. 下载编译安装

git clone https://github.com/j0r1/JRTPLIB.git
cd JRTPLIB
cmake CMakeLists.txt
make
sudo make install

三. 代码实战

1. JRTPLIB接收RTP包程序

#include <jrtplib3/rtpsession.h>
#include <jrtplib3/rtplibraryversion.h>
#include <jrtplib3/rtpudpv4transmitter.h>
#include <jrtplib3/rtpsessionparams.h>
#include <jrtplib3/rtppacket.h>
#include <iostream>
#include <arpa/inet.h>
 
using namespace jrtplib;
 
void checkerror(int rtperr) {
	if (rtperr < 0) {
		std::cout << "ERROR: " << RTPGetErrorString(rtperr) << std::endl;
		exit(-1);
	}
}
 
int main() {
 
    std::cout << "Using JRTPLib version: " << RTPLibraryVersion::GetVersion().GetVersionString() << std::endl;
 
    uint16_t localport;
    std::cout << "Enter local port(even): ";
	std::cin >> localport;
 
    RTPUDPv4TransmissionParams tranparams;
    tranparams.SetPortbase(localport);
 
    RTPSessionParams sessparams;
    sessparams.SetOwnTimestampUnit(1.0 / 10.0);
    sessparams.SetAcceptOwnPackets(true);
 
    RTPSession sess;
    int status = sess.Create(sessparams, &tranparams);
    checkerror(status);
 
    
    RTPTime delay(0.020);
    RTPTime startTime = RTPTime::CurrentTime();
 
    bool done = false;
 
    while (!done) {
        sess.BeginDataAccess();
        if (sess.GotoFirstSourceWithData()) {
            do {
                RTPPacket* packet;
                while ((packet = sess.GetNextPacket()) != NULL) {
                    std::cout << "Got packet!" << std::endl;
                    std::cout << "SSRC: " << packet->GetSSRC() << std::endl;
                    std::cout << "Payload data: " << packet->GetPayloadData() << std::endl;
                    std::cout << "Payload type: " << packet->GetPayloadType() << std::endl;
                    std::cout << "Packet length: " <<packet->GetPacketLength() << std::endl;
                    std::cout << "Sequence number: " << packet->GetSequenceNumber() << std::endl;
                    std::cout << "Timestamp: " << packet->GetTimestamp() << std::endl;
                    std::cout << std::endl;
                    sess.DeletePacket(packet);
                } 
            } while (sess.GotoNextSourceWithData());
        }
        sess.EndDataAccess();
 
        RTPTime::Wait(delay);
    }
 
    sess.EndDataAccess();
 
    return 0;
}

jrtplib接收rtcp_qt tcpsocket 接收数据

编译后运行如上,设置本地监听端口后就会开始等待 RTP 数据。

2. JRTPLIB发送RTP包程序

#include <jrtplib3/rtpsession.h>
#include <jrtplib3/rtplibraryversion.h>
#include <jrtplib3/rtpudpv4transmitter.h>
#include <jrtplib3/rtpsessionparams.h>
#include <jrtplib3/rtppacket.h>
#include <iostream>
#include <arpa/inet.h>
 
using namespace jrtplib;
 
void checkerror(int rtperr) {
	if (rtperr < 0) {
		std::cout << "ERROR: " << RTPGetErrorString(rtperr) << std::endl;
		exit(-1);
	}
}
 
int main() {
    std::cout << "Using JRTPLib version: " << RTPLibraryVersion::GetVersion().GetVersionString() << std::endl;
	
    uint16_t localport;
    std::cout << "Enter local port(even): ";
	std::cin >> localport;
 
    std::string ipstr;
	std::cout << "Enter the destination IP address: ";
	std::cin >> ipstr;
	uint32_t 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);
 
    uint16_t destport;
	std::cout << "Enter the destination port: ";
	std::cin >> destport;
 
    int num;
	std::cout << "Number of packets you wish to be sent: ";
	std::cin >> num;
 
    RTPUDPv4TransmissionParams tranparams;
    tranparams.SetPortbase(localport);
 
    RTPSessionParams sessparams;
    sessparams.SetOwnTimestampUnit(1.0 / 10.0);
    sessparams.SetAcceptOwnPackets(true);
 
    // Now, we'll create a RTP session, set the destination, send some
	// packets and poll for incoming data.
    RTPSession sess;
    int status = sess.Create(sessparams, &tranparams);
    checkerror(status);
 
    RTPIPv4Address destAddr(destip, destport);
    status = sess.AddDestination(destAddr);
	checkerror(status);
 
    sess.SetDefaultPayloadType(96);
    sess.SetDefaultMark(false);
 
    for (int i = 1;i <= num;++i) {
        std::cout << "Sending packet " << i << "/" << num << std::endl;
 
        status = sess.SendPacket((void*)"0123456789", 10, 0, false, 10);
        checkerror(status);
 
        RTPTime::Wait(RTPTime(1, 0));
    }
 
    sess.BYEDestroy(RTPTime(10, 0), 0, 0);
 
    return 0;
}

jrtplib接收rtcp_qt tcpsocket 接收数据

        编译后运行如上,输入本地 UDP 使用的端口以及对端监听的端口,设置需要发送的 RTP 包数即可发送,发送后接收端打印的信息如下。

jrtplib接收rtcp_qt tcpsocket 接收数据

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/164749.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • read

    read

    2022年2月21日
    57
  • 深度学习 机器学习 数据集资源汇总

    深度学习 机器学习 数据集资源汇总目前个人认为较好的数据集网站主要有:数据集网站1.AIStudio数据集:开放数据集-百度AIStudio-人工智能学习与实训社区2.天池数据集:数据集-阿里系唯一对外开放数据分享平台3.PapersWithCode数据集:MachineLearningDatasets|PapersWithCode4.Kaggle数据集:FindOpenDatasetsandMachineLearningProjects|Kaggle5.GravitiO

    2022年7月17日
    30
  • numba 高级用法

    numba 高级用法numba是一个用于编译Python数组和数值计算函数的编译器,这个编译器能够大幅提高直接使用Python编写的函数的运算速度。numba使用LLVM编译器架构将纯Python代码生成优化过的机器码,通过一些添加简单的注解,将面向数组和使用大量数学的python代码优化到与c,c++和Fortran类似的性能,而无需改变Python的解释器。Numba的主要特性:动态代码生成(…

    2025年7月13日
    5
  • 最全企业安全网管工具名单查询_企业网络安全管理要求

    最全企业安全网管工具名单查询_企业网络安全管理要求我在一家医药公司做IT运维,老板喊我做一些企业智能化的工作。我就对这块做了些调研,所以知道哪些产品好用,哪些产品不好用,整理了份名单,分享给大家公司文档加密这块:翼火蛇免费3个点,其他按照15+3/月/终端收费,在做小白鼠实验云子可信-铁卷SaaS版目前是内测阶段,是我们公司目前在使用的,还不错,推荐这个!亿赛通收费标准未知,调研过,不好用,可能需要专业人员帮助员工机器管理的:瑞星安全云终…

    2022年10月4日
    6
  • 数据结构 哈希表设计

    实验6哈希表设计一、实验目的熟练掌握哈希表的构造方法,深刻理解哈希表与其他结构表的实质性差别。 二、实验内容程序的功能是对一批关键字集合采用除留余数法和线性探测再散列的方法解决冲突来建立相应的哈希表和完成查找过程及平均查找长度的计算。【问题描述】    研究哈希(HAXI)表查找技术的两个重要问题是:构造HAXI函数和处理冲突。现在要求针对某个数据集合中的关键字设

    2022年4月9日
    56
  • amd电脑安装Android失败,AMD显卡驱动安装失败

    amd电脑安装Android失败,AMD显卡驱动安装失败是WIN7的操作系统吧,必须要取得管理员权限。方法如下:1.右键单击“计算机”,进入“管理”找到“用户和组”2.找到administrators,右键调出属性,把“该账户已禁用”前面的勾去掉。回桌面3.新建“记事本”,copy如下内容:WindowsRegistryEditorVersion5.00[HKEY_CLASSES_ROOT\*\shell\runas]@=”管理员取得所有权”…

    2022年5月6日
    59

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号