美文网首页
Librtmp的一个小Bug

Librtmp的一个小Bug

作者: z_abandon | 来源:发表于2020-06-22 17:13 被阅读0次

    一、Bug描述
      在利用 librtmp 进行协商收取 wowza 服务端数据流的时候,会出现概现的 flv 解复用找不到 pps,从而导致的帧解码不出来,无法正常显示的问题。

    二、Bug原因及解决方式
      在Librtmp 的 RTMP_Read 函数之中,收取底层函数返回的 flv 数据时,本层会分配缓冲空间传递给下层函数,调用下层函数循环进行码流收取。当下层函数检测到缓冲内存不足的时候,下层函数会重新分配内存空间覆盖掉本层函数传递下去的指针变量。
      数据传回本层函数之后,librtmp 判断出传上来的内存空间不是传下去的内存空间之时,会做一个异常处理。会使用 realloc 函数扩充已分配的内存不够用的内存空间,判断已经收取的码流大小,然后使用 memcpy 将新收到的数据接在已经收到的数据之后。
      问题原因在于异常处理时 librtmp 在判断已经收取的码流大小时计算错误,RTMP_Read 函数在第一次收取码流的时候,需要在一开始加一个 FLV Header 给缓冲空间头部区域,所以判断已经收取的码流大小时,需要加一个 FLV Header 长度。反映在代码内也就是初始化变量 cnt 的时候不应该赋值为 0, 而应该是 sizeof(flvHeader)。

    librtmp_bug1.jpg

    相关文章

      网友评论

          本文标题:Librtmp的一个小Bug

          本文链接:https://www.haomeiwen.com/subject/mzfffktx.html