0

有人告诉我,有一个 ffmpeg 补丁可以解决流式传输到 FLV 播放器时出现的问题。

在rtmpproto.c的第 2314 行附近有以下表达式:

if (rt->flv_header_bytes < 11)
            break;

解决方法是将其更改为包含此附加要求:

if (rt->flv_header_bytes < 11 && !rt->flv_off)
            break;

不过我很好奇这个说法的逻辑。第一条语句检查 FLV 标头是否小于 11 个字节,但是在检查标头有多少字节之前先检查是否打开了 flv 流不是更有效吗?

if (!rt->flv_off && rt->flv_header_bytes < 11)
            break;

或者如何将声明更改为这样?

if (rt->flv_off || (!rt->flv_off && rt->flv_header_bytes < 11)
                break;

那会更有效还是会以某种方式破坏代码?

4

1 回答 1

1

这取决于哪个条件最常失败,以及编译器是否尊重您键入条件的顺序。假设后者是正确的(一个很大的假设),首先检查标题大小可能更有效,因为 FLV 播放器通常是打开的。

完整的评估需要更多细节......尽管这些都可能无关紧要,因为(a)“浪费”的时间几乎肯定是微不足道的,并且(b)编译器很可能会比你做得更好将要。

如果您想在第三个陈述中使用 OR,只需应用德摩根定律并写

if(rt->flv_off || rt->flv_header_bytes >= 11)

但同样,这并不是真正值得担心的事情。

于 2012-11-03T04:25:28.863 回答