关于客户端和服务器端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

相关文章

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

Oracle修改端口号之后无法启动的解决方案

《Oracle修改端口号之后无法启动的解决方案》Oracle数据库更改端口后出现监听器无法启动的问题确实较为常见,但并非必然发生,这一问题通常源于​​配置错误或环境冲突​​,而非端口修改本身,以下是系... 目录一、问题根源分析​​​二、保姆级解决方案​​​​步骤1:修正监听器配置文件 (listener.

Linux中修改Apache HTTP Server(httpd)默认端口的完整指南

《Linux中修改ApacheHTTPServer(httpd)默认端口的完整指南》ApacheHTTPServer(简称httpd)是Linux系统中最常用的Web服务器之一,本文将详细介绍如何... 目录一、修改 httpd 默认端口的步骤1. 查找 httpd 配置文件路径2. 编辑配置文件3. 保存

Python FastMCP构建MCP服务端与客户端的详细步骤

《PythonFastMCP构建MCP服务端与客户端的详细步骤》MCP(Multi-ClientProtocol)是一种用于构建可扩展服务的通信协议框架,本文将使用FastMCP搭建一个支持St... 目录简介环境准备服务端实现(server.py)客户端实现(client.py)运行效果扩展方向常见问题结

Nginx 413修改上传文件大小限制的方法详解

《Nginx413修改上传文件大小限制的方法详解》在使用Nginx作为Web服务器时,有时会遇到客户端尝试上传大文件时返回​​413RequestEntityTooLarge​​... 目录1. 理解 ​​413 Request Entity Too Large​​ 错误2. 修改 Nginx 配置2.1