android rtp 开源,关于开源的RTP
关于开源的RTP——jrtplib的使用
关于jrtplib环境的建立,能够见我曾经写的总结,如今我主要来谈谈jrtplib3.71下的几个example的学习。 一、sample是一个简单的IPv4的列子,它实现了RTP在本机上的数据的传输。 1、初始化。我们知道RTP是一般是使用UDP协议来实现数据的传输,在windows环境下,当然要用到我们熟悉的套接字的使用,所以我们先要进行初始化,载入套接字库。
函数RTPGetErrorString(…)依据出错返回的一个负数来推断,利用jrtplib採用的统一出错机制返回的是一个C++中标准的字符串std::string,表示出错的信息,比喻我们指定的Portbase不是一个偶数。(为什么,以下要讲)
2、关于RTPSession对象设置
因为要使用套接字,故我们在使用之前一定要为我们的监听socket指定一个监听端口,也就是这里的portbase的值。我们能够通过调用RTPSession的第二个參数RTPUDPv4TransmissionParams的成员函数来设定,
transparams.SetPortbase(portbase);
还有就是我们要通过RTPSession的第一个參数来设定以下一些值:
sessparams.SetOwnTimestampUnit(1.0/10.0);
//注意这个值我们一定要设置,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)
//设置时间戳是一件非常重要的事情,是RTP会话初始化过程所要进行的另外一项重要工
//作,他的单位是秒,如:当使用RTP会话传输8000Hz採样的音频数据时,因为时戳
//每秒钟将递增8000,所以时戳单元对应地应该被设置成1/8000:
sessparams.SetAcceptOwnPackets(true);
//通过这个函数我们能够设置是不是接收我们自己定义的数据包。
3、数据发送
我想当我们要想建立连接的时候,我们就要让发送端知道要发送到的主机的IP地址,在jrtplib中我们能够通过RTPSession成员函数AddDestination()、DeleteDestination()和 ClearDestinations()来完毕。如以下是将数据发送给本机的6000号端口:
unsigned long addr = ntohl(inet_addr("127.0.0.1"));
sess.AddDestination(addr, 6000);
当然我们还能够这样来完毕添?一个client,
RTPIPv4Address addr(destip,destport);//destip为clientIP地址,destport为client//端口号
status = sess.AddDestination(addr);
checkerror(status);
目标地址全部指定之后,接着就能够调用RTPSession类的SendPacket()方法,向全部的目标地址发送流媒体数据。SendPacket()是RTPSession类提供的一个重载函数,它具有下列多种形式:
int SendPacket(void *data,int len)
int SendPacket(void *data,int len,unsigned char pt,bool mark,
unsigned long timestampinc)
int SendPacket(void *data,int len,unsigned short hdrextID,void *hdrextdata,
int numhdrextwords)
int SendPacket(void *data,int len,unsigned char pt,bool mark,
unsigned long timestampinc,unsigned short hdrextID,
void *hdrextdata,int numhdrextwords)
SendPacket()最典型的使用方法是相似于以下的语句,当中第一个參数是要被发送的数据,而第二个參数则指明将要发送数据的长度,再往后依次是RTP负载类型、标识和时戳增量。例如以下所看到的:
status = sess.SendPacket((void *)"1234567890",10,0,false,10);
checkerror(status);
对于同一个RTP会话来讲,负载类型、标识和时戳增量通常来讲都是同样的,JRTPLIB同意将它们设置为会话的默认參数,这是通过调用 RTPSession类的SetDefaultPayloadType()、SetDefaultMark()和 SetDefaultTimeStampIncrement()方法来完毕的。为RTP会话设置这些默认參数的优点是能够简化数据的发送,比如,假设为 RTP会话设置了默认參数:
session.SetDefaultPayloadType(96);//注意这个參数不能随便设置,參考RFC3551
session.SetDefaultMark(false);
session.SetDefaultTimestampIncrement(160);
在设置了以上的值后,我们能够这样来发送数据:
status = sess.SendPacket((void *)"1234567890",10);
3、数据接收
对于流媒体数据的接收端,首先须要调用RTPSession类的PollData()方法来接收发送过来的RTP或者RTCP数据报。因为同一个 RTP会话中同意有多个參与者(源),你既能够通过调用RTPSession类的GotoFirstSource()和GotoNextSource() 方法来遍历全部的源,也能够通过调用RTPSession类的GotoFirstSourceWithData()和 GotoNextSourceWithData()方法来遍历那些携带有数据的源。在从RTP会话中检測出有效的数据源之后,接下去就能够调用 RTPSession类的GetNextPacket()方法从中抽取RTP数据报,当接收到的RTP数据报处理完之后,一定要记得及时释放。以下的代码示范了该怎样对接收到的RTP数据报进行处理:
JRTPLIB为RTP数据报定义了三种接收模式,当中每种接收模式都详细规定了哪些到达的RTP数据报将会被接受,而哪些到达的RTP数据报将会被拒绝。通过调用RTPSession类的SetReceiveMode()方法能够设置下列这些接收模式:
① RECEIVEMODE_ALL 缺省的接收模式,全部到达的RTP数据报都将被接受;
② RECEIVEMODE_IGNORESOME 除了某些特定的发送者之外,全部到达的RTP数据报都将被接受,而被拒绝的发送者列表能够通过调用AddToIgnoreList()、ClearIgnoreList() 和DeleteFromIgnoreList()方法来进行设置;
③ RECEIVEMODE_ACCEPTSOME 除了某些特定的发送者之外,全部到达的RTP数据报都将被拒绝,而被接受的发送者列表能够通过调用AddToAcceptList ()、ClearAcceptList ()和eleteFromAcceptList方法来进行设置。
4、执行程序
在执行程序之前,我们要知道,这是基于UDP协议的数据报服务。我们的example1是在本机上实现的RTP传输,而且仅仅有一个RTPSession对象,所以我们的监听和接收的port是同一个,所以此时我们的portBase要和我们添?到RTPSession对象中的client的port一致,如上面我们能够都设置成6000.可是假设是在两个线程中,我们就要注意了,serverport和客户port一定不一样,这也是主要的知识,用的时候要注意,多思考。
android rtp 开源,关于开源的RTP相关推荐
- 基于SIP和RTP协议的开源VOIP之QuteCom简单介绍
**************************************************************************************************** ...
- 【Android RTMP】Android Studio 集成 x264 开源库 ( Ubuntu 交叉编译 | Android Studio 导入函数库 )
文章目录 安卓直播推流专栏博客总结 一. x264 简介 二. x264 交叉编译 三. Android Studio 导入函数库 四. 交叉编译版本 五. GitHub 项目地址 安卓直播推流专栏博 ...
- android 开源_Android开源如何使其成为移动市场的领导者
android 开源 大约10年前,当我买到第一部手机时,我对它的操作系统或处理器一无所知. 甚至它的屏幕大小都没有关系. 我很高兴拥有一部"手机"电话. 如今,手机范例已从功能手 ...
- android开源数据库,Android Hawk数据库 github开源项目
Android Hawk数据库 github开源项目 Hawk 是一个很便捷的数据库 . 操作数据库仅仅需一行代码 , 能存不论什么数据类型 . github 地址: https://github. ...
- 针对Android平台播放器开源库NiceVieoPlayer倍速的开发
Android平台的视频开源库可谓百花齐放,直接给出比较流行的几大框架github地址:https://github.com/search?l=Java&o=desc&q=ExoPla ...
- android app 的后台代码,包括后台的Android美食APP项目开源代码
项目简介 小食光定位为一款集美食,社交,LBS服务于一体的美食推荐APP.为你发现周边美食的同时提供一个吃货分享的平台. APP截图 功能模块 美食推荐 :提供基础的美食信息查询: 商家推荐 : 基于 ...
- 各种Android UI开源框架 开源库
各种Android UI开源框架 开源库 转 https://blog.csdn.net/zhangdi_gdk2016/article/details/84643668 自己总结的Android开源 ...
- 开发常用镜像资源替换为国内开源镜像(yum,compose,maven,docker,android sdk,npm,国内开源镜像汇总)...
一.国内开源镜像站点汇总 阿里云开源镜像站 (http://mirrors.aliyun.com/) 网易开源镜像站 (http://mirrors.163.com/) 中国科学技术大学开源镜像站 ( ...
- 腾讯 android ui,腾讯开源的Android UI框架——QMUI Android
各位同学,早上好,我是你们的老朋友D_clock爱吃葱花,前些天忙着发版本,最近也在看各种各样的新知识,有好多东西想写啊啊啊啊啊.嗯,先冷静捋一下,卖个关子.扯回正题,今天继续为大家推荐一个Githu ...
- 【健康生活,从BMI开始——Melendez的Android版本BMI计算器开源了】
健康生活,从BMI开始--Melendez的Android版本BMI计算器开源了 健康生活,从BMI开始--Melendez的Android版本BMI计算器开源了 BMI是什么? 我的开源版本 感情各 ...
最新文章
- [转贴]现在在做一个WEB的站内消息系统,从工具栏位置弹出一徐徐上升的窗口...
- std:forward 完美转发
- TCP 三次握手 和 四次挥手
- 以下关于程序设计语言的叙述中,不正确的是()【最全!最详细解释!!】
- boolean类型默认值_「软帝学院」Java的基本数据类型
- JS数据结构与算法——选择排序(把小的数字依次往前放)
- java黄金分割点游戏_结对编程1——黄金点小游戏项目简介及需求分析
- 嵌入式中常见的存储器总结(二)SRAM VS DRAM
- html字幕字体大小,HTML字体集锦-
- 5道经典基础编程题让你入门C语言
- 【计算机网络自顶向下方法】(哈工大)学习笔记
- Java的图标和由来
- Intellij IDEA 插件下载慢或无法查询
- linux系统支持网银吗,我彻底方了!Linux下竟然也能使用网银?(图)
- HR:“最喜欢阿里出来的程序员了,技术又好又耐艹!” 我:???
- 【Python黑科技】孤独的程序员和AI机器人朋友聊天解闷(免费接口+保姆级图文+实现代码注释)
- macOS Monterey 12.1 (21C52) 虚拟机 IOS 镜像
- 浅谈public static void main(String[] args)
- Python基础(类与对象)
- ORACLE:分组函数