当前位置: 首页 > news >正文

怎样做网站外链两学一做网站链接

怎样做网站外链,两学一做网站链接,客源引流推广,创意作品设计及简介linux 下基于jrtplib库的实时传送实现一、RTP 是进行实时流媒体传输的标准协议和关键技术实时传输协议#xff08;Real-time Transport Protocol#xff0c;PRT#xff09;是在 Internet 上处理多媒体数据流的一种网络协议#xff0c;利用它能够在一对一#xff08;unicas…linux 下基于jrtplib库的实时传送实现 一、RTP 是进行实时流媒体传输的标准协议和关键技术  实时传输协议Real-time Transport ProtocolPRT是在 Internet 上处理多媒体数据流的一种网络协议利用它能够在一对一unicast单播或者一对多multicast多播的网络环境中实现传流媒体数据的实时传输。RTP 通常使用 UDP 来进行多媒体数据的传输但如果需要的话可以使用 TCP 或者 ATM 等其它协议。  协议分析 每一个RTP数据报都由头部Header和负载Payload两个部分组成其中头部前 12 个字节的含义是固定的而负载则可以是音频或者视频数据。       RTP 是目前解决流媒体实时传输问题的最好办法要在 Linux 平台上进行实时传送编程可以考虑使用一些开放源代码的 RTP 库如 LIBRTP、JRTPLIB 等。JRTPLIB 是一个面向对象的 RTP 库它完全遵循 RFC 1889 设计在很多场合下是一个非常不错的选择。JRTPLIB 是一个用 C 语言实现的 RTP 库这个库使用socket 机制实现网络通讯 因此可以运行在 Windows、Linux、FreeBSD、Solaris、Unix和VxWorks 等多种操作系统上。 二、JRTPLIB 库的使用方法及程序实现  (1)JRTPLIB  函数 的使用  a、在使用 JRTPLIB 进行实时流媒体数据传输之前首先应该生成 RTPSession 类的一个实例来表示此次 RTP 会话然后调用 Create() 方法来对其进行初始化操作。RTPSession 类的 Create() 方法只有一个参数用来指明此次 RTP 会话所采用的端口号。  RTPSession sess;  sess.Create(5000);   b、设置恰当的时戳单元是 RTP 会话初始化过程所要进行的另外一项重要工作这是通过调用 RTPSession 类的 SetTimestampUnit() 方法来实现的该方法同样也只有一个参数表示的是以秒为单元的时戳单元。  sess.SetTimestampUnit(1.0/8000.0);  c、当 RTP 会话成功建立起来之后接下去就可以开始进行流媒体数据的实时传输了。首先需要设置好数据发送的目标地址RTP 协议允许同一会话存在多个目标地址这可以通过调用 RTPSession 类的 AddDestination()、DeleteDestination() 和 ClearDestinations() 方法来完成。例如下面的语句表示的是让 RTP 会话将数据发送到本地主机的 6000 端口   unsigned long addr  ntohl(inet_addr(127.0.0.1));   sess.AddDestination(addr, 6000);    d、目标地址全部指定之后接着就可以调用 RTPSession 类的 SendPacket() 方法向所有的目标地址发送流媒体数据。SendPacket() 是 RTPSession 类提供的一个重载函数 对于同一个 RTP 会话来讲负载类型、标识和时戳增量通常来讲都是相同的JRTPLIB 允许将它们设置为会话的默认参数这是通过调用 RTPSession 类的 SetDefaultPayloadType()、SetDefaultMark() 和 SetDefaultTimeStampIncrement() 方法来完成的。为 RTP 会话设置这些默认参数的好处是可以简化数据的发送例如如果为 RTP 会话设置了默认参数   sess.SetDefaultPayloadType(0);   sess.SetDefaultMark(false);    sess.SetDefaultTimeStampIncrement(10);   之后在进行数据发送时只需指明要发送的数据及其长度就可以了   sess.SendPacket(buffer, 5);   e、对于流媒体数据的接收端首先需要调用 RTPSession 类的 PollData() 方法来接收发送过来的 RTP 或者 RTCP 数据报。由于同一个 RTP 会话中允许有多个参与者源你既可以通过调用 RTPSession 类的 GotoFirstSource() 和 GotoNextSource() 方法来遍历所有的源也可以通过调用 RTPSession 类的 GotoFirstSourceWithData() 和 GotoNextSourceWithData() 方法来遍历那些携带有数据的源。在从 RTP 会话中检测出有效的数据源之后接下去就可以调用 RTPSession 类的 GetNextPacket() 方法从中抽取 RTP 数据报当接收到的 RTP 数据报处理完之后一定要记得及时释放。 JRTPLIB 为 RTP 数据报定义了三种接收模式其中每种接收模式都具体规定了哪些到达的 RTP 数据报将会被接受而哪些到达的 RTP 数据报将会被拒绝。通过调用 RTPSession 类的 SetReceiveMode() 方法可以设置下列这些接收模式  ? RECEIVEMODE_ALL  缺省的接收模式所有到达的 RTP 数据报都将被接受  ? RECEIVEMODE_IGNORESOME  除了某些特定的发送者之外所有到达的 RTP 数据报都将被接受而被拒绝的发送者列表可以通过调用 AddToIgnoreList()、DeleteFromIgnoreList() 和 ClearIgnoreList() 方法来进行设置  ? RECEIVEMODE_ACCEPTSOME  除了某些特定的发送者之外所有到达的 RTP 数据报都将被拒绝而被接受的发送者列表可以通过调用 AddToAcceptList ()、DeleteFromAcceptList 和 ClearAcceptList () 方法来进行设置。 下面是采用第三种接收模式的程序示例。  if (sess.GotoFirstSourceWithData()) {      do {       sess.AddToAcceptList(remoteIP, allports,portbase);           sess.SetReceiveMode(RECEIVEMODE_ACCEPTSOME);       RTPPacket *pack;              pack  sess.GetNextPacket();            // 处理接收到的数据         delete pack;   }    while (sess.GotoNextSourceWithData());    }   2程序流程图 发送获得接收端的 IP 地址和端口号        创建 RTP 会话        指定 RTP 数据接收端 设置 RTP 会话默认参数   发送流媒体数据 接收获得用户指定的端口号  创建RTP会话  设置接收模式  接受RTP数据  检索RTP数据源  获取RTP数据报  删除RTP数据报 三、环境搭建及编译方法 1Toolchain的安装  首先找到xscale-arm-toolchain.tgz文件假设该文件包放在/tmp/下  #cd /  #tar -zxvf /tmp/xscale-arm-toolchain.tgz  再设置环境变量  #export PATH/usr/local/arm-linux/bin:$PATH  最后检查一下交叉编译工具是否安装成功  #arm-linux-g --version  看是否显示arm-linux-g的版本如有则安装成功。 2JRTPLIB 库的交叉编译及安装  首先从 JRTPLIB 的网站http://lumumba.luc.ac.be/jori/jrtplib/jrtplib.htmll 下载最新的源码包此处使用的是jrtplib-2.8.tar假设下载后的源码包放在/tmp下执 行下面的命令对其解压缩  #cd /tmp  #tar -zxvf jrtplib-2.8.tar  然后要对jrtplib进行配置和编译  #cd jrtplib-2.8  #./configure CCarm-linux-g cross-compileyes  修改Makefile文件  将链接命令ld 和ar改为arm-linux-ld和 arm-linux-ar  #make  最后再执行如下命令就可以完成 JRTPLIB 的安装  #make install (3)程序编译  a、配置编译环境  可以用export来配置也可以用编写Makefile的方法。这里采用Makefile。  编写Makefile: INCL  -I/usr/local/include CFLAGS  -pipe -O2 -fno-strength-reduce LFLAGS  /usr/local/lib/libjrtp.a -L/usr/X11R6/lib LIBS  -LX11 -LXext /usr/local/lib/libjrtp.a CC  arm-linux-g main:main.o  $(CC) $(LFLAGS) $(INCL) -o main main.o $(LIBS) main.o:main.cpp clean:  rm -f main  rm -f *.o   .SUFFIXES:.cpp .cpp.o:  $(CC) -c $(CFLAGS) $(INCL) -o $ $         /*  $表示目标的完整名字      */           /* $表示第一个依赖文件的名字 */  b、编译  假设发送和接收程序分别放在/tmp/send和/tmp/receive目录下  #cd /tmp/send  #make  #cd /tmp/receive  #make 四、易出错误及注意问题  1、找不到一些标准的最 基本的一些头文件。   主要是因为Toolchain路径没安装对要 严格按照步骤安装。  2、找不到使用的jrtplib库中的一些头文件。   在 jrtplib的安装目录下include路径下不能再有别的目录。  3、recieve函数接收数据包不能正确提出所要数据。   由于每一个RTP数据报都由头部Header和负载Payload两个部分组成若使用getrawdata()是返回整个数据包的数据包含传输媒体的类型、格式、序列号、时间戳以及是否有附加数据等信息。getpayload()函数是返回所发送的数据。两者一定要分清。  4、设置RECEIVEMODE_ACCEPTSOME  接收模式后运行程序接收端不能接包。   IP地址格式出了问题。iner_addr()与ntohl()函数要用对否则参数传不进去接受列表中无值当然接收不了数据包。  5、编译通过但测试时接收端不能接收到数据。   可能是接收机防火墙未关闭。运行   #iptables -F   也可能是IP地址没有设置好。运行   #ifocnfig eth0  *.*.*.*  netmask *.*.*.*  6、使用jrtolib库时在程序中include 后最好加上库所在的路径。 五、程序 send: #include stdio.h #include string.h #include rtpsession.h // 错误处理函数 void checkerror(int err) {   if (err  0) {     char* errstr  RTPGetErrorString(err);     printf(Error:%s\\n, errstr);     exit(-1);   } } int main(int argc, char** argv) {   RTPSession sess;   unsigned long destip;   int destport;   int portbase  6000;   int status, index;   char buffer[128];   if (argc ! 3) {     printf(Usage: ./sender destip destport\\n);     return -1;   }   // 获得接收端的IP地址和端口号   destip  inet_addr(argv[1]);   if (destip  INADDR_NONE) {     printf(Bad IP address specified.\\n);     return -1;   }   destip  ntohl(destip);   destport  atoi(argv[2]);   // 创建RTP会话   status  sess.Create(portbase);   checkerror(status);   // 指定RTP数据接收端   status  sess.AddDestination(destip, destport);   checkerror(status);   // 设置RTP会话默认参数   sess.SetDefaultPayloadType(0);   sess.SetDefaultMark(false);   sess.SetDefaultTimeStampIncrement(10);   // 发送流媒体数据   index  1;   do {     sprintf(buffer, %d: RTP packet, index );     sess.SendPacket(buffer, strlen(buffer));     printf(Send packet !\\n);   } while(1);   return 0; } receive: #include stdio.h #include rtpsession.h #include rtppacket.h // 错误处理函数 void checkerror(int err) {   if (err  0) {     char* errstr  RTPGetErrorString(err);     printf(Error:%s\\n, errstr);     exit(-1);   } } int main(int argc, char** argv) {   RTPSession sess;   int localport,portbase;   int status;   unsigned long remoteIP;   if (argc ! 4) {     printf(Usage: ./sender localport\\n);     return -1;   }    // 获得用户指定的端口号       remoteIP  inet_addr(argv[1]);   localport  atoi(argv[2]);   portbase  atoi(argv[3]);   // 创建RTP会话   status  sess.Create(localport);   checkerror(status);      //RTPHeader *rtphdr;   unsigned long timestamp1;   unsigned char * RawData;   unsigned char temp[30];   int lengh ,i;   bool allports  1;      sess.AddToAcceptList(remoteIP, allports,portbase);         do {  //设置接收模式         sess.SetReceiveMode(RECEIVEMODE_ACCEPTSOME);    sess.AddToAcceptList(remoteIP, allports,portbase);     // 接受RTP数据     status  sess.PollData();       // 检索RTP数据源     if (sess.GotoFirstSourceWithData()) {       do {                  RTPPacket* packet;         // 获取RTP数据报         while ((packet  sess.GetNextPacket()) ! NULL) {           printf(Got packet !\n);    timestamp1  packet-GetTimeStamp();    lenghpacket-GetPayloadLength();    RawDatapacket-GetPayload();        for(i0;ilengh;i){       temp[i]RawData[i];   printf(%c,temp[i]);    }    temp[i]\0;    printf(  timestamp: %d lengh%d data:%s\n,timestamp1,lengh,temp);           // 删除RTP数据报               delete packet;         }       } while (sess.GotoNextSourceWithData());     }   } while(1);   return 0; }
http://wiki.neutronadmin.com/news/301895/

