weixin_41515943 2024-04-17 15:07 采纳率: 0%
浏览 279

LIve555实时推流,客户端周期性卡顿

使用ffmpeg+live555实现rtsp实时流传输,客户端使用VLC拉流播放。客户端和服务端中间经过一台交换机(均不开启巨帧)
VLC客户端大约每隔35s就会卡顿一下,我确认传输的数据包并未超过live555允许的大小(我的数据包最大是20000左右,live555的BANK_SIZE设置了600000,outpacketbuffer::max_size也设置了600000)
有没有什么分析解决思路?

  • 写回答

6条回答 默认 最新

  • 专家-赤兔[在线] 优质创作者: 编程框架技术领域 2024-04-17 15:07
    关注

    引自免费微信小程序:皆我百晓生

    针对您遇到的问题,我们可以从以下几个方面进行排查和优化:

    1. 网络延迟:首先检查网络延迟情况,确保没有丢包或者高延迟现象。可以使用ping命令测试两端之间的延迟,或者在服务端和客户端之间运行网络监控工具(如Wireshark)查看是否有丢包。

    2. 编码参数调整:确认编码器的参数设置是否合理,比如码率、帧率等。过高或过低的参数可能导致卡顿。尝试调整这些参数,观察是否改善。

    3. 解码器性能:VLC可能因为解码资源不足而产生卡顿。检查您的系统资源,特别是CPU和GPU占用情况。考虑更新VLC到最新版本,或者尝试其他播放器,如PotPlayer或MPlayer,看是否还有同样的问题。

    4. 直播服务器设置:确认Live555服务器的配置,包括缓冲区大小、线程数量等。确保它能有效地处理并发请求和数据传输。

    5. Livestreaming协议:除了RTSP,也可以考虑使用HLS或WebRTC等现代协议,它们通常有更好的容错性和适应性。

    6. 多路复用:如果同时有多路流,可能存在竞争问题。尝试单独测试每一路流,看看是否仍然存在卡顿。

    7. 硬件设备:检查编码器和解码器的硬件设备,尤其是编码器,因为它可能会成为瓶颈。

    8. 软件驱动:更新所有相关软件和驱动程序,确保它们是最新的。

    9. 操作系统设置:检查操作系统的网络设置,例如TCP/IP堆栈优化,Nagle算法等,它们可能影响实时性。

    针对Live555服务器的设置,您可以检查并调整BankSizeOutPacketBuffer::max_size,这两个值应该足够大,以容纳大部分数据包,并且不会导致内存溢出。然而,增大缓冲区并不一定能解决卡顿问题,反而可能增加延迟。如果您的数据包确实小于规定的限制,那么这可能不是问题所在。

    以下是关于Live555服务器配置的一些建议:

    // 在RTPSink.hh文件中,找到BankSize定义并适当修改
    #define BankSize 600000
    
    // 在RTPSink.cpp文件中,找到OutPacketBuffer::max_size设置
    OutPacketBuffer::max_size = BankSize;
    

    如果您有权限访问VLC的源代码,还可以尝试调整其内部的缓存策略,但这通常不是推荐的做法,因为这可能会影响VLC的整体稳定性。如果要这样做,建议查找VLC的缓存管理部分,并尝试调整缓冲区大小和刷新策略。

    对于上述步骤,请根据实际情况进行逐一排查,逐步排除可能的问题来源。如果有更多具体信息或遇到更具体的技术问题,欢迎继续提问。

    评论 编辑记录

报告相同问题?

问题事件

  • 创建了问题 4月17日