0

FLV プレーヤーにストリーミングする際の問題を修正する ffmpeg のパッチについて聞いたことがあります。

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) コンパイラはおそらくあなたよりもはるかに優れた最適化を行うため、これはおそらく問題にはなりません。意思。

3 番目のステートメントのように OR を使用する場合は、DeMorgan の法則を適用して次のように記述します。

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

繰り返しますが、これは本当に心配する必要はありません。

于 2012-11-03T04:25:28.863 に答える