jrtplib java,jrtplib 分包处理

转载自:http://blog.csdn.net/sxcong/article/details/3736354听说jrtplib写的不错,终于找到时间下来看看。下载,直接用VC6编译,很容易。然后打开VC,建立工程,测试examples下那几个收发程序,的确用起来很简单。想想以前都是自己封装UDP,现在的程序员真幸福。不过,在发送视频数据时出了问题,跟踪进去看了一下,里面设置最大帧数据长度为140…

大家好,又见面了,我是你们的朋友全栈君。

转载自:http://blog.csdn.net/sxcong/article/details/3736354

听说jrtplib写的不错,终于找到时间下来看看。下载,直接用VC6编译,很容易。然后打开VC,建立工程,测试examples下那几个收发程序,的确用起来很简单。想想以前都是自己封装UDP,现在的程序员真幸福。不过,在发送视频数据时出了问题,跟踪进去看了一下,里面设置最大帧数据长度为1400。于是自己设置最大为32X1024,跟进去还不行。原来是内部没有分包处理,超过上限就不允许发了。随便搜了一个,有个叫SmartView的视频会议源码,是改写jrtplib的RTPSession的SendPacket,在这里分包。很不错的想法。不过又一想,jrtplib,本身是做为lib提供的,虽然可以改写其代码,但肯定与作者初衷不符。于是找到利用这个库的同作者写的开源项目emiplib,够复杂的,把ffmpeg也集进来了。先不管,直接搜索关键字RTPSession和SendPacket,发现他发送的是自己封装的一个类MIPRTPSendMessage,其父类是MIPMessage。看到这想都不用想,作者肯定是在发送之前先进行了处理,形成了自己定义格式的Message再发送。收到后在形成MIPRTPRecvMessage。这应该是是最正规的写法。不过,想想这个库,虽然没用过,但很多年前就听人说过,肯定考虑过这些问题。没有文件,就仔细看头文件,终于发现了SendPacketEx这个函数,一大堆英文说明,刚才没仔细看:/** Sends the RTP packet with payload /c data which has length /c len.*  The packet will contain a header extension with identifier /c hdrextID and containing data*  /c hdrextdata. The length of this data is given by /c numhdrextwords and is specified in a*  number of 32-bit words. The used payload type, marker and timestamp increment will be those that*  have been set using the /c SetDefault member functions.*/这回看清楚了吧,对,就是那个hdrextdata,是分包的数据,是长度,hdrextID是其ID。这样,发送数据的时候,先分好包,再调用SendPacketEx就行了。发送没问题了,再说接收。也不看类结构了,参考亚历山大方法,直接搜索recvfrom。在RTPUDPv4Transmitter::PollSocket这里找到了,然后紧接就是RTPRawPacket *pack;pack = RTPNew(….很好,收到后先封装成了RTPRawPacket。但是,最终和用户打交道的是RTPPacket,于是看它的头文件,一眼就看到:/** If a header extension is present, this function returns the extension identifier. */uint16_t GetExtensionID() const                                                        { return extid; }/** Returns the length of the header extension data. */uint8_t *GetExtensionData() const                                                    { return extension; }/** Returns the length of the header extension data. */size_t GetExtensionLength() const                                                    { return extensionlength; }对头,这就是我们需要的。但是,这三个值是怎么出现的呢?回头再看从RTPRawPacket–>RTPPacket.处理的过程看起来比较复杂,就先找外面的回调,应该在ProcessPolledData里面。然后,看到了ProcessRawPacket(…),参数都不用看,从函数名就知道这是我们想要了解的东西了。其实不知道这个也没关系,我们只需要调用上面那三个函数就可以在外面重新组包了。两瓶酒的时间分析结束。不过只是听说这个库写的不错,随手记下来看看,实在没兴趣动手用代码来实现了。有哪位兄弟能写出代码附上就好了。

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

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

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


相关推荐

  • Java文件上传详解

    Java文件上传详解Java文件上传详解文件上传和下载准备工作使用类介绍代码编写文件上传和下载在Web应用中,文件上传和下载功能是非常常用的功能,这篇博客就来讲一下JavaWeb中的文件上传和下载功能的实现。准备工作对于文件上传,浏览器在上传的过程中是将文件以流的形式提交到服务器端的。一般选择采用apache的开源工具common-fileupload这个文件上传组件。common-fileupload是依赖于common-io这个包的,所以还需要下载这个包。首先下载最新的jar包https://mvnr

    2022年5月14日
    38
  • pytest重试_联系人去重失败

    pytest重试_联系人去重失败安装:pip3installpytest-rerunfailures重新运行所有失败用例要重新运行所有测试失败的用例,请使用–reruns命令行选项,并指定要运行测试的最大次数:$py

    2022年7月29日
    2
  • JAVA Map转List

    JAVA Map转List将Map的key转成List:ListmapKeyList=newArrayList(map.keySet());将Map的Value转成List:ListmapValueList=newArrayList(map.valueSet());

    2022年7月26日
    18
  • matlab fir带通滤波,基于Matlab的FIR带通滤波器设计与实现

    matlab fir带通滤波,基于Matlab的FIR带通滤波器设计与实现mal”>3.2软件设计3.2.1数据组织方式若输入信号x(n)和滤波器的单位冲激响应h(n)在频域分别为,则其输出信号的频率响应为。根据离散傅氏变换的性质,可以得到滤波系统的差分方程:从上文Matlab的仿真过程可得到滤波器的级数N和滤波器系数h(n)。从上述可知数字滤波器实现时,主要是进行乘和加运算以及数据存取操作。在定点DSP上实现FIR滤波有两种方式:一种是用线性缓冲区实现z-1…

    2022年6月1日
    41
  • 太极阳支持的Android版本,三星 Android 7.0 无法使用太极阳

    太极阳支持的Android版本,三星 Android 7.0 无法使用太极阳什么问题太极阴无法变成太极阳详细情况按照官网操作刷入magisk(+manager)magisk菜单download中搜索taichi,下载taichi4.9.1模块安装,然后重启手机从浏览器搜索稳定版网址链接,然后下载太极5.1.114.下载完成直接安装后,显示还是太极阴重启系统后,进入太极应用依然显示太极阴进入magisk菜单modules,发现Taichiv4.9.1模块已经被…

    2022年6月4日
    40
  • 职业目标的评估与调整_遥感图像目标检测数据集

    职业目标的评估与调整_遥感图像目标检测数据集COCO系列文章:MSCOCO数据集目标检测评估(DetectionEvaluation)(来自官网)MSCOCO数据集人体关键点评估(KeypointEvaluation)(来自官网)MSCOCO数据集输出数据的结果格式(resultformat)和如何参加比赛(participate)(来自官网)MSCOCO官网数据集(百度云)下载,COCOAPI、MASKA……

    2022年10月16日
    0

发表回复

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

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