关于客户端和服务器端live555的一点bug修改

2024-02-22 04:18

本文主要是介绍关于客户端和服务器端live555的一点bug修改,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

客户端主要出错信息:

  MultiFramedRTPSource error: Hit limit when reading incoming packet over TCP. Increase \"MAX_PACKET_SIZE\"

  RTCPInstance error: Hit limit [1450,1450] when reading incoming packet over TCP. Increase "maxRTCPPacketSize"

  live555源码修改记录

  服务器端:

  针对1080P高清H264码率过大,需要修改live/mediaServer/DynamicRTSPServer.cpp文件中第117行

  OutPacketBuffer::maxSize = 1024*1024; // allow for some possibly large H.264 frames

  maxSize的值,具体大小可根据实际播放画面质量和服务器打印的出错信息修改

  针对服务器发送的RTP包出错,发送时超出系统TCP buffer大小,需修改:live/liveMedia/RTPInterface.cpp sendDataOverTCP()函数

  修改为

  makeSocketBlocking(socketNum);

  int sendSuccess = loopsend(socketNum,data,dataSize);

  makeSocketNonBlocking(socketNum);

  if(sendSuccess == dataSize)

  {

  return True;

  }

  else

  {

  printf("send false...........\n");

  return False;

  }

  需添加loopsend()函数

  int loopsend(int sock, u_int8_t const* buf, unsigned int sndsize)

  {

  int remian = sndsize;

  int sendlen = 0;

  int ret = 0;

  while(remian > 0)

  {

  ret=send(sock,buf+sendlen,remian,0);

  if(ret <= 0)

  {

  printf("ret = %d\n",ret);

  return ret;

  }

  sendlen += ret;

  remian -= ret;

  }

  return sndsize;

  }

  客户端代码健壮性加强

  修改live/liveMedia/RTPInterface.cpp 中tcpReadHandler1()函数

  在case AWAITING_SIZE2:中

  unsigned short size = (fSizeByte1<<8)|c;后添加RTP和RTCP包的大小判断

  添加代码如下:

  if(fStreamChannelId == 0x00)

  if(size > 20000) //lcy add 20000为"MAX_PACKET_SIZE"值的大小(RTP包的最大值)

  {

  fTCPReadingState = AWAITING_DOLLAR;

  break;

  }

  if(fStreamChannelId == 0x01)

  if(size > 1450) //lcy add 1450为"maxRTCPPacketSize"值的大小(RTCP包的大小)

  {

  fTCPReadingState = AWAITING_DOLLAR;

  break;

  }


转自:http://www.whzlcx.com/details.htm?ID=18&did=662

这篇关于关于客户端和服务器端live555的一点bug修改的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/734099

相关文章

kingbase修改权限实现方式

《kingbase修改权限实现方式》该文章详细介绍了如何在数据库中创建用户并赋予其相应的权限,包括创建用户、回收默认权限、创建数据库、赋权数据库权限、创建只读用户以及回收权限等步骤... 目录前言使用步骤总结前言创建用户后对数据库对象的读写权限进行修改使用步骤1、创建用户create user cs

linux实现对.jar文件的配置文件进行修改

《linux实现对.jar文件的配置文件进行修改》文章讲述了如何使用Linux系统修改.jar文件的配置文件,包括进入文件夹、编辑文件、保存并退出编辑器,以及重新启动项目... 目录linux对.jar文件的配置文件进行修改第一步第二步 第三步第四步总结linux对.jar文件的配置文件进行修改第一步进

Python实现Word文档自动化的操作大全(批量生成、模板填充与内容修改)

《Python实现Word文档自动化的操作大全(批量生成、模板填充与内容修改)》在职场中,Word文档是公认的好伙伴,但你有没有被它折磨过?批量生成合同、制作报告以及发放证书/通知等等,这些重复、低效... 目录重复性文档制作,手动填充模板,效率低下还易错1.python-docx入门:Word文档的“瑞士

Java Lettuce 客户端入门到生产的实现步骤

《JavaLettuce客户端入门到生产的实现步骤》本文主要介绍了JavaLettuce客户端入门到生产的实现步骤,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要... 目录1 安装依赖MavenGradle2 最小化连接示例3 核心特性速览4 生产环境配置建议5 常见问题

Python函数的基本用法、返回值特性、全局变量修改及异常处理技巧

《Python函数的基本用法、返回值特性、全局变量修改及异常处理技巧》本文将通过实际代码示例,深入讲解Python函数的基本用法、返回值特性、全局变量修改以及异常处理技巧,感兴趣的朋友跟随小编一起看看... 目录一、python函数定义与调用1.1 基本函数定义1.2 函数调用二、函数返回值详解2.1 有返

Nginx屏蔽服务器名称与版本信息方式(源码级修改)

《Nginx屏蔽服务器名称与版本信息方式(源码级修改)》本文详解如何通过源码修改Nginx1.25.4,移除Server响应头中的服务类型和版本信息,以增强安全性,需重新配置、编译、安装,升级时需重复... 目录一、背景与目的二、适用版本三、操作步骤修改源码文件四、后续操作提示五、注意事项六、总结一、背景与

Java使用jar命令配置服务器端口的完整指南

《Java使用jar命令配置服务器端口的完整指南》本文将详细介绍如何使用java-jar命令启动应用,并重点讲解如何配置服务器端口,同时提供一个实用的Web工具来简化这一过程,希望对大家有所帮助... 目录1. Java Jar文件简介1.1 什么是Jar文件1.2 创建可执行Jar文件2. 使用java

Redis客户端连接机制的实现方案

《Redis客户端连接机制的实现方案》本文主要介绍了Redis客户端连接机制的实现方案,包括事件驱动模型、非阻塞I/O处理、连接池应用及配置优化,具有一定的参考价值,感兴趣的可以了解一下... 目录1. Redis连接模型概述2. 连接建立过程详解2.1 连php接初始化流程2.2 关键配置参数3. 最大连

SQL Server修改数据库名及物理数据文件名操作步骤

《SQLServer修改数据库名及物理数据文件名操作步骤》在SQLServer中重命名数据库是一个常见的操作,但需要确保用户具有足够的权限来执行此操作,:本文主要介绍SQLServer修改数据... 目录一、背景介绍二、操作步骤2.1 设置为单用户模式(断开连接)2.2 修改数据库名称2.3 查找逻辑文件名

MYSQL查询结果实现发送给客户端

《MYSQL查询结果实现发送给客户端》:本文主要介绍MYSQL查询结果实现发送给客户端方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录mysql取数据和发数据的流程(边读边发)Sending to clientSending DataLRU(Least Rec