P粉5881526362023-09-04 15:45:35
これは質問に対する実際の答えではありません。Anas がすでにこれについて説明していますが、とにかく言及する価値があり、コメントには当てはまりません。
次のようなコード ブロックを記述するのは困難になります:
リーリー エラー状態を最後まで延期し、エラー以外の状態を if(){}
ブロックに含めると、2 つの問題が発生します。
arrow アンチパターン
として知られる、ネストされた if(){} ブロックの奥深くに埋め込まれています。 再フォーマットできます:
リーリー ### に: ### リーリーこれは厳密なルールではありませんが、心に留めておくと、ばらばらのコード ブロックや混乱を招くコード ブロック、またはページの右側にまで広がってしまうコード ブロックの作成を避けることができます。
P粉5236250802023-09-04 09:43:59
いくつかの調査の後、次の関数を使用して、curl でストリームを実行できます:
リーリーそしてコールバック関数を作成します:
リーリー コードは正常に動作しますが、curl_setopt($ch, CURLOPT_TIMEOUT, 30);
cURL は主に静的コンテンツを取得する HTTP リクエストを行うように設計されているため、ストリーミング URL には fopen()
を使用することをお勧めします。 MJPEG ストリームは動的であり、新しいフレームが継続的に送信されます。
デフォルトでは、cURL はリクエストごとにタイムアウトを設定します。サーバーがフレームを送信するのに長い時間がかかる場合、リクエストがタイムアウトになり、ストリームが中断されたり、エラー メッセージが表示されたりする可能性があります。
最良のエクスペリエンスを得るには、fopen()
関数を使用できます。
以下はストリームと fopen を使用した例です。