相关文章:

  • 昆山网站建设义搏旅游网站开发的重要性
  • 广州公司核名在哪个网站ui交互设计课程培训
  • 英语网站online注册营业执照申请
  • html怎么添加图片正规seo关键词排名网络公司
  • 电影网站免费建设域名备案代理
  • 学校门户网站建设的优势网站建设预期目标
  • 企业网站的建设 任务书台州网站注册 公司
  • 深圳门户网站建设特点所见即所得型网页制作工具
  • 网站打开后显示建设中印尼网站建设费用
  • 网站建设组织管理怎么写床上爱做网站
  • 广州越秀网站制作建设是哪里的
  • 网站做301长沙网站建设的首选
  • 沥林行业网站建设浏览器为什么无法打开网页
  • 百度 网站地图怎么做wordpress标题截取
  • 网站是哪个公司做的好手机端百度收录入口
  • 网站制作公司dedecms建工网招聘
  • 扬州市广陵区建设局网站在线编辑器
  • 南宁市建设厅官方网站个人网站开发 服务器
  • 模板站怎么改成营销型网站wordpress用户上传资源验证码
  • 小说网站开发需求企业网站设计开发服务
  • 公司增加英文网站要怎么做网页设计建立站点步骤
  • 网站建设价格制定的方法wordpress首次请求慢
  • 免费网站成品怎么做提卡密网站
  • 在线支付网站建设交互式网站
  • 专业的河南网站建设公司排名成都专业seo公司
  • 南宁网站建设是什么意思专门做2次元图片的网站
  • 美容茌哪个网站做宣传好检测网站安全
  • 彩票网站建设教程沈阳做网站制作的公司
  • google网站优化器自己创造网站平台
  • 深圳设计网站多少钱做网站法人拍照背景